Nltk: Échec du téléchargement des données NLTK: ERREUR HTTP 405/403

Créé le 26 juil. 2017  ·  47Commentaires  ·  Source: nltk/nltk

>>> nltk.download("all")
[nltk_data] Error loading all: HTTP Error 405: Not allowed.

>>> nltk.version_info
sys.version_info(major=3, minor=5, micro=2, releaselevel='final', serial=0)

J'ai également essayé de visiter https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/corpora/cmudict.zip . Vous avez la même ERREUR HTTP 405.

Trouvez le même problème sur stackoverflow: https://stackoverflow.com/questions/45318066/getting-405- while-trying-to-download-nltk-

Tous les commentaires seraient appréciés.

admin bug corpus inactive

Commentaire le plus utile

@plaihonen, vous devriez pouvoir utiliser cet index alternatif en faisant quelque chose comme python -m nltk.downloader -u https://pastebin.com/raw/D3TBY4Mj punkt

Tous les 47 commentaires

Il semble que le Github est en panne / bloque l'accès au contenu brut sur le dépôt.

En attendant, la solution temporaire est quelque chose comme ceci:

PATH_TO_NLTK_DATA=/home/username/nltk_data/
wget https://github.com/nltk/nltk_data/archive/gh-pages.zip
unzip gh-pages.zip
mv nltk_data-gh-pages/ $PATH_TO_NLTK_DATA

Télécharger actuellement le gh-pages.zip et remplacer le répertoire nltk_data est la solution de travail pour le moment.

Avant de trouver sur un autre canal pour distribuer nltk_data , veuillez utiliser la solution ci-dessus.


~ Curieusement, cela ne semble affecter que le compte utilisateur nltk . Cela fonctionne bien sur la fourche: https://raw.githubusercontent.com/alvations/nltk_data/gh-pages/index.xml~

~ Faire cela fonctionnerait aussi: ~

@alvations Merci beaucoup!

Existe-t-il une alternative pour les téléchargements en ligne de commande comme celui-ci?
python -m nltk.downloader -d ./nltk_data punkt

@plaihonen, vous devriez pouvoir utiliser cet index alternatif en faisant quelque chose comme python -m nltk.downloader -u https://pastebin.com/raw/D3TBY4Mj punkt

@rvause Fonctionne parfaitement. Merci!

+1. c'était une surprise de plusieurs heures ce matin. Je suis allé en contournant complètement le téléchargement de nltk pour le moment

GitHub bloque actuellement l'accès car "un utilisateur consomme une très grande quantité de bande passante en demandant des fichiers". Ils ont également suggéré que nous devrions envisager une manière différente de distribuer les paquets de données, par exemple S3.

Même avec un index alternatif, quelqu'un trouve-t-il que certains packages ne fonctionnent toujours pas?

Plus précisément, pour moi, le package stopwords me donne un 405, les autres (brown, wordnet, punkt, etc.) ne le font pas.

oui, je ne peux pas non plus télécharger les mots vides nltk. J'obtiens l'erreur 405 quand je fais> python -m nltk.downloader -u http://nltk.github.com/nltk_data/

Hé, j'essaye d'exécuter python -m nltk.downloader stopwords , mais j'obtiens une erreur 405. Est-ce que quelqu'un peut-il me montrer la bonne direction?

@ dfridman1 @ prakruthi-karuna lisez le problème ci-dessus. Le contournement est:

python -m nltk.downloader -u https://pastebin.com/raw/D3TBY4Mj all

Nous avons quelques projets qui utilisent cela dans notre système ci. Plutôt que d'avoir à tous les mettre à jour avec le paramètre -u, il existe une autre façon de spécifier ces données. Peut-être une variable d'environnement ou un fichier de configuration?

@alvations, il semble que votre solution ne fonctionne plus car la version fourchue est également désormais interdite. Quelqu'un est-il actuellement en contact avec le support github à ce sujet?

>>> import nltk
>>> dler = nltk.downloader.Downloader('https://pastebin.com/raw/D3TBY4Mj')
>>> dler.download('punkt')
[nltk_data] Downloading package punkt to /home/zeryx/nltk_data...
[nltk_data] Error downloading u'punkt' from
[nltk_data]     <https://raw.githubusercontent.com/alvations/nltk_data
[nltk_data]     /gh-pages/packages/tokenizers/punkt.zip>:   HTTP Error
[nltk_data]     403: Forbidden.
False

Je viens d'ouvrir un ticket avec eux via la page contact.

On dirait que GitHub est au courant et travaille sur le problème. Voici ce qu'ils m'ont dit:

Désolé pour le dérangement. Nous avons dû bloquer les requêtes adressées aux URL raw.githubusercontent.com pour le dépôt nltk / nltk_data et ses fourches car une utilisation excessive causait des problèmes avec le service GitHub. Nous travaillons pour résoudre le problème, mais nous ne pouvons malheureusement pas autoriser ces demandes pour le moment.

