TypeError:必须是unicode,而不是NLTK

时间:2016-07-15 09:20:15

标签: python nltk crf

我使用的是python2.7,nltk 3.2.1和python-crfsuite 0.8.4。我关注此页面:http://www.nltk.org/api/nltk.tag.html?highlight=stanford#nltk.tag.stanford.NERTagger表示nltk.tag.crf模块。

首先,我只需要运行

from nltk.tag import CRFTagger
ct = CRFTagger()
train_data = [[('dfd','dfd')]]
ct.train(train_data,"abc")

我也试过这个

f = open("abc","wb")
ct.train(train_data,f)

但是我收到以下错误,

  File "C:\Python27\lib\site-packages\nltk\tag\crf.py", line 129, in <genexpr>
    if all (unicodedata.category(x) in punc_cat for x in token):
TypeError: must be unicode, not str

1 个答案:

答案 0 :(得分:13)

在Python 2中,常规引号'...'"..."创建字节字符串。要获取Unicode字符串,请在字符串前使用u前缀,例如u'dfd'

要从文件中读取,您需要指定编码。有关选项,请参阅Backporting Python 3 open(encoding="utf-8") to Python 2;最简单的是,将open()替换为io.open()

要转换现有字符串,请使用unicode()方法;虽然通常情况下,您也希望使用decode()并提供编码。

对于(更多)更多细节,Ned Batchelder&#34; Pragmatic Unicode&#34;建议使用幻灯片,如果不是彻底的强制性阅读; http://nedbatchelder.com/text/unipain.html