Error al cargar english.pickle con nltk.data.load

144

Al intentar cargar el punkttokenizer ...

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

... a LookupErrorse planteó:

> 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'
>     **********************************************************************
Martín
fuente
2
puedes descargar el modelo pickle usando>>> nltk.download()
alvas

Respuestas:

262

Yo tuve el mísmo problema. Entra en un shell de python y escribe:

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

Luego aparece una ventana de instalación. Vaya a la pestaña 'Modelos' y seleccione 'punkt' debajo de la columna 'Identificador'. Luego haga clic en Descargar e instalará los archivos necesarios. ¡Entonces debería funcionar!

richardr
fuente
44
Tenga en cuenta que en algunas versiones, no hay una pestaña Modelos y puede ir a 'Descargar' e intentar obtener el paquete 'punkt' o usar cualquier opción 'lista' para enumerar los paquetes disponibles.
ely
2
se instala en mi carpeta de inicio en un directorio nltk_data. ¿Debo copiar este directorio de punkt en cualquier carpeta de la biblioteca nltk? pls help
sumanth232
No estoy seguro de lo que quieres decir. tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')deben entonces el trabajo y se puede utilizar tokenizer este modo: tokenizer.tokenize('The cat. The mat. It Sat.'). Aquí nltk intenta resolver la ruta relativa tokenizers/punkt/english.pickleen varias ubicaciones. Por ejemplo, en Windows se ve %APPDATA%\nltk_data\tokenizers\punkt\english.pickleo C:\nltk_data\tokenizers\punkt\english.pickle(lo mismo para D: y E :). Entonces, si se asegura de que el archivo punkt.zip esté descomprimido de tal manera que exista una de esas ubicaciones, debería poder encontrarlo.
richardr
Alternativamente, configure su NLTK_DATAvariable de entorno para que apunte a la carpeta nltk_data para que %NLTK_DATA%\tokenizers\punkt\english.pickleexista.
richardr
Si se ejecuta en un sistema que no sea X-Window (como, por ejemplo, a través de una sshconexión), no habrá una ventana GUI y, por lo tanto, no habrá una pestaña 'Modelos'.
mknaf
95

Puedes hacer eso así.

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

Puede descargar los tokenizadores pasando punktcomo argumento a la downloadfunción. Los tokenizadores de palabras y oraciones están disponibles en nltk.

Si quiere descargar todo lo que es decir chunkers, grammars, misc, sentiment, taggers, corpora, help, models, stemmers, tokenizers, no pase ningún argumento como éste.

nltk.download()

Vea esto para obtener más información. https://www.nltk.org/data.html

Naren Yellavula
fuente
1
Las respuestas de Code Only son muy mal vistas. Agregue más explicaciones a su respuesta. ¿Cómo funciona esto? ¿Por qué es útil?
RubberDuck
Lo que hace es simplemente descargar las bibliotecas necesarias para permitir que nltk realice cualquier trabajo de tokenización.
Itzik Gili
¿Cómo usar tokenizadores?
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

Esto es lo que funcionó para mí en este momento:

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

words_tokenized es una lista de una lista de tokens:

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

Las oraciones fueron tomadas del ejemplo de cuaderno de notas de ipython que acompaña al libro "Mining the Social Web, 2nd Edition"

jjinking
fuente
16

Desde la línea de comando bash, ejecute:

$ python -c "import nltk; nltk.download('punkt')"
cgl
fuente
Obtengo [nltk_data] Error al cargar punkt: HTTP Error 405: No permitido.
user2478236
1
@ user2478236 GitHub ha estado bloqueando el descargador con HTTP 405 debido al volumen extremadamente alto a veces; ver github.com/nltk/nltk/issues/1787
John Vandenberg
1
Funcionó para mí, esto crea una carpeta nltk_dataen mi directorio de inicio y guarda punkt en él. Tengo Fedora 27, Py3.6.
MaNKuR
13

Esto funciona para mi:

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

En Windows también obtendrá el descargador nltk

Descargador de NLTK

Roshan Bagdiya
fuente
9

Simple nltk.download()no resolverá este problema. Intenté lo siguiente y funcionó para mí:

en la nltkcarpeta cree una tokenizerscarpeta y copie su punktcarpeta en la tokenizerscarpeta.

¡Esto funcionará! ¡La estructura de carpetas debe ser como se muestra en la imagen! 1

Deepthi Karnam
fuente
1
Esto funciona para mí, en mi caso no pude descargar a través de nltk.download ... Así que descargué el archivo manualmente desde nltk.org/nltk_data y creé una carpeta c: / nltk_data / tokenizers / punkt y copié todo archivos en esta ubicación
Fermin Pitol
6

nltk tiene sus modelos de tokenizadores pre-entrenados. El modelo se descarga desde fuentes web predefinidas internamente y se almacena en la ruta del paquete nltk instalado mientras se ejecutan las siguientes llamadas de función posibles.

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

Por ejemplo, 2 nltk.download ('punkt')

Si llama a la oración anterior en su código, asegúrese de tener conexión a Internet sin ninguna protección de firewall.

Me gustaría compartir una forma alternativa mejor para resolver el problema anterior con una comprensión más profunda.

Siga los siguientes pasos y disfrute de la tokenización de palabras en inglés usando nltk.

