Nltk: NLTK-Daten konnten nicht heruntergeladen werden: HTTP ERROR 405/403

Erstellt am 26. Juli 2017  ·  47Kommentare  ·  Quelle: 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)

Außerdem habe ich versucht, https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/corpora/cmudict.zip zu besuchen. Habe den gleichen HTTP 405 ERROR.

Finden Sie das gleiche Problem bei stackoverflow: https://stackoverflow.com/questions/45318066/getting-405-while-trying-to-download-nltk-dta

Kommentare sind willkommen.

admin bug corpus inactive

Hilfreichster Kommentar

@plaihonen Sie sollten in der Lage sein, diesen alternativen Index zu verwenden, indem Sie etwas wie python -m nltk.downloader -u https://pastebin.com/raw/D3TBY4Mj punkt tun

Alle 47 Kommentare

Es scheint, als ob der Github den Zugriff auf den Rohinhalt im Repo blockiert.

Inzwischen ist die vorübergehende Lösung ungefähr so:

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

Das Herunterladen des Verzeichnisses gh-pages.zip und das Ersetzen des Verzeichnisses nltk_data ist derzeit die funktionierende Lösung.

Bevor wir auf einem anderen Kanal nltk_data vertreiben, verwenden Sie bitte die oben genannte Lösung.


~ Seltsamerweise scheint es nur das Benutzerkonto nltk zu beeinflussen. Es funktioniert gut auf der Gabel: https://raw.githubusercontent.com/alvations/nltk_data/gh-pages/index.xml~

~ Dies zu tun würde auch funktionieren: ~

@alvations Vielen Dank!

Gibt es eine Alternative für solche Befehlszeilen-Downloads?
python -m nltk.downloader -d ./nltk_data punkt

@plaihonen Sie sollten in der Lage sein, diesen alternativen Index zu verwenden, indem Sie etwas wie python -m nltk.downloader -u https://pastebin.com/raw/D3TBY4Mj punkt tun

@rvause Funktioniert perfekt. Dankeschön!

+1. Dies war heute Morgen eine mehrstündige Überraschung. Ging mit vollständig umgangenem nltk-Download für jetzt

GitHub blockiert derzeit den Zugriff, weil "ein Benutzer sehr viel Bandbreite verbraucht, um Dateien anzufordern". Sie haben auch vorgeschlagen, dass wir eine andere Art der Verteilung von Datenpaketen betrachten sollten, z. B. S3.

Hat jemand mit einem alternativen Index festgestellt, dass einige Pakete immer noch nicht funktionieren?

Speziell für mich gibt mir das Stoppwortpaket einen 405, die anderen (braun, wordnet, punkt usw.) nicht.

Ja, ich kann die nltk-Stoppwörter auch nicht herunterladen. Ich erhalte den Fehler 405, wenn ich> python -m nltk.downloader -u http://nltk.github.com/nltk_data/ mache.

Hey, ich versuche python -m nltk.downloader stopwords auszuführen, erhalte aber den Fehler 405. Kann mich jemand in die richtige Richtung weisen?

@ dfridman1 @ prakruthi-karuna Lesen Sie das obige Problem. Umgehen ist:

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

Wir haben einige Projekte, die dies in unserem ci-System verwenden. Anstatt alle mit dem Parameter -u aktualisieren zu müssen, gibt es eine andere Möglichkeit, diese Daten anzugeben. Vielleicht eine Umgebungsvariable oder eine Konfigurationsdatei?

@alvations Es scheint, dass Ihre Lösung nicht mehr funktioniert, da die gegabelte Version jetzt ebenfalls verboten ist. Hat jemand derzeit Kontakt mit dem Github-Support?

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

Ich habe gerade ein Ticket mit ihnen über die Kontaktseite geöffnet.

GitHub scheint sich dessen bewusst zu sein und arbeitet an dem Problem. Folgendes sagten sie zu mir:

Entschuldigung für die Probleme. Wir mussten Anfragen an raw.githubusercontent.com-URLs für das Repo nltk / nltk_data und seine Gabeln blockieren, da übermäßige Nutzung Probleme mit dem GitHub-Dienst verursachte. Wir arbeiten daran, das Problem zu beheben, können diese Anforderungen jedoch derzeit leider nicht zulassen.

Ja, ich habe das auch gerade erhalten:

