Nltk: Не удалось загрузить данные NLTK: HTTP ERROR 405/403

Созданный на 26 июл. 2017  ·  47Комментарии  ·  Источник: 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)

Кроме того, я попытался посетить https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/corpora/cmudict.zip . Та же ошибка HTTP 405.

Найдите ту же проблему в stackoverflow: https://stackoverflow.com/questions/45318066/getting-405- while-trying-to-download-nltk-

Приветствуются любые комментарии.

admin bug corpus inactive

Самый полезный комментарий

@plaihonen, вы сможете использовать этот альтернативный индекс, выполнив что-то вроде python -m nltk.downloader -u https://pastebin.com/raw/D3TBY4Mj punkt

Все 47 Комментарий

Похоже, что Github не работает / блокирует доступ к необработанному контенту в репо.

Между тем временное решение выглядит примерно так:

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

В настоящее время загрузка gh-pages.zip и замена каталога nltk_data является рабочим решением.

Прежде чем мы найдем на другом канале для распространения nltk_data , воспользуйтесь указанным выше решением.


~ Как ни странно, это влияет только на учетную запись пользователя nltk . Он отлично работает на форке: https://raw.githubusercontent.com/alvations/nltk_data/gh-pages/index.xml~

~ Это тоже сработает: ~

@alvations Большое спасибо!

Есть ли альтернатива загрузкам из командной строки, подобным этой?
python -m nltk.downloader -d ./nltk_data punkt

@plaihonen, вы сможете использовать этот альтернативный индекс, выполнив что-то вроде python -m nltk.downloader -u https://pastebin.com/raw/D3TBY4Mj punkt

@rvause Прекрасно работает. Спасибо!

+1. сегодня утром это был сюрприз на несколько часов. Пошел с полным обходом загрузки пока nltk

GitHub в настоящее время блокирует доступ, потому что «пользователь использует очень большой объем файлов, запрашивающих пропускную способность». Они также предложили нам рассмотреть другой способ распространения пакетов данных, например S3.

Кто-нибудь обнаружит, что даже с альтернативным индексом некоторые пакеты по-прежнему не работают?

В частности, для меня пакет Stopwords дает мне 405, а другие (коричневый, wordnet, punkt и т. Д.) - нет.

да, я тоже не могу загрузить стоп-слова nltk. Я получаю ошибку 405, когда делаю> python -m nltk.downloader -u http://nltk.github.com/nltk_data/

Эй, я пытаюсь запустить python -m nltk.downloader stopwords , но получаю ошибку 405. Может кто-то указать мне верное направление?

@ dfridman1 @ prakruthi-karuna прочитайте вопрос выше. Работа вокруг:

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

У нас есть несколько проектов, использующих это в нашей системе ci. Вместо того, чтобы обновлять их все с помощью параметра -u, есть другой способ указать эти данные. Может быть, переменная окружения или файл конфигурации?

@alvations похоже, что ваше решение больше не работает, поскольку разветвленная версия также теперь запрещена. Кто-нибудь в настоящее время связывается с поддержкой github по этому поводу?

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

Я только что открыл с ними заявку на странице контактов.

Похоже, GitHub знает об этой проблеме и работает над ее решением. Вот что они мне сказали:

Извините за неприятности. Нам пришлось заблокировать запросы к URL-адресам raw.githubusercontent.com для репозитория nltk / nltk_data и его вилок, поскольку чрезмерное использование вызывало проблемы со службой GitHub. Мы работаем над решением проблемы, но, к сожалению, в настоящее время не можем удовлетворить эти запросы.

Да, я тоже только что получил:

Привет, Лилинг,
Я работаю в группе поддержки GitHub и хочу сообщить вам, что нам пришлось временно заблокировать доступ к файлам, обслуживаемым с raw.githubusercontent.comURL, для репозитория alvations / nltk_data. В настоящее время пользователь использует очень большой объем пропускной способности, запрашивая файлы из этого репо, и наш единственный вариант на данный момент - заблокировать все запросы. Мы активно работаем над способами решения проблемы и свяжемся с вами, когда у нас появятся обновления. Сообщите нам, если у вас возникнут какие-либо вопросы.
Ура, Шона

@ ewan-klein @stevenbird Я думаю, нам нужен новый способ распространения данных, но это потребует некоторой доработки nltk.downloader.py .

Некоторые предложения:

Казалось бы, у нас нет другого выбора, кроме как изменить канал распространения данных:

Привет, Лилинг,
Хотел дополнить этот вопрос дополнительной информацией. Мы обсуждали эту проблему внутри компании, и весьма вероятно, что в обозримом будущем мы не будем восстанавливать необработанный доступ к репозиториям в сети форка nltk / nltk_data. Проблема в том, что есть несколько машин, которые вызывают nltk.download () с очень высокой частотой. Мы не можем восстановить необработанный доступ до тех пор, пока эта активность не прекратится. Не стесняйтесь поделиться этим сообщением с сообществом nltk. Мы надеемся, что тот, кто это делает, будет предупрежден о проблеме и остановит любой процесс, который это делает.
Привет, Джейми

