web-dev-qa-db-fra.com

TypeError: doit être unicode, pas str en NLTK

J'utilise python2.7, nltk 3.2.1 et python-crfsuite 0.8.4. Je suis cette page: http://www.nltk.org/api/nltk.tag.html?highlight=stanford#nltk.tag.stanford.NERTagger pour le module nltk.tag.crf.

Pour commencer, je lance juste ceci

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

J'ai essayé aussi

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

mais je reçois l'erreur suivante,

  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

Dans Python 2, des guillemets réguliers '...' Ou "..." Créent des chaînes d'octets. Pour obtenir des chaînes Unicode, utilisez un préfixe u avant la chaîne, comme u'dfd'.

Pour lire à partir d'un fichier, vous devrez spécifier un encodage. Voir Backporting Python 3 open(encoding="utf-8") to Python 2 pour les options; le plus simple, remplacez open() avec io.open().

Pour convertir une chaîne existante, utilisez la méthode unicode(); mais en général, vous voudrez utiliser decode() et fournir un encodage également.

Pour (beaucoup) plus de détails, les diapositives "Pragmatic Unicode" de Ned Batchelder sont recommandées, sinon une lecture absolument obligatoire; http://nedbatchelder.com/text/unipain.html

14
tripleee