NLTK 3 POS_TAG wirft UnicodeDecodeError
Hallo, ich versuche zu lernen NLTK. Ich bin neu in Python auch. Ich versuche das folgende.
>>import nltk
>>nltk.pos_tag(nltk.word_tokenize("John lived in China"))
Bekomme ich die folgende Fehlermeldung
Traceback (most recent call last): File "", line 1, in
nltk.pos_tag(nltk.word_tokenize("John lebte in Kalifornien")) File "C:\Python34\lib\site-packages\nltk\tag__init__.py", line 100,
in pos_tag
tagger = load(_POS_TAGGER) - Datei "C:\Python34\lib\site-packages\nltk\data.py" Linie 779 im laden
resource_val = pickle.Belastung(opened_resource) UnicodeDecodeError: 'ascii' codec kann nicht decodieren byte 0xcb in position 0: ordinal not in
range(128)
Heruntergeladen habe ich alle Modelle erhältlich (auch die maxent_treebank_pos_tagger)
Den default system encoding ist UTF-8
>>sys.getdefaultencoding()
Öffnete ich die data.py Datei-und dies ist der Inhalt verfügbar.
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
Was mache ich hier falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, ich fand die Lösung für Sie. Sieht aus wie ein problem in der Quelle selbst. Überprüfen Sie hier
Öffnete ich data.py und geänderte Linie 779 als unten
Das grundlegende problem ist, dass NLTK 2.x wird nicht unterstützt für Python 3, und NLTK 3 ist eine ständige Anstrengung, um die Freigabe der vollständig in Python 3-kompatibel version.
Die einfache Lösung ist, laden Sie die neueste NLTK 3.x und verwenden, statt.
Wenn Sie teilnehmen möchten, bei der Vollendung der port von Python 3, benötigen Sie wahrscheinlich ein tieferes Verständnis der Unterschiede zwischen Python 2 und Python 3; insbesondere für diesen Fall, wie die grundlegenden string-Typ in Python 3 ist Unicode-string (
u'...'
), nicht ein byte-string (Python 3b'...'
) wie in Python 2. Siehe auch http://nedbatchelder.com/text/unipain.htmlFWIW, siehe auch https://github.com/nltk/nltk/issues/169#issuecomment-12778108 für ein Update identisch mit Ihnen. Den Fehler, den Sie verlinkt hat, bereits behoben wurde, in NLTK 3.0 (vermutlich durch ein Update auf die eigentlichen Daten-Dateien statt; ich denke, in 3.0a3).
Komme ich zu dieser späten Stunde, aber falls es jemandem hilft, der kommt über das, was für mich gearbeitet wurde, um den text Dekodieren, bevor es in word_tokenize, d.h.:
Vielleicht werde die Arbeit für jemand anderes!
Mit Python 3.4 und NLTK 3 Sie können dieses Problem beheben, indem Sie tun:
Beachten Sie, dass der Modus zu öffnen ist
rb
undencoding='uft-8'
. Diese Lösung erfordert nicht Bearbeitendata.py
.Ich habe versucht, alle Antworten, aber nichts funktionierte, so folgte auf die folgenden 2 links und dann
https://github.com/nltk/nltk/issues/169
https://github.com/nltk/nltk_data/tree/gh-pages/packages/taggers
english.pickle
- Datei und ersetzt dieenglish.pickle
Dateien, die sich bereits in meinemnltk_data
tags Ordner--> C:\nltk_data\taggers\maxent_treebank_pos_tagger mit der neuen ein.
C:\nltk_data\taggers\maxent_treebank_pos_tagger\PY3 mit der neuen ein.
PS: ich weiß nicht, was sonst noch betroffen sein könnten, aber für jetzt, ich bin ok.