Казалось бы, они могут просто заблокировать эти IP-адреса. Но, возможно, это еще не все.

У меня есть образ докера, который загружает nltk_data, но я не часто его перестраивал. Надеюсь, я не был одним из тех пользователей с высоким трафиком ...

Есть ли процесс установки, не зависящий от github?

Возможно, кто-то неправильно настроил свои скрипты на AWS. @everyone, пожалуйста, помогите проверить ваши экземпляры, пока мы найдем альтернативу распространению данных

Привет, Лилинг,
Мы не можем сообщить конкретные цифры, однако запросы поступают от большого количества экземпляров AWS. Мы подозреваем, что это может быть неправильный сценарий или процесс сборки. Мы не знаем ничего, кроме этого.
Привет, Джейми

Что ж, облегчение, я не использую AWS.

: с облегчением:

Что касается кода, возможно, нам нужно изменить частоту обновления одного и того же пакета из nltk downloader.py. В противном случае, независимо от того, на какой канал распространения мы перейдем, произойдет одно и то же нарушение обслуживания.

Может, что-нибудь с торрент подойдет?

Не уверен, на что похожа лицензия, но вы можете сделать их общедоступными на s3: https://aws.amazon.com/datasets/

@alvations, похоже, /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/

Есть ли у нас временное решение?

@darshanlol @alvations упомянул решение. Если вы пытаетесь создать докер, у меня сработало следующее:

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/

Я пытаюсь изменить URL-адрес по умолчанию в nltk.downloader.py, но проблема все еще существует.

Предлагаемый способ решения проблемы больше не работает:

python -m nltk.downloader -u https://pastebin.com/raw/D3TBY4Mj все

На данный момент это единственное рабочее решение:

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

Как сказал @alvations, это единственное рабочее решение.

PATH_TO_NLTK_DATA = / home / имя пользователя / nltk_data /wget https://github.com/nltk/nltk_data/archive/gh-pages.zipразархивировать gh-pages.zipmv nltk_data-gh-pages / $ PATH_TO_NLTK_DATA

Но даже после загрузки всех страниц я столкнулся с проблемами, поскольку мой загрузчик NLTK не смог обнаружить все загруженные пакеты, для чего вам, возможно, придется вручную изменить значение каталога загрузки с помощью команды.

На этой странице есть правильная команда, которую я использовал для настройки пакетов данных NLTK.

Нажмите на ссылку выше, чтобы ответить.

Вот несколько предложений по решению этой проблемы после чтения и поиска альтернатив.

Сделайте корпуса доступными

  • Во-первых, мы изменим его так, чтобы все nltk_data доступны для pip. (Таким образом, каждая новая среда потребует установки нового пакета, и мы больше не полагаемся на физический каталог)
  • Нам также нужно будет отслеживать какой-то индекс для загрузки, чтобы получать и отслеживать версии.
  • Затем нам также необходимо провести капитальный ремонт кода, файла downloader.py и всего связанного интерфейса считывателя корпуса.

  • Возможно, ограничения pip (со стороны PyPI) могут остановить мошеннических пользователей / машины с высокочастотными запросами.

Размещение данных на S3 / Zenodo или каком-либо частном хосте

Для этого нам потребуется просто повторно связать ссылки в index.xml с соответствующими ссылками. После настройки отдельных файлов на веб-хостинге.

Но если трафик остается высоким из-за того, что какой-то скрипт установки / автоматизации пошёл не так, мы в конечном итоге переключаем одного поставщика услуг на другого.


Есть другие предложения?
Любая храбрая душа, которая захочет взяться за это?

@ harigovind511 , да, вам нужно либо поместить загруженную папку nltk_data в одно из стандартных мест, где nltk знает, как ее искать, либо добавить в nltk.data.path чтобы указать, где искать. Автоматический загрузчик просто ищет стандартное место.

Ограничение скорости / решение для мошеннических машин, вероятно, необходимо, чтобы это снова не подняло свою уродливую голову. Я бы проголосовал за pip, если нет проблем (или табу) с большими пакетами на pip?

Использование pip также решит проблему ручного nltk.download () и управления пакетами в коде.

Файлы кажутся резервными? Однако представляется разумным продолжать поиск альтернативных механизмов распространения. В моей собственной организации мы планируем перейти на внутренний хостинг и регистрироваться ежеквартально.

Я хотел бы понять, что делает $ PATH_TO_NLTK_DATA. Настраивает ли он альтернативный локальный URL-адрес загрузки для того, где NLTK получает данные?

Я хотел бы настроить локальный кеш данных NLTK, поэтому мне было интересно, говорит ли установка этого параметра NLTK работать в автономном режиме?

Поскольку корнем проблемы является злоупотребление пропускной способностью, кажется плохой идеей рекомендовать ручное извлечение всего дерева nltk_data в качестве временного решения. Как насчет того, чтобы показать нам, как идентификаторы ресурсов сопоставляются с URL-адресами, @alvations , чтобы я мог, например, wget только пакет punkt ?