Ouais, je viens de recevoir ça aussi:

Salut Liling,
Je travaille dans l'équipe de support de GitHub et je voulais vous informer que nous avons dû bloquer temporairement l'accès aux fichiers servis à partir des URL raw.githubusercontent.com pour le repo alvations / nltk_data. Actuellement, un utilisateur consomme une très grande quantité de bande passante pour demander des fichiers à ce dépôt, et notre seule option pour le moment est de bloquer toutes les demandes. Nous travaillons activement sur des moyens d'atténuer le problème et nous vous contacterons lorsque nous aurons une mise à jour.Veuillez nous le faire savoir si vous avez des questions.
A bientôt, Shawna

@ ewan-klein @stevenbird Je pense que nous avons besoin d'une nouvelle façon de distribuer les données, mais cela nécessitera quelques retouches du nltk.downloader.py .

Quelques suggestions:

Apparemment, nous n'avons pas d'autre choix que de changer le canal de distribution des données:

Salut Liling,
Je voulais faire un suivi à ce sujet avec des informations supplémentaires. Nous avons discuté du problème en interne, et il est fort probable que nous ne restaurerons pas l'accès brut aux dépôts dans le réseau de fourches nltk / nltk_data dans un avenir prévisible. Le problème est qu'il existe un certain nombre de machines qui appellent nltk.download () à une fréquence très élevée. Nous ne pouvons pas restaurer l'accès brut tant que cette activité ne s'arrête pas. N'hésitez pas à partager ce message avec la communauté nltk. Nous espérons que quiconque fera cela sera alerté du problème et arrêtera tout processus en cours.
Bravo, Jamie

On pourrait penser qu'ils pourraient simplement bloquer ces adresses IP spécifiquement. Mais peut-être y a-t-il plus que cela.

J'ai une image docker qui télécharge nltk_data, mais je ne la reconstruisais pas fréquemment. J'espère que je n'étais pas l'un de ces utilisateurs à fort trafic ...

Existe-t-il un processus d'installation qui ne repose pas sur github?

Peut-être que quelqu'un a mal configuré ses scripts sur AWS. @everyone veuillez aider à vérifier vos instances pendant que nous trouvons une alternative à la distribution de données

Salut Liling,
Nous ne pouvons pas partager de chiffres spécifiques, mais les demandes proviennent d'un grand nombre d'instances AWS. Nous pensons que cela pourrait être un script ou un processus de construction qui a mal tourné. Nous ne savons pas grand-chose au-delà de cela.
Bravo, Jamie

Eh bien, c'est un soulagement, je n'utilise pas AWS.

: soulagé:

Au niveau du code, nous devons peut-être modifier la fréquence de mise à jour du même package à partir de nltk downloader.py. Sinon, quel que soit le canal de distribution vers lequel nous migrons, la même interruption de service se produira.

Peut-être que quelque chose basé sur torrent fonctionnerait?

Je ne sais pas à quoi ressemble la licence, mais vous pouvez la rendre publique sur s3: https://aws.amazon.com/datasets/

@alvations semble que seul le téléchargement gzip fonctionne pour le moment. Et les packages devaient être déplacés dans le dossier /home/username/nltk_data/ .

export PATH_TO_NLTK_DATA=/home/username/nltk_data/
wget https://github.com/nltk/nltk_data/archive/gh-pages.zip
unzip gh-pages.zip
mv nltk_data-gh-pages $PATH_TO_NLTK_DATA
# add below code
mv $PATH_TO_NLTK_DATA/nltk_data-gh-pages/packages/* $PATH_TO_NLTK_DATA/

Avons-nous encore une solution temporaire?

@darshanlol @alvations a mentionné une solution. Si vous essayez de créer un docker, ce qui suit a fonctionné pour moi:

ENV PATH_TO_NLTK_DATA $HOME/nltk_data/
RUN apt-get -qq update
RUN apt-get -qq -y install wget
RUN wget https://github.com/nltk/nltk_data/archive/gh-pages.zip
RUN apt-get -y install unzip
RUN unzip gh-pages.zip -d $PATH_TO_NLTK_DATA
# add below code
RUN mv $PATH_TO_NLTK_DATA/nltk_data-gh-pages/packages/* $PATH_TO_NLTK_DATA/

J'essaye de changer l'URL par défaut dans 'nltk.downloader.py', mais le problème existe toujours.

La solution de contournement suggérée ne fonctionne plus:

python -m nltk.downloader -u https://pastebin.com/raw/D3TBY4Mj tous

Actuellement, c'est la seule solution qui fonctionne:

PATH_TO_NLTK_DATA=/home/username/nltk_data/
wget https://github.com/nltk/nltk_data/archive/gh-pages.zip
unzip gh-pages.zip
mv nltk_data-gh-pages/ $PATH_TO_NLTK_DATA

Comme @alvations l'a dit, c'est la seule solution qui fonctionne.

PATH_TO_NLTK_DATA = / home / nom d'utilisateur / nltk_data /wget https://github.com/nltk/nltk_data/archive/gh-pages.zipdécompressez gh-pages.zipmv nltk_data-gh-pages / $ PATH_TO_NLTK_DATA

Mais même après avoir téléchargé toutes les pages, je rencontrais des problèmes car mon téléchargeur NLTK n'était pas en mesure de détecter tous les packages téléchargés pour cela, vous devrez peut-être modifier manuellement la valeur du répertoire de téléchargement via la commande.

Cette page a la commande appropriée que j'ai utilisée pour configurer les paquets de données NLTK

Cliquez sur le lien ci-dessus pour obtenir la réponse.

Voici quelques propositions pour résoudre ce problème après avoir lu et trouvé des alternatives.

Rendre les corpus pipables

  • Tout d'abord, nous allons le changer de sorte que tous les nltk_data soient pip-able. (Ainsi, chaque nouvel environnement nécessitera une nouvelle installation de pip et nous ne dépendons plus du répertoire physique)
  • Nous devrons également garder une trace d'une sorte d'index pour que le téléchargement puisse récupérer et suivre les versions.
  • Ensuite, nous devons également avoir une sorte de refonte du code, du downloader.py et de toute l'interface de lecteur de corpus associée

  • Les limitations pip (du côté de PyPI) peuvent arrêter les utilisateurs / machines malveillants avec des requêtes à haute fréquence

Hébergement des données sur S3 / Zenodo ou un hôte privé

Cela nous obligerait à simplement relier les liens dans le fichier index.xml aux liens appropriés. Après avoir configuré les fichiers individuels sur l'hébergeur Web.

Mais si le trafic reste élevé en raison d'un script d'installation / d'automatisation qui a mal tourné, nous finissons par boguer un fournisseur de services à un autre.


D'autres suggestions?
Une âme courageuse qui veut se charger de ça?

@ harigovind511 , oui, vous devez soit mettre le dossier téléchargé nltk_data dans l'un des emplacements standard où le nltk sait le chercher, soit l'ajouter à nltk.data.path pour lui dire où chercher. Le téléchargeur automatique recherche simplement un emplacement standard.

La limitation / résolution de débit pour les machines non autorisées est probablement nécessaire pour que cela ne fasse pas de nouveau sa tête laide. Mon vote serait pour pip à moins qu'il y ait un problème (ou tabou) avec de gros paquets sur pip?

L'utilisation de pip résoudrait également la gestion manuelle des packages nltk.download () et dans le code.

Les fichiers semblent sauvegardés? Il semble cependant judicieux de continuer à rechercher des mécanismes de distribution alternatifs. Dans ma propre organisation, nous prévoyons de passer à l'hébergement en interne et de nous enregistrer tous les trimestres

J'aimerais comprendre ce que fait $ PATH_TO_NLTK_DATA. Est-il en train de configurer une URL de téléchargement locale alternative pour l'endroit où NLTK obtient ses données?

Je voudrais configurer un cache local de données NLTK, donc je me demandais si ce réglage indique à NLTK de travailler hors ligne?

Étant donné que la racine du problème est l'abus de bande passante, il semble être une mauvaise idée de recommander la récupération manuelle de l'ensemble nltk_data arbre comme solution de contournement. Que diriez-vous de nous montrer comment les identifiants de ressources correspondent aux URL, @alvations , pour que je puisse wget uniquement le bundle punkt , par exemple?

La solution à long terme, je crois, est de rendre moins trivial pour les utilisateurs débutants la récupération de l'intégralité du paquet de données (638 Mo compressés, lorsque j'ai vérifié). Au lieu d'organiser (et de payer) plus de bande passante pour gaspiller des téléchargements inutiles, arrêtez de fournir "all" comme option de téléchargement; la documentation devrait plutôt montrer au scripteur inattentif comment télécharger les ressources spécifiques dont il a besoin. Et en attendant, sortez de l'habitude d'écrire nltk.download("all") (ou équivalent) comme exemple ou utilisation recommandée, sur stackoverflow (je vous regarde, @alvations) et dans les docstrings du téléchargeur. (Pour explorer le nltk, nltk.dowload("book") , et non "all" , est tout aussi utile et beaucoup plus petit.)

À l'heure actuelle, il est difficile de déterminer quelle ressource doit être téléchargée; si j'installe le nltk et que j'essaye nltk.pos_tag(["hello", "friend"]) , il n'y a aucun moyen de mapper le message d'erreur à un ID de ressource que je peux passer à nltk.download(<resource id>) . Tout télécharger est la solution de contournement évidente dans de tels cas. Si nltk.data.load() ou nltk.data.find() peut être corrigé pour rechercher l'identifiant de la ressource dans de tels cas, je pense que vous verrez votre utilisation sur nltk_data diminuer considérablement sur le long terme.

@zxiiro $PATH_TO_NLTK_DATA n'a aucune signification pour le nltk, c'est juste une variable dans l'exemple de script. La variable d'environnement $NLTK_DATA a une signification particulière. Voir http://www.nltk.org/data.html , toutes les options sont expliquées.

@alexisdimi a convenu du nltk.download('all') . Désolé, c'était une si vieille réponse de mes débuts. Je devrais le déconseiller. J'ai changé la réponse SO en nltk.download('popular') place: https://stackoverflow.com/questions/22211525/how-do-i-download-nltk-data

L'un des problèmes avec wget directement dans un paquet est qu'il repose toujours sur le contenu brut sur github. Pendant le temps d'arrêt, le lien https://github.com/nltk/nltk_data/blob/gh-pages/packages/tokenizers/punkt.zip conduisait également à l'erreur 403/405.

Ainsi, le travail autour consistait à télécharger l'ensemble de l'arbre git. Rétrospectivement, ce n'est peut-être pas une bonne idée.

On dirait que le lock-out a été levé, c'est génial! J'espère maintenant qu'il y a des tickets qui permettront d'éviter des problèmes similaires à l'avenir (peut-être dans le sens que j'ai suggéré, peut-être pas).

(Est-ce que _ce_ problème_ doit être marqué "Clôturé", au fait, maintenant que les téléchargements fonctionnent à nouveau?)

@alexisdimi mettre des avertissements suggérant aux utilisateurs de télécharger les modèles appropriés est une bonne idée.

Pour ceux qui exécutent NLTK dans un environnement CI. Je voudrais proposer GH-1795 qui permet à l'utilisation de spécifier une URL alternative pour le téléchargement. L'idée ici est que l'on peut configurer une copie locale de nltk_data sur un serveur Web (ou même python -m http.server) et ensuite avoir une variable globale qui peut remplacer l'URL de téléchargement.

Ceci afin que nous puissions remplacer sans modifier les appels de commande locaux des projets pour inclure -u d'un système CI comme Jenkins.

Question à Github concernant la distribution des données pip à l'aide de versions et l'installation de pip:

Merci Jamie pour le soutien!

Nous recherchons des alternatives pour héberger les nltk_data et l'une d'entre elles consiste à les héberger en tant que versions de référentiel comme le fait SpaCy https://github.com/explosion/spacy-models/releases

Pouvons-nous simplement vérifier avec vous si le même bloc sera exécuté si des requêtes similaires à haute fréquence ont été faites aux versions du référentiel? Ou les versions du référentiel sont-elles traitées différemment du contenu brut sur Github?

Cordialement,
Liling

Quelques mises à jour côté Github:

Salut Liling,

L'utilisation de versions déplace simplement les demandes vers une partie différente de notre infrastructure. Si ce volume de bande passante devait redémarrer, nous devrons toujours bloquer ces demandes, même si elles concernaient des versions.

Nous avons essayé de penser à des façons dont les paquets de données pourraient rester sur GitHub, mais honnêtement, il n'y a pas de bonne solution. Nous ne sommes tout simplement pas conçus pour être un CDN à volume élevé.

À votre santé,
Jamie

@owaaa / @zxiiro +1 sur l'hébergement en interne pour CI. Nous faisons cela maintenant, et l'avantage pour les utilisateurs EC2 / S3 est que vous pouvez placer les données (ou le sous-ensemble dont vous avez besoin) à proximité de l'endroit où vous souhaitez construire les machines. Si vous êtes dans des zones de disponibilité, vous pouvez simplement répliquer les buckets là où vous en avez besoin et être plus robuste face à ce qui se passe en dehors d'AWS.

@alvations J'aime assez l'idée _data / model as package_ dans spaCy, mais une des conséquences est que si vous utilisez virtualenv , vos répertoires d'environnement peuvent gonfler en taille car vos paquets y vivent. Bien sûr, cela vous permet d'acheter des versions de données / modèles complètement isolées et vérifiables, ce qui est précieux pour un projet avec des mises à jour fréquentes de modèles comme spaCy, mais pas un déjeuner gratuit 😕

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

zdog234 picture zdog234  ·  3Commentaires

Chris00 picture Chris00  ·  3Commentaires

DavidNemeskey picture DavidNemeskey  ·  4Commentaires

alvations picture alvations  ·  4Commentaires

stevenbird picture stevenbird  ·  3Commentaires