2015-03-31 56 views
0

我已經使用Twitter API for python下載了關於阿姆斯特丹的推文,UTF-8。 現在我想做一個字典LDA,使用此代碼(只是部分的代碼,但是這是導致該錯誤的部分):它總是給我一個錯誤,這取決於Tweet分析,爲LDA製作字典時出現Python錯誤

dictionary = corpora.Dictionary(line.lower().split() for line in open(input_file)) 

上txt文件,我選擇作爲輸入,無論是:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xf1 in position 2: invalid continuation byte 

UnicodeDecodeError: 'utf8' codec can't decode byte xxxx in position 175-176: unexpected end of data 

我希望這樣做的原因是它是未知的UTF-8 TWEE使用的字符(一些表情符號也許TS)和谷歌搜索之後試圖通過替換代碼:

dictionary = corpora.Dictionary(line.lower().split() for line in open(input_file, errors='ignore')) 

與錯誤消息:

dictionary = corpora.Dictionary(line.lower().split() for line in open(input_file, errors='ignore')) 
TypeError: 'errors' is an invalid keyword argument for this function 

dictionary = corpora.Dictionary(line.lower().split() for line in open(input_file, 'ignore')) 

與錯誤消息:

dictionary = corpora.Dictionary(line.lower().split() for line in open(input_file, 'ignore')) 
ValueError: mode string must begin with one of 'r', 'w', 'a' or 'U', not 'ignore' 

有沒有人有辦法解決嗎?謝謝

回答

0

如果你知道你正在閱讀的數據是UTF-8,你可以導入的編解碼器模塊,並使用codecs.open()代替open()

Reading and Writing Unicode Data

試試這個:

import codecs 
dictionary = corpora.Dictionary(line.lower().split() for line in codecs.open(input_file, mode='r', encoding='utf-8', errors='ignore')) 
0

您的錯誤處理是在錯誤的地方。要求忽略解碼錯誤時無法打開文件;這發生在更遠的地方。

你應該怎麼做,是以二進制模式打開文件(rb修飾符)並讀取行。他們將成爲bytes對象。那麼你可以解碼它們,並忽略錯誤:

with open('/tmp/myfile', 'rb') as f: 
    for linebytes in f.readlines(): 
     linestring = linebytes.decode(encoding='utf-8', errors='ignore') 
0

你的輸入文件顯然不是UTF-8。應該有文件解釋這些Twitter文件的實際編碼是什麼;在打開文件時相應地設置編碼。

with open(input_file,encoding="whatever Twitter uses") as twitterfile:  
    dictionary = corpora.Dictionary(line.lower().split() for line in twitterfile) 

這樣Python會將輸入解碼爲沒有錯誤的字符串,這明顯優於忽略錯誤和破壞數據。

相關問題