Fehler beim Laden von english.pickle mit nltk.data.load

144

Beim Versuch, den punktTokenizer zu laden ...

import nltk.data
tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')

... a LookupErrorwurde angehoben:

> LookupError: 
>     *********************************************************************   
> Resource 'tokenizers/punkt/english.pickle' not found.  Please use the NLTK Downloader to obtain the resource: nltk.download().   Searched in:
>         - 'C:\\Users\\Martinos/nltk_data'
>         - 'C:\\nltk_data'
>         - 'D:\\nltk_data'
>         - 'E:\\nltk_data'
>         - 'E:\\Python26\\nltk_data'
>         - 'E:\\Python26\\lib\\nltk_data'
>         - 'C:\\Users\\Martinos\\AppData\\Roaming\\nltk_data'
>     **********************************************************************
Martin
quelle
2
Sie können das >>> nltk.download()
Gurkenmodell

Antworten:

261

Ich hatte das gleiche Problem. Gehen Sie in eine Python-Shell und geben Sie Folgendes ein:

>>> import nltk
>>> nltk.download()

Dann erscheint ein Installationsfenster. Gehen Sie zur Registerkarte "Modelle" und wählen Sie "Punkt" in der Spalte "Kennung" aus. Klicken Sie dann auf Herunterladen und die erforderlichen Dateien werden installiert. Dann sollte es funktionieren!

richardr
quelle
4
Beachten Sie, dass in einigen Versionen keine Registerkarte "Modelle" vorhanden ist. Sie können unter "Herunterladen" versuchen, das Paket "punkt" abzurufen, oder mithilfe der Optionen "Liste" die verfügbaren Pakete auflisten.
ely
2
Es wird in meinem Home-Ordner in einem Verzeichnis nltk_data installiert. Sollte ich dieses Verzeichnis von punkt in einen beliebigen nltk-Bibliotheksordner kopieren? pls help
sumanth232
Ich bin mir nicht sicher was du meinst. tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')sollte dann funktionieren und Sie können Tokenizer wie folgt verwenden : tokenizer.tokenize('The cat. The mat. It Sat.'). Hier versucht nltk, den relativen Pfad tokenizers/punkt/english.picklefür mehrere Positionen aufzulösen . ZB unter Windows sieht es in %APPDATA%\nltk_data\tokenizers\punkt\english.pickleoder aus C:\nltk_data\tokenizers\punkt\english.pickle(gleich für D: und E :). Wenn Sie also sicherstellen, dass die Datei punkt.zip so entpackt ist, dass einer dieser Speicherorte vorhanden ist, sollte sie ihn finden können.
Richard
Alternativ können Sie Ihre NLTK_DATAUmgebungsvariable so einstellen, dass sie auf den Ordner nltk_data verweist, der %NLTK_DATA%\tokenizers\punkt\english.picklevorhanden ist.
Richard
Wenn es auf einem Nicht-X-Window-System ausgeführt wird (wie zum Beispiel über eine sshVerbindung), gibt es kein GUI-Fenster und daher keine Registerkarte "Modelle".
Mknaf
95

Sie können das so machen.

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

Sie können die Tokenizer herunterladen, indem Sie sie punktals Argument an die downloadFunktion übergeben. Die Wort- und Satz-Tokenizer sind dann auf verfügbar nltk.

Wenn Sie herunterladen wollen alles heißt chunkers, grammars, misc, sentiment, taggers, corpora, help, models, stemmers, tokenizers, gehen nicht alle Argumente wie diese.

nltk.download()

Weitere Informationen finden Sie hier. https://www.nltk.org/data.html

Naren Yellavula
quelle
1
Nur Code-Antworten sind verpönt. Bitte fügen Sie Ihrer Antwort weitere Erklärungen hinzu. Wie funktioniert das? Warum ist es nützlich?
RubberDuck
Sie müssen lediglich die erforderlichen Bibliotheken herunterladen, damit nltk Tokenisierungsarbeiten ausführen kann.
Itzik Gili
Wie benutzt man Tokenizer?
Luckyhandler
python -c "import nltk; nltk.download('punkt')" [nltk_data] Downloading package punkt to /home/my_user/nltk_data... [nltk_data] Error downloading 'punkt' from [nltk_data] <https://raw.githubusercontent.com/nltk/nltk_data/gh- [nltk_data] pages/packages/tokenizers/punkt.zip>: HTTP Error [nltk_data] 503: first byte timeout
Mrgloom
27

