2017-01-11 51 views
0

我想爲NER使用Pyner(https://github.com/dat/pyner)。我給它一串文本從中提取命名實體。但是我得到一個錯誤。我附上snipet當錯誤出現了:當我嘗試多種類型的輸入(字節對象)Python字符串替換不工作(字節輸入預計?)

text = b'This' 
text = bytes("This".encode('utf-8')) 

我認爲問題是,取而代之的是沒有得到時

for s in ('\f', '\n', '\r', '\t', '\v'): #strip whitespaces 
    text = text.replace(s, '') 

Error message: {TypeError: a bytes-like object is required, not 'str'} 

這個錯誤甚至正確的輸入類型。我正在使用python 3.5。我究竟做錯了什麼?請幫忙!

+0

你們是不是從一開始就完全去除空白和結束?因爲有一個'strip'函數可以做到這一點。如果你刪除所有空格,應該指出你缺少一個空格'''' –

回答

2

replacestrbytes一起使用但不是兩者混合。

你可以把它改寫這樣的:

for s in (b'\f', b'\n', b'\r', b'\t', b'\v'): #strip whitespaces except space! 
    text = text.replace(s, b'') 

你也可以申請stripbytes工作類型:

text = text.strip() # remove all of the above + space 

也是可能的:轉換回str事前,試圖:

text = str(text) 

text = text.decode('utf-8') 

(選擇最佳的解決方案,以避免修改第三方包,帕特里克指出)

+0

這適用於我。所以我想應該修改包中的代碼行。謝謝! – SashaGreen

+1

@SashaGreen這意味着這個包被設計爲可以與字符串一起工作,但是你正在試圖使它與字節一起工作。在做任何改變之前要非常小心。如果這個包對你所做的事情是必要的,你應該盡一切努力來改變你的輸入,而不是別人的代碼。 –

+0

這是一個很好的觀點。謝謝! – SashaGreen