Hallo Liling,
Ich arbeite im Support-Team von GitHub und wollte Sie darüber informieren, dass wir den Zugriff auf Dateien, die von raw.githubusercontent.comURLs für das Repo alvations / nltk_data bereitgestellt werden, vorübergehend blockieren mussten. Derzeit verbraucht ein Benutzer eine sehr große Menge an Bandbreite, um Dateien von diesem Repo anzufordern, und unsere einzige Option im Moment besteht darin, alle Anforderungen zu blockieren. Wir arbeiten aktiv an Möglichkeiten, um das Problem zu beheben, und wir werden uns mit Ihnen in Verbindung setzen, wenn wir ein Update haben. Bitte lassen Sie uns wissen, wenn Sie Fragen haben.
Prost, Shawna

@ ewan-klein @stevenbird Ich denke, wir brauchen einen neuen Weg, um Daten zu verteilen, aber das erfordert eine Überarbeitung des nltk.downloader.py .

Einige Vorschläge:

Scheinbar haben wir keine andere Wahl, als den Datenverteilungskanal zu ändern:

Hallo Liling,
Wollte dies mit einigen zusätzlichen Informationen verfolgen. Wir haben das Problem intern erörtert, und es ist sehr wahrscheinlich, dass wir auf absehbare Zeit keinen unformatierten Zugriff auf Repos im Fork-Netzwerk nltk / nltk_data wiederherstellen werden. Das Problem ist, dass es eine Reihe von Computern gibt, die nltk.download () mit einer sehr hohen Frequenz aufrufen. Wir können den unformatierten Zugriff erst wiederherstellen, wenn diese Aktivität beendet ist. Sie können diese Nachricht gerne an die nltk-Community weitergeben. Wir hoffen, dass jeder, der dies tut, auf das Problem aufmerksam gemacht wird und den Prozess stoppt, der dies tut.
Prost, Jamie

Man würde denken, sie könnten diese IPs nur spezifisch blockieren. Aber vielleicht steckt noch mehr dahinter.

Ich habe ein Docker-Image, das nltk_data herunterlädt, aber ich habe es nicht häufig neu erstellt. Ich hoffe, ich war nicht einer dieser stark frequentierten Benutzer ...

Gibt es einen Installationsprozess, der nicht auf Github basiert?

Möglicherweise hat jemand seine Skripte in AWS falsch konfiguriert. @jeder hilft

Hallo Liling,
Wir können keine bestimmten Nummern teilen, die Anforderungen stammen jedoch von einer großen Anzahl von AWS-Instanzen. Wir vermuten, dass es sich um ein schief gelaufenes Skript oder einen fehlerhaften Build-Prozess handelt. Darüber hinaus wissen wir nicht viel.
Prost, Jamie

Nun, das ist eine Erleichterung, ich benutze kein AWS.

:erleichtert:

In Bezug auf den Code müssen wir möglicherweise ändern, wie häufig dasselbe Paket auch von nltk downloader.py aktualisiert wird. Andernfalls tritt unabhängig von dem Vertriebskanal, auf den wir migrieren, dieselbe Dienstunterbrechung auf.

Vielleicht würde etwas Torrentbasiertes funktionieren?

Sie sind sich nicht sicher, wie die Lizenz aussieht, aber Sie können sie auf s3 veröffentlichen: https://aws.amazon.com/datasets/

@alvations scheint nur der gzip-Download funktioniert /home/username/nltk_data/ verschoben werden.

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/

Haben wir schon eine vorübergehende Problemumgehung?

@darshanlol @alvations erwähnte eine Lösung. Wenn Sie versuchen, einen Docker zu erstellen, hat Folgendes für mich funktioniert:

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/

Ich versuche, die Standard-URL in 'nltk.downloader.py' zu ändern. Das Problem besteht jedoch weiterhin.

Die vorgeschlagene Problemumgehung funktioniert nicht mehr:

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

Derzeit ist dies die einzige funktionierende Lösung:

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

Wie @alvations sagte, ist dies die einzige funktionierende Lösung.

PATH_TO_NLTK_DATA = / home / username / nltk_data /wget https://github.com/nltk/nltk_data/archive/gh-pages.zipentpacke gh-pages.zipmv nltk_data-gh-pages / $ PATH_TO_NLTK_DATA

Aber selbst nach dem Herunterladen aller Seiten hatte ich Probleme, da mein NLTK-Downloader nicht alle heruntergeladenen Pakete erkennen konnte. Möglicherweise müssen Sie den Wert des Download-Verzeichnisses manuell über den Befehl ändern.

Diese Seite hat den richtigen Befehl, den ich zum Konfigurieren von NLTK-Datenpaketen verwendet habe

Klicken Sie auf den obigen Link, um eine Antwort zu erhalten.

Hier sind einige Vorschläge zur Lösung dieses Problems, nachdem Sie sich umgesehen und Alternativen gefunden haben.