Das hat gerade für mich funktioniert:

# Do this in a separate python interpreter session, since you only have to do it once
import nltk
nltk.download('punkt')

# Do this in your ipython notebook or analysis script
from nltk.tokenize import word_tokenize

sentences = [
    "Mr. Green killed Colonel Mustard in the study with the candlestick. Mr. Green is not a very nice fellow.",
    "Professor Plum has a green plant in his study.",
    "Miss Scarlett watered Professor Plum's green plant while he was away from his office last week."
]

sentences_tokenized = []
for s in sentences:
    sentences_tokenized.append(word_tokenize(s))

Sätze_Tokenisiert ist eine Liste einer Liste von Token:

[['Mr.', 'Green', 'killed', 'Colonel', 'Mustard', 'in', 'the', 'study', 'with', 'the', 'candlestick', '.', 'Mr.', 'Green', 'is', 'not', 'a', 'very', 'nice', 'fellow', '.'],
['Professor', 'Plum', 'has', 'a', 'green', 'plant', 'in', 'his', 'study', '.'],
['Miss', 'Scarlett', 'watered', 'Professor', 'Plum', "'s", 'green', 'plant', 'while', 'he', 'was', 'away', 'from', 'his', 'office', 'last', 'week', '.']]

Die Sätze stammen aus dem Beispiel- Ipython-Notizbuch zum Buch "Mining the Social Web, 2. Auflage".

jjinking
quelle
16

Führen Sie in der Bash-Befehlszeile Folgendes aus:

$ python -c "import nltk; nltk.download('punkt')"
cgl
quelle
Ich erhalte [nltk_data] Fehler beim Laden von punkt: HTTP-Fehler 405: Nicht zulässig.
user2478236
1
@ user2478236 GitHub hat den Downloader mit HTTP 405 blockiert, da das Volumen zeitweise extrem hoch war. siehe github.com/nltk/nltk/issues/1787
John Vandenberg
1
Das hat für mich funktioniert, erstellt einen Ordner nltk_datain meinem Home-Verzeichnis und speichert punkt darin. Ich habe Fedora 27, Py3.6.
MaNKuR
13

Das funktioniert bei mir:

>>> import nltk
>>> nltk.download()

In Windows erhalten Sie auch nltk Downloader

NLTK Downloader

Roshan Bagdiya
quelle
9

Einfach nltk.download()wird dieses Problem nicht lösen. Ich habe Folgendes versucht und es hat bei mir funktioniert:

nltkErstellen Sie im Ordner einen tokenizersOrdner und kopieren Sie Ihren punktOrdner in einen tokenizersOrdner.

Das wird funktionieren.! Die Ordnerstruktur muss wie im Bild gezeigt sein! 1

Deepthi Karnam
quelle
1
Dies funktioniert für mich, in meinem Fall konnte ich nicht über nltk.download herunterladen ... Also habe ich die Datei manuell von nltk.org/nltk_data heruntergeladen und einen Ordner c: / nltk_data / tokenizers / punkt erstellt und alle kopiert Dateien an diesem Ort
Fermin Pitol
6

nltk hat seine vorgefertigten Tokenizer-Modelle. Das Modell wird von intern vordefinierten Webquellen heruntergeladen und im Pfad des installierten nltk-Pakets gespeichert, während die folgenden möglichen Funktionsaufrufe ausgeführt werden.

ZB 1 tokenizer = nltk.data.load ('nltk: tokenizers / punkt / english.pickle')

ZB 2 nltk.download ('punkt')

Wenn Sie den obigen Satz in Ihrem Code aufrufen, stellen Sie sicher, dass Sie über eine Internetverbindung ohne Firewall-Schutz verfügen.

Ich möchte einen besseren Weg zur Lösung des oben genannten Problems mit einem tieferen Verständnis vorstellen.

Bitte befolgen Sie die folgenden Schritte und genießen Sie die Tokenisierung von englischen Wörtern mit nltk.

