您好我正在努力学习NLTK。我也是Python的新手。我正在尝试以下方法。
>>import nltk
>>nltk.pos_tag(nltk.word_tokenize("John lived in China"))
我收到以下错误消息
Traceback(最近一次调用最后一次):文件“”,第1行,in nltk.pos_tag(nltk.word_tokenize(“约翰住在加利福尼亚州”))文件“C:\ Python34 \ lib \ site-packages \ nltk \ tag__init __。py”,第100行, 在pos_tag中 tagger = load(_POS_TAGGER)文件“C:\ Python34 \ lib \ site-packages \ nltk \ data.py”,第779行,加载 resource_val = pickle.load(opened_resource)UnicodeDecodeError:'ascii'编解码器无法解码位置0的字节0xcb:序号不在 范围(128)
我已下载所有可用的型号(包括maxent_treebank_pos_tagger)
默认系统编码为UTF-8
>>sys.getdefaultencoding()
我打开了data.py文件,这是可用的内容。
774# Load the resource.
775 opened_resource = _open(resource_url)
776if format == 'raw':
777 resource_val = opened_resource.read()
778 elif format == 'pickle':
779 resource_val = pickle.load(opened_resource)
780 elif format == 'json':
781 import json
我在这里做错了什么?
答案 0 :(得分:16)
好的,我找到了解决方案。看起来像源本身的问题。 Check here
我打开了data.py并修改了第779行,如下所示
resource_val = pickle.load(opened_resource) #old
resource_val = pickle.load(opened_resource, encoding='iso-8859-1') #new
答案 1 :(得分:2)
基本问题是Python 3不支持NLTK 2.x,而NLTK 3正在努力发布完全兼容Python 3的版本。
简单的解决方法是下载最新的NLTK 3.x并使用它。
如果您想参与完成Python 3的端口,您可能需要更深入地了解differences between Python 2 and Python 3;特别是,对于这种情况,Python 3中的基本字符串类型如何是Unicode字符串(u'...'
),而不是Python 2中的字节字符串(Python 3 b'...'
)。另请参阅{{3 }}
FWIW,另请参阅http://nedbatchelder.com/text/unipain.html以了解与您相同的修复方法。您链接到的错误已经在NLTK 3.0中得到修复(可能是修改了实际的数据文件;我认为在3.0a3中)。
答案 2 :(得分:2)
我迟到了,但是如果有人帮助遇到这个问题的其他人,对我来说有用的就是在将文字放入word_tokenize之前对其进行解码,即:
raw_text = "John lived in China"
to_tokenize = raw_text.decode('utf-8')
tokenized = nltk.word_tokenize(to_tokenize)
output = nltk.pos_tag(tokenized)
也许这会为其他人工作!
答案 3 :(得分:0)
使用Python 3.4和NLTK 3,您可以通过执行以下操作来解决此问题:
f = open('myClassifier_or_X_trained_model',mode='rb')
whereIuseTheModel = pickle.load(f,encoding='UTF-8')
请注意,要打开的模式为rb
和encoding='uft-8'
。此解决方案无需编辑data.py
。
答案 4 :(得分:0)
我尝试了所有的答案,但没有任何效果,所以按照以下2个链接然后
https://github.com/nltk/nltk/issues/169
https://github.com/nltk/nltk_data/tree/gh-pages/packages/taggers
english.pickle
文件并替换了。{
我的english.pickle
标记文件夹中已存在nltk_data
个文件
- > C:\ nltk_data \ taggers \ maxent_treebank_pos_tagger与新的。