Korpora pipable machen

  • Zuerst werden wir es so ändern, dass alle nltk_data pip-fähig sind. (Daher erfordert jede neue Umgebung eine neue Pip-Installation und wir verlassen uns nicht mehr auf das physische Verzeichnis.)
  • Wir müssen auch eine Art Index verfolgen, damit der Download Versionen abrufen und verfolgen kann.
  • Dann müssen wir auch den Code, die Datei downloader.py und die gesamte zugehörige Corpus Reader-Oberfläche überarbeiten

  • Möglicherweise können pip -Einschränkungen (von PyPI-Seite) die betrügerischen Benutzer / Maschinen mit Hochfrequenzanforderungen stoppen

Hosting der Daten auf S3 / Zenodo oder einem privaten Host

Dies würde erfordern, dass wir die Links in der index.xml einfach erneut mit den entsprechenden Links verknüpfen. Nach dem Einrichten der einzelnen Dateien auf dem Webhost.

Wenn der Datenverkehr jedoch aufgrund eines fehlerhaften Installations- / Automatisierungsskripts hoch bleibt, werden wir einen Dienstanbieter an einen anderen abhören.


Irgendwelche anderen Vorschläge?
Irgendeine mutige Seele, die das annehmen will?

@ harigovind511 , ja, Sie müssen entweder den heruntergeladenen Ordner nltk_data an einem der Standardspeicherorte ablegen, an denen der nltk danach suchen kann, oder an nltk.data.path anhängen, um anzugeben, wo er suchen soll. Der automatische Downloader sucht nur nach einem Standardspeicherort.

Eine Ratenbegrenzung / -lösung für Schurkenmaschinen ist wahrscheinlich notwendig, damit dieser seinen hässlichen Kopf nicht wieder aufrichtet. Meine Stimme wäre für pip, es sei denn, es gibt ein Problem (oder ein Tabu) mit großen Paketen auf pip?

Die Verwendung von pip würde auch die manuelle Verwaltung von nltk.download () und In-Code-Paketen lösen.

Dateien scheinen wieder hoch zu sein? Scheint jedoch klug, weiterhin nach alternativen Verteilungsmechanismen zu suchen. In meiner eigenen Organisation planen wir jedoch, intern zu hosten und vierteljährlich einzuchecken

Ich würde gerne verstehen, was $ PATH_TO_NLTK_DATA macht. Konfiguriert es eine alternative lokale Download-URL für die Daten von NLTK?

Ich möchte einen lokalen Cache mit NLTK-Daten einrichten, also habe ich mich gefragt, ob NLTK durch diese Einstellung offline arbeiten soll.

Da die Wurzel des Problems der Bandbreitenmissbrauch ist, scheint es eine schlechte Idee zu sein, das manuelle Abrufen des gesamten nltk_data -Baums als Problemumgehung zu empfehlen. Wie wäre es, wenn Sie uns zeigen, wie Ressourcen-IDs URLs, @alvations , punkt -Paket wget ?

Ich glaube, die langfristige Lösung besteht darin, es für Anfänger weniger trivial zu machen, das gesamte Datenpaket abzurufen (638 MB komprimiert, als ich es überprüft habe). Anstatt mehr Bandbreite für sinnlose Downloads zu arrangieren (und dafür zu bezahlen), sollten Sie aufhören, "all" als Download-Option bereitzustellen. Die Dokumentation sollte stattdessen dem unaufmerksamen Scripter zeigen, wie er die spezifischen Ressourcen herunterlädt, die er benötigt. Und in der Zwischenzeit sollten Sie sich nicht mehr angewöhnen, nltk.download("all") (oder ein gleichwertiges Beispiel) als Beispiel oder empfohlene Verwendung, im Stackoverflow (ich sehe Sie, @alvations) und in den Downloader-Dokumentzeichenfolgen zu schreiben. (Für die Erkundung des nltk ist nltk.dowload("book") , nicht "all" , genauso nützlich und viel kleiner.)

Derzeit ist es schwierig herauszufinden, welche Ressource heruntergeladen werden muss. Wenn ich das nltk installiere und nltk.pos_tag(["hello", "friend"]) ausprobiere, gibt es keine Möglichkeit, die Fehlermeldung einer Ressourcen-ID zuzuordnen, die ich an nltk.download(<resource id>) . Das Herunterladen von allem ist in solchen Fällen die offensichtliche Problemumgehung. Wenn in solchen Fällen nltk.data.load() oder nltk.data.find() gepatcht werden können, um die Ressourcen-ID nachzuschlagen, wird Ihre Nutzung von nltk_data auf lange Sicht erheblich sinken.

