Impossibile caricare english.pickle con nltk.data.load


144

Quando si tenta di caricare il punkttokenizer ...

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

... a è LookupErrorstato sollevato:

> 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
puoi scaricare il modello di sottaceti usando>>> nltk.download()
alvas il

Risposte:


262

Ho avuto lo stesso problema. Entra in una shell Python e digita:

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

Quindi viene visualizzata una finestra di installazione. Vai alla scheda "Modelli" e seleziona "punkt" nella colonna "Identificatore". Quindi fare clic su Download per installare i file necessari. Quindi dovrebbe funzionare!


4
Si noti che in alcune versioni non esiste una scheda Modelli e si può andare su "Download" e provare a ottenere il pacchetto "punkt" o utilizzare qualsiasi opzione "list" per elencare i pacchetti disponibili.
ely,

2
si installa nella mia cartella home in una directory nltk_data. Devo copiare questa directory di punkt in qualsiasi cartella della libreria nltk. pls help
sumanth232

Non sono sicuro di cosa intendi. tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')dovrebbero poi il lavoro ed è possibile utilizzare tokenizer in questo modo: tokenizer.tokenize('The cat. The mat. It Sat.'). Qui nltk tenta di risolvere il percorso relativo in tokenizers/punkt/english.picklediverse posizioni. Ad esempio, su Windows appare %APPDATA%\nltk_data\tokenizers\punkt\english.pickleo C:\nltk_data\tokenizers\punkt\english.pickle(uguale per D: ed E :). Quindi, se ti assicuri che il file punkt.zip sia decompresso in modo tale che esista una di quelle posizioni, dovrebbe essere in grado di trovarlo.
richardr,

In alternativa, imposta la NLTK_DATAvariabile di ambiente in modo che punti alla cartella nltk_data in modo che %NLTK_DATA%\tokenizers\punkt\english.pickleesista.
richardr,

Se in esecuzione su un sistema non X-Window (come ad esempio tramite una sshconnessione) non ci sarà alcuna finestra della GUI e quindi nessuna scheda "Modelli".
mknaf,

95

Puoi farlo in questo modo.

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

È possibile scaricare i tokenizzatori passando punktcome argomento alla downloadfunzione. I tokenizzatori di parole e frasi sono quindi disponibili su nltk.

Se si desidera scaricare tutto cioè chunkers, grammars, misc, sentiment, taggers, corpora, help, models, stemmers, tokenizers, non passare alcun argomento come questo.

nltk.download()

Vedi questo per ulteriori approfondimenti. https://www.nltk.org/data.html


1
Codice Solo le risposte sono fortemente disapprovate. Aggiungi ulteriori spiegazioni alla tua risposta. Come funziona? Perché è utile
RubberDuck,

Ciò che fa è semplicemente scaricare le librerie necessarie per consentire a nltk di eseguire qualsiasi lavoro di tokenizzazione.
Itzik Gili,

come usare i 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

Questo è ciò che ha funzionato per me proprio ora:

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

frasi_tokenizzate è un elenco di un elenco di 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', '.']]

Le frasi sono state tratte dall'esempio del quaderno ipython che accompagna il libro "Mining the Social Web, 2nd Edition"


16

Dalla riga di comando bash, esegui:

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

Ottengo [nltk_data] Errore caricamento punkt: HTTP Errore 405: non consentito.
user2478236,

1
@ user2478236 GitHub ha bloccato il downloader con HTTP 405 a volte a causa di un volume estremamente elevato; vedi github.com/nltk/nltk/issues/1787
John Vandenberg

1
Ha funzionato per me, questo crea una cartella nltk_datanella mia home directory e salva il punkt in essa. Ho Fedora 27, Py3.6.
MaNKuR

13

Questo funziona per me:

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

In Windows otterrai anche il downloader di nltk

Downloader NLTK


9

Semplice nltk.download() non risolverà questo problema. Ho provato il seguito e ha funzionato per me:

nella nltkcartella crea una tokenizerscartella e copia la punktcartella nella tokenizerscartella.

Questo funzionerà.! la struttura delle cartelle deve essere come mostrato in figura! 1


1
Questo funziona per me, nel mio caso non sono stato in grado di scaricare tramite nltk.download ... Quindi ho scaricato manualmente il file da nltk.org/nltk_data e ho creato una cartella c: / nltk_data / tokenizers / punkt e ho copiato tutto il file in questa posizione
Fermin Pitol

6

nltk ha i suoi modelli di tokenizer pre-addestrati. Il modello viene scaricato da origini Web predefinite internamente e memorizzato nel percorso del pacchetto nltk installato durante l'esecuzione a seguito di possibili chiamate di funzione.

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

Ad esempio 2 nltk.download ('punkt')

Se chiami la frase sopra nel tuo codice, assicurati di avere una connessione Internet senza alcuna protezione firewall.

Vorrei condividere un modo alter-net più migliore per risolvere il problema precedente con comprensioni più profonde.

Segui i passaggi seguenti e goditi la tokenizzazione delle parole inglesi usando nltk.

