Échec du chargement de english.pickle avec nltk.data.load

144

Lorsque vous essayez de charger le punkttokenizer ...

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

... un a LookupErrorété soulevé:

> 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
la source
2
vous pouvez télécharger le modèle pickle en utilisant>>> nltk.download()
alvas

Réponses:

262

J'ai eu le même problème. Allez dans un shell python et tapez:

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

Ensuite, une fenêtre d'installation apparaît. Allez dans l'onglet «Modèles» et sélectionnez «punkt» dans la colonne «Identifiant». Cliquez ensuite sur Télécharger et il installera les fichiers nécessaires. Alors ça devrait marcher!

Richardr
la source
4
Notez que dans certaines versions, il n'y a pas d'onglet Modèles et vous pouvez aller dans «Télécharger» et essayer d'obtenir le paquet «punkt» ou utiliser n'importe quelle option «liste» pour lister les paquets disponibles.
ely
2
il s'installe dans mon dossier personnel dans un répertoire nltk_data. Dois-je copier ce répertoire de punkt dans n'importe quel dossier de bibliothèque nltk. pls help
sumanth232
Je ne sais pas ce que tu veux dire. tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')devraient alors travailler et vous pouvez utiliser tokenizer comme ceci: tokenizer.tokenize('The cat. The mat. It Sat.'). Ici, nltk essaie de résoudre le chemin relatif par rapport tokenizers/punkt/english.pickleà plusieurs emplacements. Par exemple, sous Windows, il regarde dans %APPDATA%\nltk_data\tokenizers\punkt\english.pickleou C:\nltk_data\tokenizers\punkt\english.pickle(idem pour D: et E :). Donc, si vous vous assurez que le fichier punkt.zip est décompressé de manière à ce que l'un de ces emplacements existe, il devrait pouvoir le trouver.
richardr
Vous pouvez également définir votre NLTK_DATAvariable d'environnement pour qu'elle pointe vers le dossier nltk_data afin qu'il %NLTK_DATA%\tokenizers\punkt\english.pickleexiste.
richardr
Si vous utilisez un système non-X-Window (comme par exemple via une sshconnexion), il n'y aura pas de fenêtre GUI et donc pas d'onglet «Modèles».
mknaf
95

Vous pouvez faire ça comme ça.

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

Vous pouvez télécharger les tokenizers en les passant punktcomme argument à la downloadfonction. Les jetons de mots et de phrases sont alors disponibles sur nltk.

Si vous voulez télécharger tout -à- dire chunkers, grammars, misc, sentiment, taggers, corpora, help, models, stemmers, tokenizers, ne passent pas d'arguments comme celui - ci.

nltk.download()

Voir ceci pour plus d'informations. https://www.nltk.org/data.html

Naren Yellavula
la source
1
Les réponses au code uniquement sont très mal vues. Veuillez ajouter plus d'explications à votre réponse. Comment ça marche? Pourquoi est-ce utile?
RubberDuck
Il télécharge simplement les bibliothèques nécessaires pour permettre à nltk d'effectuer tout travail de tokenisation.
Itzik Gili
comment utiliser les tokenizers?
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

C'est ce qui a fonctionné pour moi en ce moment:

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

phrases_tokenized est une liste d'une liste de jetons:

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

Les phrases sont tirées de l'exemple de cahier ipython accompagnant le livre "Mining the Social Web, 2nd Edition"

japper
la source
16

À partir de la ligne de commande bash, exécutez:

$ python -c "import nltk; nltk.download('punkt')"
cgl
la source
J'obtiens [nltk_data] Erreur de chargement de punkt: Erreur HTTP 405: Non autorisé.
user2478236
1
@ user2478236 GitHub a bloqué le téléchargeur avec HTTP 405 en raison d'un volume parfois extrêmement élevé; voir github.com/nltk/nltk/issues/1787
John Vandenberg
1
Cela a fonctionné pour moi, cela crée un dossier nltk_datadans mon répertoire personnel et y enregistre du punkt. J'ai Fedora 27, Py3.6.
MaNKuR
13

Cela fonctionne pour moi:

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

Dans Windows, vous obtiendrez également le téléchargeur nltk

Téléchargeur NLTK

Roshan Bagdiya
la source
9

Simple nltk.download()ne résoudra pas ce problème. J'ai essayé ce qui suit et cela a fonctionné pour moi:

dans le nltkdossier, créez un tokenizersdossier et copiez votre punktdossier dans le tokenizersdossier.

Cela fonctionnera.! la structure du dossier doit être comme indiqué sur l'image! 1

Deepthi Karnam
la source
1
Cela fonctionne pour moi, dans mon cas, je n'ai pas pu télécharger via nltk.download ... J'ai donc téléchargé le fichier manuellement depuis nltk.org/nltk_data et j'ai créé un dossier c: / nltk_data / tokenizers / punkt et j'ai copié tous les fichiers dans cet emplacement
Fermin Pitol
6

nltk a ses modèles de jetons pré-entraînés. Le modèle est téléchargé à partir de sources Web prédéfinies en interne et stocké sur le chemin du package nltk installé lors de l'exécution des appels de fonction possibles.

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

Par exemple, 2 nltk.download ('punkt')

Si vous appelez la phrase ci-dessus dans votre code, assurez-vous d'avoir une connexion Internet sans aucune protection pare-feu.

Je voudrais partager une meilleure façon alternative de résoudre le problème ci-dessus avec une meilleure compréhension approfondie.

Veuillez suivre les étapes suivantes et profiter de la tokenisation du mot anglais en utilisant nltk.

Étape 1: Téléchargez d'abord le modèle "english.pickle" en suivant le chemin Web.