Schritt 1: Laden Sie zuerst das Modell "english.pickle" über den folgenden Webpfad herunter.

Gehen Sie zum Link " http://www.nltk.org/nltk_data/ " und klicken Sie auf "Download" bei Option "107. Punkt Tokenizer Models"

Schritt 2: Extrahieren Sie die heruntergeladene Datei "punkt.zip" und suchen Sie die Datei "english.pickle" daraus und legen Sie sie in Laufwerk C ab.

Schritt 3: Kopieren, Einfügen des folgenden Codes und Ausführen.

from nltk.data import load
from nltk.tokenize.treebank import TreebankWordTokenizer

sentences = [
    "Mr. Green killed Colonel Mustard in the study with the candlestick. Mr. Green is not a very nice fellow.",
    "Professor Plum has a green plant in his study.",
    "Miss Scarlett watered Professor Plum's green plant while he was away from his office last week."
]

tokenizer = load('file:C:/english.pickle')
treebank_word_tokenize = TreebankWordTokenizer().tokenize

wordToken = []
for sent in sentences:
    subSentToken = []
    for subSent in tokenizer.tokenize(sent):
        subSentToken.extend([token for token in treebank_word_tokenize(subSent)])

    wordToken.append(subSentToken)

for token in wordToken:
    print token

Lassen Sie mich wissen, wenn Sie auf ein Problem stoßen

Jignesh Vasoya
quelle
Wirklich schöne Antwort, wenn Sie sich hinter einer sehr aggressiven Firewall befinden.
Kariato
5

Unter Jenkins kann dies behoben werden, indem Virtualenv Builder auf der Registerkarte " Erstellen" folgenden Code hinzugefügt wird :

python -m nltk.downloader punkt

Geben Sie hier die Bildbeschreibung ein

Abhijeet
quelle
4

Ich bin auf dieses Problem gestoßen, als ich versucht habe, Pos-Tagging in nltk durchzuführen. Ich habe es richtig verstanden, indem ich ein neues Verzeichnis zusammen mit dem Korpora-Verzeichnis mit dem Namen "taggers" erstellt und max_pos_tagger in Verzeichnis-Tagger kopiert habe.
hoffe es funktioniert auch bei dir. Viel Glück damit !!!.

Ashish Singh
quelle
4

Gehen Sie in Spyder zu Ihrer aktiven Shell und laden Sie nltk mit den folgenden 2 Befehlen herunter. import nltk nltk.download () Dann sollte das NLTK-Downloader-Fenster wie folgt geöffnet sein. Gehen Sie in diesem Fenster zur Registerkarte 'Models' und klicken Sie auf 'punkt' und laden Sie 'punkt' herunter.

Fenster

Krish
quelle
0

Überprüfen Sie, ob Sie alle NLTK-Bibliotheken haben.

Torrtuga
quelle
0

Die Daten der Punkt-Tokenizer sind mit über 35 MB ziemlich groß. Dies kann eine große Sache sein, wenn Sie wie ich nltk in einer Umgebung wie Lambda ausführen, die nur über begrenzte Ressourcen verfügt.

Wenn Sie nur einen oder möglicherweise einige Sprach-Tokenizer benötigen, können Sie die Größe der Daten drastisch reduzieren, indem Sie nur diese .pickleSprachdateien einbeziehen.

Wenn Sie nur Englisch unterstützen müssen, kann Ihre nltk-Datengröße auf 407 KB reduziert werden (für die Python 3-Version).

Schritte

  1. Laden Sie die nltk punkt-Daten herunter: https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenizers/punkt.zip
  2. Erstellen Sie irgendwo in Ihrer Umgebung die Ordner: nltk_data/tokenizers/punktWenn Sie Python 3 verwenden, fügen Sie einen weiteren Ordner hinzu, PY3damit Ihre neue Verzeichnisstruktur aussieht nltk_data/tokenizers/punkt/PY3. In meinem Fall habe ich diese Ordner im Stammverzeichnis meines Projekts erstellt.
  3. Extrahieren Sie die Zip- .pickleDatei und verschieben Sie die Dateien für die zu unterstützenden Sprachen in den punktsoeben erstellten Ordner. Hinweis: Python 3-Benutzer sollten die Pickles aus dem PY3Ordner verwenden. Wenn Ihre Sprachdateien geladen sind, sollte es ungefähr so ​​aussehen: Beispiel-Ordner-Struktur
  4. Jetzt müssen Sie nur noch Ihren nltk_dataOrdner zu den Suchpfaden hinzufügen , vorausgesetzt, Ihre Daten befinden sich nicht in einem der vordefinierten Suchpfade . Sie können Ihre Daten entweder mit der Umgebungsvariablen hinzufügen NLTK_DATA='path/to/your/nltk_data'. Sie können zur Laufzeit in Python auch einen benutzerdefinierten Pfad hinzufügen, indem Sie Folgendes tun:
