web-dev-qa-db-ja.com

TypeError:NLTKのstrではなく、ユニコードである必要があります

私は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 for 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
9
backtrack

Python 2では、通常の引用符'...'または"..."でバイト文字列を作成します。Unicode文字列を取得するには、u'dfd'のように文字列の前にuプレフィックスを使用します。

ファイルから読み取るには、エンコーディングを指定する必要があります。オプションについては Backporting Python 3 open(encoding="utf-8") to Python 2 を参照してください。最も簡単に言えば、open() with io.open()

既存の文字列を変換するには、unicode()メソッドを使用します。ただし、通常はdecode()を使用し、エンコーディングも指定する必要があります。

(はるかに)詳細については、Ned Batchelderの「Pragmatic Unicode」スライドをお勧めします。 http://nedbatchelder.com/text/unipain.html

14
tripleee