2014-10-27 45 views
2

我在Python 3.4中使用NLTK 3.0,並且由於以下錯誤而無法進行POS標記: 我已閱讀全部similar posts related to similar problems,但找不到解決此問題的方法。大多數帖子提到升級到NLTK 3.0將解決問題,但我已經有NLTK 3.0。根據這些帖子,nltk的data.py改變解決了這個問題,但NLTK人不鼓勵這樣做。 這裏是我的代碼:使用nltk 3.0在python 3.4上進行pos標記時出現編碼錯誤

from nltk.tag import pos_tag 
from nltk.tokenize import word_tokenize 
pos_tag(word_tokenize("John's big idea isn't all that bad.")) 

,這裏是錯誤:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0: ordinal not in range(128)

有沒有辦法做到這一點沒有操縱data.py? 任何想法,將不勝感激。

+0

您是否使用提供的接口('nltk.download()'或類似的東西)下載了NLTK數據,而不是手動(在這種情況下,您可能有Py2數據)?我的設置與您的設置完全相同,無法重現您的錯誤。 – michaelmeyer 2014-10-27 08:33:01

回答

1

在當前版本的nltk_data中,它們提供了兩個版本的pickle文件:一個用於Pyt例如,有一個english.picklenltk_data/taggers/maxent_treebank_pos_tagger和一個在nltk_data/taggers/maxent_treebank_pos_tagger/PY3。最新的nltk由裝飾者py3_data自動處理。

總之,如果您下載最新的nltk_data,但沒有最新的nltk,它可能會加載錯誤的pickle文件,引發UnicodeDecodeError異常。

注意:假設您已經有最新的nltk,您可能會遇到一些路徑錯誤,您可以在pickle文件的路徑中看到兩個「PY3」。這可能意味着一些開發人員不知道py3_data並已冗餘地處理路徑。您可以自己刪除/恢復冗餘。例如,請參閱this pull request

0

我沒有任何問題與python3

[email protected]:~$ python3 
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from nltk import word_tokenize, pos_tag 
>>> pos_tag(word_tokenize("John's big idea isn't all that bad.")) 
[('John', 'NNP'), ("'s", 'POS'), ('big', 'JJ'), ('idea', 'NN'), ('is', 'VBZ'), ("n't", 'RB'), ('all', 'DT'), ('that', 'DT'), ('bad', 'JJ'), ('.', '.')] 

檢查是否有utf-8爲您sys.defaultencoding

>>> import sys 
>>> sys.getdefaultencoding() 
'utf-8' 

如果不是有幾件事情,你可以做明確指定Python的編碼,請參見Why should we NOT use sys.setdefaultencoding("utf-8") in a py script?

+0

謝謝alvas。但重新加載(sys)和sys.setdefaultencoding會讓我「未定義的變量!」。看來我的python不知道函數「重載」和「setdefaultencoding」。你知道原因還是有任何其他方式來改變默認編碼?在此先感謝 – Mohammadreza 2014-10-29 00:17:46

+0

當您執行'import sys; sys.getdefaultecnoding()'? – alvas 2014-10-29 08:40:25

+0

輸出錯誤是: sys.setdefaultencoding(「utf-8」) AttributeError:'module'object has no attribute'setdefaultencoding' – Mohammadreza 2014-10-30 00:09:49

相關問題