Nie udało się załadować pliku english.pickle przy użyciu pliku nltk.data.load


144

Podczas próby załadowania punkttokenizera ...

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

... a LookupErrorzostał podniesiony:

> 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'
>     **********************************************************************

2
możesz pobrać model marynaty za pomocą>>> nltk.download()
— alvas

Odpowiedzi:


261

Miałem ten sam problem. Wejdź do powłoki Pythona i wpisz:

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

Następnie pojawi się okno instalacji. Przejdź do zakładki „Modele” i wybierz „punkt” w kolumnie „Identyfikator”. Następnie kliknij Pobierz i zainstaluje niezbędne pliki. Wtedy powinno działać!


4
Zauważ, że w niektórych wersjach nie ma zakładki Modele i możesz przejść do 'Pobierz' i spróbować pobrać pakiet 'punkt' lub użyć dowolnej opcji 'listy', aby wyświetlić listę dostępnych pakietów.
— ely

2
instaluje się w moim folderze domowym w katalogu nltk_data. Czy powinienem skopiować ten katalog punktu do dowolnego folderu biblioteki nltk.
— proszę o

Nie jestem pewny co masz na myśli. tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')Należy wtedy praca i można używać tokenizer tak: tokenizer.tokenize('The cat. The mat. It Sat.'). Tutaj nltk próbuje rozwiązać ścieżkę względną w tokenizers/punkt/english.picklekilku lokalizacjach. Np. W Windows wygląda w %APPDATA%\nltk_data\tokenizers\punkt\english.picklelub C:\nltk_data\tokenizers\punkt\english.pickle(tak samo dla D: i E :). Jeśli więc upewnisz się, że plik punkt.zip jest rozpakowany w taki sposób, że jedna z tych lokalizacji istnieje, powinien być w stanie ją znaleźć.
— richardr

Alternatywnie ustaw NLTK_DATAzmienną środowiskową tak, aby wskazywała na folder nltk_data, który %NLTK_DATA%\tokenizers\punkt\english.pickleistnieje.
— richardr

W przypadku pracy w systemie innym niż X-Window (na przykład przez sshpołączenie) nie będzie okna GUI, a tym samym zakładki „Modele”.
— mknaf

95

Możesz to zrobić w ten sposób.

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

Możesz pobrać tokenizatory, przekazując punktjako argument do downloadfunkcji. Tokenizery słów i zdań są wtedy dostępne w nltk.

Jeśli chcesz pobrać wszystko znaczy chunkers, grammars, misc, sentiment, taggers, corpora, help, models, stemmers, tokenizers, nie przechodzą żadnych argumentów, takich jak ten.

nltk.download()

Zobacz to, aby uzyskać więcej informacji. https://www.nltk.org/data.html


1
Odpowiedzi w trybie Tylko kod są mile widziane. Dodaj więcej wyjaśnień do swojej odpowiedzi. Jak to działa? Dlaczego jest to przydatne?
— RubberDuck,

Po prostu pobiera potrzebne biblioteki, aby umożliwić nltk wykonanie jakichkolwiek prac związanych z tokenizacją.
— Itzik Gili

jak korzystać z tokenizatorów?
— 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

Oto, co właśnie teraz zadziałało:

# 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))

zdania_tokenized to lista z listą tokenów:

[['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', '.']]

Zdania zaczerpnięto z przykładowego notatnika ipython dołączonego do książki „Mining the Social Web, 2nd Edition”


16

Z wiersza poleceń bash uruchom:

$ python -c "import nltk; nltk.download('punkt')"

Otrzymuję [nltk_data] Błąd ładowania punktu: Błąd HTTP 405: Niedozwolone.
— user2478236

1
@ user2478236 GitHub blokuje program do pobierania za pomocą protokołu HTTP 405 z powodu czasami bardzo dużej głośności; patrz github.com/nltk/nltk/issues/1787
— John Vandenberg

1
Pracowałem dla mnie, to tworzy folder nltk_dataw moim katalogu domowym i zapisuje w nim punkt. Mam Fedorę 27, Py3.6.
— MaNKuR

13

To działa dla mnie:

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

W systemie Windows otrzymasz także narzędzie do pobierania nltk

NLTK Downloader


9

Simple nltk.download()nie rozwiąże tego problemu. Wypróbowałem poniżej i zadziałało:

w nltkfolderze utwórz tokenizersfolder i skopiuj plikpunkt do tokenizersfolderu.

To zadziała.! struktura folderów musi być taka, jak pokazano na rysunku! 1


1
U mnie to działa, w moim przypadku nie udało mi się pobrać przez nltk.download ... Więc pobrałem plik ręcznie z nltk.org/nltk_data i utworzyłem folder c: / nltk_data / tokenizers / punkt i skopiowałem wszystkie pliki w tej lokalizacji
— Fermin Pitol

6

nltk ma wstępnie wyszkolone modele tokenizatorów. Model jest pobierany z wewnętrznie predefiniowanych źródeł internetowych i przechowywany w ścieżce zainstalowanego pakietu nltk podczas wykonywania następujących możliwych wywołań funkcji.

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

Np. 2 nltk.download ('punkt')

Jeśli zadzwonisz do powyższego zdania w swoim kodzie, upewnij się, że masz połączenie internetowe bez żadnych zabezpieczeń firewall.

Chciałbym podzielić się lepszymi alternatywnymi sposobami rozwiązania powyższego problemu z lepszym, głębszym zrozumieniem.

Wykonaj następujące kroki i korzystaj z tokenizacji angielskich słów za pomocą nltk.