Я считаю, что долгосрочное решение состоит в том, чтобы сделать менее тривиальным для начинающих пользователей получение всего пакета данных (638 МБ сжатых, когда я проверял). Вместо того, чтобы организовывать (и оплачивать) дополнительную полосу пропускания, чтобы тратить ее на бессмысленные загрузки, прекратите предоставлять "all" в качестве варианта загрузки; документация должна вместо этого показывать невнимательному разработчику сценариев, как загрузить определенные ресурсы, которые им нужны. А пока откажитесь от привычки писать nltk.download("all") (или эквивалент) в качестве образца или рекомендуемого использования в stackoverflow (я смотрю на вас, @alvations) и в строках документации загрузчика. (Для изучения nltk, nltk.dowload("book") , а не "all" , столь же полезен и намного меньше.)

В настоящее время сложно понять, какой ресурс нужно скачать; если я установлю nltk и попробую nltk.pos_tag(["hello", "friend"]) , не будет способа сопоставить сообщение об ошибке с идентификатором ресурса, который я могу передать в nltk.download(<resource id>) . В таких случаях загрузка всего - очевидный обходной путь. Если в таких случаях можно исправить nltk.data.load() или nltk.data.find() для поиска идентификатора ресурса, я думаю, вы увидите, что использование nltk_data значительно снизится в долгосрочной перспективе.

@zxiiro $PATH_TO_NLTK_DATA не имеет значения для nltk, это просто переменная в примере скрипта. Переменная окружения $NLTK_DATA имеет особое значение. См. Http://www.nltk.org/data.html , все параметры объяснены.

@alexisdimi согласился на nltk.download('all') . Извините, что это был такой старый ответ из моих ранних дней. Я бы посоветовал этого не делать. Вместо этого я изменил ответ SO на nltk.download('popular') : https://stackoverflow.com/questions/22211525/how-do-i-download-nltk-data

Одна из проблем с wget непосредственно с пакетом заключается в том, что он по-прежнему полагается на необработанный контент на github. Во время простоя ссылка https://github.com/nltk/nltk_data/blob/gh-pages/packages/tokenizers/punkt.zip также приводила к ошибке 403/405.

Таким образом, работа заключалась в загрузке всего дерева git. Оглядываясь назад, это может быть не самой хорошей идеей.

Похоже, локаут сняли, это здорово! Теперь я надеюсь, что есть какие-то тикеты, которые помогут предотвратить подобные проблемы в будущем (возможно, в соответствии с предложенными мной направлениями, а может и нет).

(Следует ли, кстати, отметить _эту_ проблему пометкой «Закрыта», теперь, когда загрузки снова работают?)

@alexisdimi размещение предупреждений, предлагающих пользователям загрузить соответствующие модели, является хорошей идеей.

Для тех, кто использует NLTK в среде CI. Я хотел бы предложить GH-1795, который позволяет указать альтернативный URL для загрузки. Идея здесь в том, что можно настроить локальную копию nltk_data на веб-сервере (или даже python -m http.server), а затем иметь глобальную переменную, которая может переопределить URL-адрес загрузки.

Это сделано для того, чтобы мы могли без изменения вызовов локальных команд проекта включить -u из системы CI, такой как Jenkins.

Вопрос к Github относительно распределения данных pip с использованием релизов и установки pip:

Спасибо, Джейми, за поддержку!

Мы ищем альтернативы для размещения nltk_data, и одна из них - разместить их как выпуски репозитория, как это делает SpaCy https://github.com/explosion/spacy-models/releases

Могли бы мы просто уточнить у вас, будет ли выполняться тот же блок, если бы к выпускам репозитория были сделаны похожие высокочастотные запросы? Или выпуски репозитория обрабатываются иначе, чем необработанный контент на Github?

С Уважением,
Лилинг

Некоторые обновления на стороне Github:

Привет, Лилинг,

Использование Releases просто перемещает запросы в другую часть нашей инфраструктуры. Если бы этот объем полосы пропускания снова заработал, нам все равно пришлось бы блокировать эти запросы, даже если бы они относились к выпускам.

Мы пытались придумать, как можно было бы оставить пакеты данных на GitHub, но, честно говоря, нет хорошего решения. Мы просто не настроены на то, чтобы быть CDN большого объема.

Привет,
Джейми

@owaaa / @zxiiro +1 на внутреннем хостинге для CI. Мы делаем это сейчас, и преимущество для пользователей EC2 / S3 состоит в том, что вы можете разместить данные (или их часть, которая вам нужна) близко к тому месту, где вы хотите построить машины. Если вы находитесь в разных зонах доступности, вы можете просто реплицировать сегменты там, где вам нужно, и быть более устойчивыми к тому, что происходит за пределами AWS.

@alvations Мне очень нравится идея _data / как package_ в spaCy, но одним из последствий является то, что если вы используете virtualenv , ваши каталоги среды могут увеличиваться в размере, поскольку ваши пакеты живут там. Конечно, при этом вы покупаете полностью изолированные и проверяемые версии данных / моделей, что ценно для проекта с частыми обновлениями моделей, таких как spaCy, но не бесплатным обедом 😕

Была ли эта страница полезной?
0 / 5 - 0 рейтинги