@zxiiro $PATH_TO_NLTK_DATA hat für das nltk keine Bedeutung, es ist nur eine Variable im Beispielskript. Die Umgebungsvariable $NLTK_DATA hat eine besondere Bedeutung. Unter http://www.nltk.org/data.html werden alle Optionen erläutert.

@alexisdimi stimmte dem nltk.download('all') . Entschuldigung, das war eine so alte Antwort aus meiner Anfangszeit. Ich sollte davon abraten. Ich habe die SO-Antwort stattdessen in nltk.download('popular') geändert: https://stackoverflow.com/questions/22211525/how-do-i-download-nltk-data

Eines der Probleme mit wget direkt in einem Paket ist, dass es immer noch auf dem Rohinhalt von Github basiert. Während der Ausfallzeit führte der Link https://github.com/nltk/nltk_data/blob/gh-pages/packages/tokenizers/punkt.zip ebenfalls zum Fehler 403/405.

Die Arbeit bestand also darin, den gesamten Git-Baum herunterzuladen. Rückblickend ist das vielleicht keine gute Idee.

Sieht aus wie die Aussperrung aufgehoben wurde, das ist großartig! Jetzt hoffe ich, dass es einige Tickets gibt, die dazu beitragen, ähnliche Probleme in Zukunft zu vermeiden (vielleicht in der von mir vorgeschlagenen Weise, vielleicht auch nicht).

(Sollte dieses Problem übrigens als "Geschlossen" markiert sein, nachdem das Herunterladen wieder funktioniert?)

@alexisdimi Warnungen, die den Benutzern

Für diejenigen, die NLTK in einer CI-Umgebung ausführen. Ich möchte GH-1795 vorschlagen, mit dem eine alternative URL zum Herunterladen angegeben werden kann. Die Idee hier ist, dass man eine lokale Kopie von nltk_data auf einem Webserver (oder sogar python -m http.server) einrichten und dann eine globale Variable haben kann, die die Download-URL überschreiben kann.

Auf diese Weise können wir lokale Befehlsaufrufe von Projekten überschreiben, ohne sie zu ändern, um -u von einem CI-System wie Jenkins einzuschließen.

Frage an Github bezüglich der Verteilung von Pip-Daten mithilfe von Releases und Pip-Installation:

Danke Jamie für die Unterstützung!

Wir suchen nach Alternativen, um die nltk_data zu hosten. Eine davon besteht darin, sie als Repository-Releases zu hosten, wie es SpaCy tut. Https://github.com/explosion/spacy-models/releases

Können wir uns mit Ihnen in Verbindung setzen, ob derselbe Block ausgeführt wird, wenn ähnliche Hochfrequenzanforderungen an die Repository-Releases gestellt wurden? Oder werden die Repository-Releases anders behandelt als der Rohinhalt auf Github?

Grüße,
Liling

Einige Updates auf der Github-Seite:

Hallo Liling,

Durch die Verwendung von Releases werden die Anforderungen nur in einen anderen Teil unserer Infrastruktur verschoben. Wenn dieses Bandbreitenvolumen erneut gestartet würde, müssten wir diese Anforderungen immer noch blockieren, selbst wenn es sich um Releases handelt.

Wir haben versucht, uns einige Möglichkeiten auszudenken, wie die Datenpakete auf GitHub verbleiben könnten, aber es gibt ehrlich gesagt keine gute Lösung. Wir sind einfach nicht als CDN mit hohem Volumen eingerichtet.

Prost,
Jamie

@owaaa / @zxiiro +1 über internes Hosting für CI. Wir machen das jetzt und der Vorteil für EC2 / S3-Benutzer besteht darin, dass Sie die Daten (oder die Teilmenge davon, die Sie benötigen) in die Nähe des Ortes bringen, an dem Sie die Maschinen bauen möchten. Wenn Sie sich über Verfügbarkeitszonen hinweg befinden, können Sie Buckets einfach dort replizieren, wo Sie sie benötigen, und robuster gegenüber den Vorgängen außerhalb von AWS sein.

@alvations Ich mag die Idee _data / model as package_ in spaCy sehr, aber eine der Konsequenzen ist, dass Ihre Umgebungsverzeichnisse bei Verwendung von virtualenv an Größe zunehmen können, wenn Ihre Pakete dort leben. Auf diese Weise erhalten Sie natürlich vollständig isolierte und überprüfbare Daten- / Modellversionen, was für ein Projekt mit häufigen Modellaktualisierungen wie spaCy, aber nicht für ein kostenloses Mittagessen von Nutzen ist

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen