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

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!


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


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"


16

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

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

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


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


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


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


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!!!.


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


0

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


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 .


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.


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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.