2016-07-15 5 views
3

Я использую 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.ТипError: должен быть unicode, а не str в NLTK

Для начала я просто запустить этот

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 
+0

Можете ли вы показать нам данные в «abc»? Там лежит ваша проблема, согласно ошибке ... –

ответ

9

В Python 2, регулярные котировки '...' или "..." создавать строки байтов. Чтобы получить строки Unicode, используйте префикс u перед строкой, например u'dfd'.

Для чтения из файла вы хотите указать кодировку. См. Backporting Python 3 open(encoding="utf-8") to Python 2 для опций; наиболее просто заменить open() на io.open().

Для преобразования существующей строки используйте метод unicode(); хотя обычно вы хотите использовать decode() и поставлять кодировку.

Для более подробной информации рекомендуется использовать слайды Ned Batchelder «Pragmatic Unicode», если они не обязательно обязательно; http://nedbatchelder.com/text/unipain.html

+0

работает нормально после добавления u '' внутри наборов – Backtrack

Смежные вопросы