Paso 1: Primero descargue el modelo "english.pickle" siguiendo la ruta web.

Vaya al enlace " http://www.nltk.org/nltk_data/ " y haga clic en "descargar" en la opción "107. Modelos de Tokenizer Punkt"

Paso 2: Extraiga el archivo descargado "punkt.zip" y busque el archivo "english.pickle" y colóquelo en la unidad C.

Paso 3: copie y pegue el siguiente código y ejecútelo.

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

Avísame si tienes algún problema

Jignesh Vasoya
fuente
Muy buena respuesta si estás detrás de un firewall muy agresivo.
kariato
5

En Jenkins, esto se puede solucionar agregando el siguiente código similar a Virtualenv Builder en la pestaña Build :

python -m nltk.downloader punkt

ingrese la descripción de la imagen aquí

Abhijeet
fuente
4

Me encontré con este problema cuando estaba tratando de etiquetar pos en nltk. La forma en que lo hice correcto es creando un nuevo directorio junto con el directorio de corpus llamado "etiquetadoras" y copiando max_pos_tagger en los etiquetadoras de directorio.
Espero que funcione para usted también. ¡¡¡Buena suerte con eso!!!.

Ashish Singh
fuente
4

En Spyder, vaya a su shell activo y descargue nltk usando los siguientes 2 comandos. import nltk nltk.download () Entonces debería ver la ventana del descargador NLTK abierta como se muestra a continuación, vaya a la pestaña 'Modelos' en esta ventana y haga clic en 'punkt' y descargue 'punkt'

Ventana

Krish
fuente
0

Compruebe si tiene todas las bibliotecas NLTK.

Torrtuga
fuente
0

Los datos de los tokenizadores punkt son bastante grandes con más de 35 MB , esto puede ser un gran problema si, como yo, está ejecutando nltk en un entorno como lambda que tiene recursos limitados.

Si solo necesita uno o quizás algunos tokenizadores de idioma, puede reducir drásticamente el tamaño de los datos al incluir solo esos .picklearchivos de idiomas .

Si todo lo que necesita es admitir inglés, su tamaño de datos nltk se puede reducir a 407 KB (para la versión de python 3).

Pasos

  1. Descargue los datos de nltk punkt: https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenizers/punkt.zip
  2. En algún lugar de su entorno, cree las carpetas: nltk_data/tokenizers/punktsi usa Python 3, agregue otra carpeta PY3para que se vea su nueva estructura de directorios nltk_data/tokenizers/punkt/PY3. En mi caso, creé estas carpetas en la raíz de mi proyecto.
  3. Extraiga el .picklearchivo zip y mueva los archivos de los idiomas que desea admitir a la punktcarpeta que acaba de crear. Nota: Los usuarios de Python 3 deben usar los pepinillos de la PY3carpeta. Con sus archivos de idioma cargados, debería verse algo así como: ejemplo-carpeta-estuctura
  4. Ahora solo necesita agregar su nltk_datacarpeta a las rutas de búsqueda, suponiendo que sus datos no estén en una de las rutas de búsqueda predefinidas . Puede agregar sus datos utilizando la variable de entorno NLTK_DATA='path/to/your/nltk_data'. También puede agregar una ruta personalizada en tiempo de ejecución en python haciendo:
from nltk import data
data.path += ['/path/to/your/nltk_data']

NOTA: Si no necesita cargar los datos en tiempo de ejecución o agrupar los datos con su código, sería mejor crear sus nltk_datacarpetas en las ubicaciones integradas que nltk busca .

Trent Holliday
fuente
0

nltk.download()No resolverá este problema. Intenté lo siguiente y funcionó para mí:

en la '...AppData\Roaming\nltk_data\tokenizers'carpeta, extraiga la punkt.zipcarpeta descargada en la misma ubicación.

bishnarender
fuente
0

En Python-3.6puedo ver la sugerencia en el rastreo. Eso es muy útil. Por lo tanto, les diré que presten atención al error que obtuvieron, la mayoría de las veces las respuestas están dentro de ese problema;).

ingrese la descripción de la imagen aquí

Y luego, como lo sugirieron otras personas aquí, ya sea usando la terminal de Python o usando un comando como python -c "import nltk; nltk.download('wordnet')"podemos instalarlos sobre la marcha. Solo necesita ejecutar ese comando una vez y luego guardará los datos localmente en su directorio de inicio.

MaNKuR
fuente
0

Tuve un problema similar al usar una carpeta asignada para múltiples descargas, y tuve que agregar la ruta de datos manualmente:

descarga única, se puede lograr de la siguiente manera (funciona)

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

Este código funciona, lo que significa que nltk recuerda la ruta de descarga pasada en la función de descarga. Por otro lado, si descargo un paquete posterior obtengo un error similar al descrito por el usuario:

Las descargas múltiples generan un error:

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:

Punkt de recursos no encontrado. Utilice el descargador NLTK para obtener el recurso:

import nltk nltk.download ('punkt')

Ahora, si agrego la ruta de datos ntlk con mi ruta de descarga, funciona:

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

Esto funciona ... No estoy seguro de por qué funciona en un caso pero no en el otro, pero el mensaje de error parece implicar que no se registra en la carpeta de descarga la segunda vez. NB: usando windows8.1 / python3.7 / nltk3.5

Nono London
fuente