Krok 1: Najpierw pobierz model „english.pickle”, korzystając ze ścieżki internetowej.

Przejdź do łącza „ http://www.nltk.org/nltk_data/ ” i kliknij „pobierz” w opcji „107. Modele tokenizera punktów”

Krok 2: Wypakuj pobrany plik „punkt.zip”, znajdź z niego plik „english.pickle” i umieść na dysku C.

Krok 3: skopiuj wklej następujący kod i wykonaj.

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

Daj mi znać, jeśli napotkasz jakiś problem


Naprawdę fajna odpowiedź, jeśli jesteś za bardzo agresywną zaporą ogniową.
— kariato,

5

Na Jenkins można to naprawić, dodając następujący kod do Virtualenv Builder w zakładce Build :

python -m nltk.downloader punkt

wprowadź opis obrazu tutaj


4

Natknąłem się na ten problem, gdy próbowałem zrobić tagowanie pos w nltk. Sposób, w jaki to poprawiłem, polega na utworzeniu nowego katalogu wraz z katalogiem korpusu o nazwie "taggers" i skopiowaniu max_pos_tagger do taggerów katalogów.
mam nadzieję, że to też działa dla Ciebie. powodzenia !!!.


4

W Spyder przejdź do aktywnej powłoki i pobierz nltk za pomocą poniższych 2 poleceń. import nltk nltk.download () Następnie powinieneś zobaczyć otwarte okno pobierania NLTK jak poniżej, przejdź do zakładki 'Modele' w tym oknie i kliknij 'punkt' i pobierz 'punkt'

Okno



0

Dane tokenizera punktowego są dość duże i przekraczają 35 MB , może to być duża sprawa, jeśli tak jak ja używasz nltk w środowisku takim jak lambda, które ma ograniczone zasoby.

Jeśli potrzebujesz tylko jednego lub kilku tokenizatorów językowych, możesz drastycznie zmniejszyć rozmiar danych, uwzględniając tylko te języki .pickle pliki .

Jeśli potrzebujesz tylko obsługi języka angielskiego, rozmiar danych nltk można zmniejszyć do 407 KB (dla wersji python 3).

Kroki

  1. Pobierz dane nltk punkt: https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenizers/punkt.zip
  2. Gdzieś w swoim środowisku utwórz foldery: nltk_data/tokenizers/punktjeśli używasz Pythona 3 dodaj kolejny folder, PY3aby wyglądać jak nowa struktura katalogów nltk_data/tokenizers/punkt/PY3. W moim przypadku utworzyłem te foldery w katalogu głównym mojego projektu.
  3. Rozpakuj .pickleplik zip i przenieś pliki dla języków, które chcesz obsługiwać, do punktwłaśnie utworzonego folderu. Uwaga: użytkownicy Pythona 3 powinni używać pikli z PY3folderu. Po załadowaniu plików językowych powinien wyglądać mniej więcej tak: przykład-folder-struktura
  4. Teraz wystarczy dodać nltk_datafolder do ścieżek wyszukiwania, zakładając, że dane nie znajdują się na żadnej ze wstępnie zdefiniowanych ścieżek wyszukiwania . Możesz dodać swoje dane za pomocą zmiennej środowiskowej NLTK_DATA='path/to/your/nltk_data'. Możesz również dodać niestandardową ścieżkę w czasie wykonywania w Pythonie, wykonując:
from nltk import data
data.path += ['/path/to/your/nltk_data']

UWAGA: Jeśli nie musisz ładować danych w czasie wykonywania lub łączyć danych z kodem, najlepiej byłoby utworzyć nltk_datafoldery we wbudowanych lokalizacjach, których szuka nltk .


0

nltk.download()nie rozwiąże tego problemu. Wypróbowałem poniżej i zadziałało:

w '...AppData\Roaming\nltk_data\tokenizers'folderze wyodrębnij pobrany punkt.zipfolder w tej samej lokalizacji.


0

W Python-3.6widzę sugestię w pliku śledzenia. To bardzo pomocne. Dlatego powiem wam, abyście zwrócili uwagę na błąd, który otrzymaliście, w większości przypadków odpowiedzi dotyczą tego problemu;).

wprowadź opis obrazu tutaj

A potem, jak sugerowali inni ludzie tutaj albo używając terminala Python, albo używając polecenia, takiego jak python -c "import nltk; nltk.download('wordnet')"możemy zainstalować je w locie. Wystarczy raz uruchomić to polecenie, a następnie zapisze dane lokalnie w katalogu domowym.


0

Miałem podobny problem podczas korzystania z przypisanego folderu do wielu pobrań i musiałem ręcznie dołączyć ścieżkę danych:

pojedyncze pobranie, można uzyskać w następujący sposób (działa)

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')

Ten kod działa, co oznacza, że ​​nltk pamięta ścieżkę pobierania przekazaną w funkcji pobierania. Z drugiej strony, jeśli pobiorę kolejny pakiet, otrzymam podobny błąd, jak opisał użytkownik:

Wielokrotne pobieranie powoduje błąd:

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."))

Błąd:

Nie znaleziono punktu zasobu. Aby uzyskać zasoby, użyj narzędzia NLTK Downloader:

import nltk nltk.download ('punkt')

Teraz, jeśli dołączę ścieżkę danych NTLK do mojej ścieżki pobierania, działa:

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."))

To działa ... Nie wiem, dlaczego działa w jednym przypadku, ale nie w drugim, ale komunikat o błędzie wydaje się sugerować, że nie sprawdza się w folderze pobierania po raz drugi. Uwaga: przy użyciu windows8.1 / python3.7 / nltk3.5

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.