from nltk import data
data.path += ['/path/to/your/nltk_data']

ANMERKUNG: Wenn Sie die Daten zur Laufzeit nicht laden oder mit Ihrem Code bündeln müssen, erstellen Sie Ihre nltk_dataOrdner am besten an den integrierten Speicherorten, nach denen nltk sucht .

Trent Holliday
quelle
0

nltk.download()wird dieses Problem nicht lösen. Ich habe Folgendes versucht und es hat bei mir funktioniert:

im '...AppData\Roaming\nltk_data\tokenizers'Ordner heruntergeladen Extrakt punkt.zipOrdner an der gleichen Stelle.

bishnarender
quelle
0

In Python-3.6kann ich den Vorschlag im Traceback sehen. Das ist sehr hilfreich. Daher werde ich euch sagen, dass ihr auf den Fehler achten sollt, die ihr habt. Die meisten Antworten liegen in diesem Problem;).

Geben Sie hier die Bildbeschreibung ein

Und dann, wie von anderen Leuten hier vorgeschlagen, entweder mit dem Python-Terminal oder mit einem Befehl, wie python -c "import nltk; nltk.download('wordnet')"wir sie im laufenden Betrieb installieren können. Sie müssen diesen Befehl nur einmal ausführen und dann werden die Daten lokal in Ihrem Home-Verzeichnis gespeichert.

MaNKuR
quelle
0

Ich hatte ein ähnliches Problem bei der Verwendung eines zugewiesenen Ordners für mehrere Downloads und musste den Datenpfad manuell anhängen:

Einzel-Download, kann wie folgt erreicht werden (funktioniert)

import os as _os
from nltk.corpus import stopwords
from nltk import download as nltk_download

nltk_download('stopwords', download_dir=_os.path.join(get_project_root_path(), 'temp'), raise_on_error=True)

stop_words: list = stopwords.words('english')

Dieser Code funktioniert, dh nltk merkt sich den in der Download-Funktion übergebenen Download-Pfad. Auf den anderen Nads erhalte ich beim Herunterladen eines nachfolgenden Pakets einen ähnlichen Fehler wie vom Benutzer beschrieben:

Mehrere Downloads führen zu einem Fehler:

import os as _os

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

from nltk import download as nltk_download

nltk_download(['stopwords', 'punkt'], download_dir=_os.path.join(get_project_root_path(), 'temp'), raise_on_error=True)

print(stopwords.words('english'))
print(word_tokenize("I am trying to find the download path 99."))

Error:

Ressourcenpunkt nicht gefunden. Bitte benutzen Sie den NLTK Downloader, um die Ressource zu erhalten:

import nltk nltk.download ('punkt')

Wenn ich nun den ntlk-Datenpfad an meinen Download-Pfad anhänge, funktioniert dies:

import os as _os

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

from nltk import download as nltk_download
from nltk.data import path as nltk_path


nltk_path.append( _os.path.join(get_project_root_path(), 'temp'))


nltk_download(['stopwords', 'punkt'], download_dir=_os.path.join(get_project_root_path(), 'temp'), raise_on_error=True)

print(stopwords.words('english'))
print(word_tokenize("I am trying to find the download path 99."))

Dies funktioniert ... Ich bin mir nicht sicher, warum es in einem Fall funktioniert, aber nicht in dem anderen, aber die Fehlermeldung scheint zu implizieren, dass es beim zweiten Mal nicht in den Download-Ordner eingecheckt wird. NB: Verwenden von Windows 8.1 / Python3.7 / nltk3.5

Nono London
quelle