Python 3.5: URL-адрес загрузки NLTK по умолчанию не изменится

#python #nltk

#python #nltk

Вопрос:

Я обновил DEFAULT_URL в downloader.py и я все еще получаю следующую ошибку. Изначально я пробовал только nltk.downloader(), и файловый браузер обновился, но когда я попытался загрузить, он все равно вернулся на сайт github.

 DEFAULT_URL = 'http://nltk.org/nltk_data/'
  

.

 import nltk
nltk.set_proxy('proxyaddress',user=None)
dl = nltk.downloader.Downloader("http://nltk.org/nltk_data/")
dl.download('all')

[nltk_data] Downloading collection 'all'
[nltk_data]    |
[nltk_data]    | Downloading package abc to C:nltk_data...
[nltk_data]    | Error downloading 'abc' from
[nltk_data]    |     <https://raw.githubusercontent.com/nltk/nltk_data
[nltk_data]    |     /gh-pages/packages/corpora/abc.zip>:   <urlopen
[nltk_data]    |     error [Errno 11004] getaddrinfo failed>
  

Почему это по-прежнему по умолчанию raw.githubusercontent.com/nltk/nltk_data ?

Комментарии:

1. Переопределять не нужно DEFAULT_URL . Он игнорируется, когда вы инициализируете загрузчик своим собственным URL-адресом, как вы это делаете. В любом случае я не могу воспроизвести вашу проблему: для меня это работает так, как ожидалось. Может ли ваш прокси-сервер вызывать проблему?

2. @alexis это был мой прокси. Я попробовал еще раз, когда вышел из своего офиса, и все сработало нормально. Я использовал тот же прокси-сервер во многих других ситуациях, поэтому мне интересно, работает ли функция «set_proxy» не совсем правильно.

3. set_proxy просто вызывает urllib.request.build_opener и install_opener , которые изменяют обработку URL. Проблема, должно быть, связана с вашим прокси.

4. Я использовал «pip install —proxy= example.com:83 packagename» бесчисленное количество раз. Почему это будет работать, но не для nltk?

5. Понятия не имею. Я могу только догадываться, что это как-то связано с кэшированием прокси. Или, может быть, это не прокси, а логическая ошибка в части вашего кода, которая не попала в фрагмент вашего вопроса (если прокси установлен условно, есть место для ошибок).

Ответ №1:

Проблема возникает из-за вашего прокси. Я не могу сказать, что не так с вашей конфигурацией прокси, но инициализация загрузчика с помощью пользовательского URL-адреса загрузки работает так, как задумано (нет необходимости изменять исходный код nltk в nltk/downloader.py ):

 dl = nltk.downloader.Downloader("http://example.com/my_corpus_data/index.xml")
  

Обратите внимание, что пользовательский URL-адрес должен разрешаться в XML-документе, описывающем загружаемые ресурсы, в формате, ожидаемом nltk ; код в вашем вопросе указывает на удобочитаемый список at http://nltk.org/nltk_data , что просто приведет к ошибке. (Предположительно, ваш реальный код использует другой URL-адрес и другой код для настроек прокси-сервера.)

В любом случае проблема должна быть в вашем прокси или в том, как вы его используете. Функция nltk set_proxy просто вызывает пару функций из urllib.request , чтобы объявить прокси. Он никогда не приближается downloader к модулю nltk, поэтому он никак не может повлиять на настройки загрузчика по умолчанию.

Комментарии:

1. Я согласен, что это мой прокси, поскольку, как только я покинул эту среду, он сработал. Однако меня смущает, как другие утилиты, такие как R, CPAN client, pip и некоторые другие, работают с использованием одного и того же прокси addr:port.