Allez sur le lien " http://www.nltk.org/nltk_data/ " et cliquez sur "télécharger" à l'option "107. Punkt Tokenizer Models"

Étape 2: Extrayez le fichier "punkt.zip" téléchargé et trouvez le fichier "english.pickle" à partir de celui-ci et placez-le dans le lecteur C.

Étape 3: copiez, collez le code suivant et exécutez.

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

Faites-moi savoir si vous rencontrez un problème

Jignesh Vasoya
la source
Vraiment belle réponse si vous êtes derrière un pare-feu très agressif.
kariato
5

Sur Jenkins, cela peut être corrigé en ajoutant le code suivant à Virtualenv Builder sous l' onglet Build :

python -m nltk.downloader punkt

entrez la description de l'image ici

Abhijeet
la source
4

Je suis tombé sur ce problème lorsque j'essayais de faire du marquage pos dans nltk. la façon dont je l'ai obtenu correctement est de créer un nouveau répertoire avec le répertoire corpora nommé "taggers" et de copier max_pos_tagger dans les taggers de répertoire.
J'espère que ça marchera pour toi aussi. Bonne chance avec ça!!!.

Ashish Singh
la source
4

Dans Spyder, accédez à votre shell actif et téléchargez nltk en utilisant les 2 commandes ci-dessous. import nltk nltk.download () Ensuite, vous devriez voir la fenêtre de téléchargement de NLTK ouverte comme ci-dessous, allez dans l'onglet 'Modèles' dans cette fenêtre et cliquez sur 'punkt' et téléchargez 'punkt'

La fenêtre

Krish
la source
0

Vérifiez si vous disposez de toutes les bibliothèques NLTK.

Torrtuga
la source
0

Les données des tokenizers punkt sont assez volumineuses à plus de 35 Mo , cela peut être un gros problème si comme moi vous exécutez nltk dans un environnement tel que lambda qui a des ressources limitées.

Si vous n'avez besoin que d'un ou peut-être de quelques jetons de langue, vous pouvez réduire considérablement la taille des données en n'incluant que ces langues. .pickle fichiers de .

Si vous n'avez besoin que de prendre en charge l'anglais, la taille de vos données nltk peut être réduite à 407 Ko (pour la version python 3).

Pas

  1. Téléchargez les données nltk punkt: https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenizers/punkt.zip
  2. Quelque part dans votre environnement, créez les dossiers:, nltk_data/tokenizers/punktsi vous utilisez python 3, ajoutez un autre dossier PY3pour que votre nouvelle structure de répertoires ressemble à nltk_data/tokenizers/punkt/PY3. Dans mon cas, j'ai créé ces dossiers à la racine de mon projet.
  3. Extrayez le zip et déplacez les .picklefichiers des langues que vous souhaitez prendre en charge dans le punktdossier que vous venez de créer. Remarque: les utilisateurs de Python 3 doivent utiliser les cornichons du PY3dossier. Avec vos fichiers de langue chargés, cela devrait ressembler à quelque chose comme: exemple-dossier-structure
  4. Il vous suffit maintenant d'ajouter votre nltk_datadossier aux chemins de recherche, en supposant que vos données ne se trouvent pas dans l'un des chemins de recherche prédéfinis . Vous pouvez ajouter vos données à l'aide de la variable d'environnementNLTK_DATA='path/to/your/nltk_data' . Vous pouvez également ajouter un chemin personnalisé au moment de l'exécution en python en faisant:
from nltk import data
data.path += ['/path/to/your/nltk_data']

REMARQUE: si vous n'avez pas besoin de charger les données lors de l'exécution ou de regrouper les données avec votre code, il serait préférable de créer vos nltk_datadossiers aux emplacements intégrés recherchés par nltk .

Trent Holliday
la source
0

nltk.download()ne résoudra pas ce problème. J'ai essayé ce qui suit et cela a fonctionné pour moi:

dans le '...AppData\Roaming\nltk_data\tokenizers'dossier, extrayez le punkt.zipdossier téléchargé au même emplacement.

bishnarender
la source
0

Dans Python-3.6je peux voir la suggestion dans le retraçage. C'est très utile. Par conséquent, je dirai que vous devez faire attention à l'erreur que vous avez, la plupart du temps, les réponses sont dans ce problème;).

entrez la description de l'image ici

Et puis, comme suggéré par d'autres personnes ici, soit en utilisant le terminal python, soit en utilisant une commande comme python -c "import nltk; nltk.download('wordnet')"nous pouvons les installer à la volée. Il vous suffit d'exécuter cette commande une fois, puis elle enregistrera les données localement dans votre répertoire personnel.

MaNKuR
la source
0

J'ai eu un problème similaire lors de l'utilisation d'un dossier attribué pour plusieurs téléchargements, et j'ai dû ajouter le chemin des données manuellement:

téléchargement unique, peut être réalisé comme suit (travaux)

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

Ce code fonctionne, ce qui signifie que nltk se souvient du chemin de téléchargement passé dans la fonction de téléchargement. Sur les autres nads, si je télécharge un package ultérieur, j'obtiens une erreur similaire à celle décrite par l'utilisateur:

Plusieurs téléchargements génèrent une erreur:

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

Erreur:

Punkt de ressource introuvable. Veuillez utiliser le téléchargeur NLTK pour obtenir la ressource:

import nltk nltk.download ('punkt')

Maintenant, si j'ajoute le chemin de données ntlk avec mon chemin de téléchargement, cela fonctionne:

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

Cela fonctionne ... Je ne sais pas pourquoi cela fonctionne dans un cas mais pas dans l'autre, mais le message d'erreur semble impliquer qu'il ne s'enregistre pas dans le dossier de téléchargement la deuxième fois. NB: en utilisant windows8.1 / python3.7 / nltk3.5

Nono Londres
la source