Passaggio 1: scaricare innanzitutto il modello "english.pickle" seguendo il percorso Web.

Vai al link " http://www.nltk.org/nltk_data/ " e fai clic su "download" nell'opzione "107. Punkt Tokenizer Models"

Passaggio 2: estrai il file "punkt.zip" scaricato e trova il file "english.pickle" da esso e posizionalo nell'unità C.

Passaggio 3: copia incolla seguendo il codice ed esegui.

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

Fammi sapere se hai qualche problema


Risposta davvero bella se sei dietro un firewall molto aggressivo.
kariato,

5

Su Jenkins questo può essere risolto aggiungendo il seguente tipo di codice a Virtualenv Builder nella scheda Build :

python -m nltk.downloader punkt

inserisci qui la descrizione dell'immagine


4

mi sono imbattuto in questo problema quando stavo provando a fare pos tagging in nltk. il modo in cui ho capito bene è creando una nuova directory insieme alla directory corpora denominata "taggers" e copiando max_pos_tagger in taggers directory.
spero che funzioni anche per te. buona fortuna con esso !!!.


4

In Spyder, vai alla tua shell attiva e scarica nltk usando i seguenti 2 comandi. import nltk nltk.download () Quindi dovresti vedere la finestra del downloader NLTK aperta come di seguito, vai alla scheda "Modelli" in questa finestra e fai clic su "punkt" e scarica "punkt"

Finestra



0

I dati dei tokenizer punkt sono piuttosto grandi con oltre 35 MB , questo può essere un grosso problema se come me stai eseguendo nltk in un ambiente come lambda che ha risorse limitate.

Se hai bisogno solo di uno o forse di alcuni tokenizzatori di lingua, puoi ridurre drasticamente la dimensione dei dati includendo solo quelle lingue .pickle file di .

Se tutto ciò che serve solo per supportare l'inglese, la dimensione dei tuoi dati nltk può essere ridotta a 407 KB (per la versione di Python 3).

passi

  1. Scarica i dati punkt nltk: https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenizers/punkt.zip
  2. Da qualche parte nel tuo ambiente crea le cartelle:, nltk_data/tokenizers/punktse usi Python 3 aggiungi un'altra cartella in PY3modo che assomigli alla tua nuova struttura di directory nltk_data/tokenizers/punkt/PY3. Nel mio caso ho creato queste cartelle alla radice del mio progetto.
  3. Estrarre lo zip e spostare i .picklefile per le lingue che si desidera supportare nella punktcartella appena creata. Nota: gli utenti di Python 3 dovrebbero usare i sottaceti dalla PY3cartella. Con i tuoi file di lingua caricati dovrebbe assomigliare a: esempio-cartella-struttura
  4. Ora devi solo aggiungere la tua nltk_datacartella ai percorsi di ricerca, supponendo che i tuoi dati non si trovino in uno dei percorsi di ricerca predefiniti . Puoi aggiungere i tuoi dati usando la variabile d'ambiente NLTK_DATA='path/to/your/nltk_data'. Puoi anche aggiungere un percorso personalizzato in fase di runtime in Python:
from nltk import data
data.path += ['/path/to/your/nltk_data']

NOTA: se non è necessario caricare i dati in fase di esecuzione o raggruppare i dati con il proprio codice, sarebbe meglio creare le nltk_datacartelle nelle posizioni integrate che nltk cerca .


0

nltk.download()non risolverà questo problema. Ho provato il seguito e ha funzionato per me:

nella '...AppData\Roaming\nltk_data\tokenizers'cartella, estrarre la punkt.zipcartella scaricata nella stessa posizione.


0

In Python-3.6posso vedere il suggerimento nel traceback. È abbastanza utile. Quindi dirò a voi ragazzi di prestare attenzione all'errore che avete, il più delle volte le risposte sono all'interno di quel problema;).

inserisci qui la descrizione dell'immagine

E poi, come suggerito da altre persone qui, usando il terminale Python o usando un comando come python -c "import nltk; nltk.download('wordnet')"possiamo installarli al volo. Devi solo eseguire quel comando una volta e poi salverà i dati localmente nella tua home directory.


0

Ho avuto un problema simile quando ho usato una cartella assegnata per più download e ho dovuto aggiungere manualmente il percorso dei dati:

download singolo, può essere raggiunto come segue (funziona)

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

Questo codice funziona, il che significa che nltk ricorda il percorso di download passato nella funzione di download. Sugli altri nad, se scarico un pacchetto successivo, visualizzo un errore simile a quello descritto dall'utente:

Download multipli generano un errore:

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

Errore:

Punkt della risorsa non trovato. Utilizzare il downloader NLTK per ottenere la risorsa:

import nltk nltk.download ('punkt')

Ora se aggiungo il percorso dati ntlk con il mio percorso di download, funziona:

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

Funziona ... Non so perché funzioni in un caso ma non nell'altro, ma il messaggio di errore sembra implicare che non si verifica nella cartella di download la seconda volta. NB: utilizzando windows8.1 / python3.7 / nltk3.5

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.