Nltk: 无法下载NLTK数据:HTTP错误405/403

创建于 2017-07-26  ·  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 :

任何意见,将不胜感激。

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 :

〜这样做也可以:〜

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

即使有了备用索引,有人发现某些软件包仍然不起作用吗?

具体来说,对于我来说,停用词包给了我405,而其他(棕色,wordnet,punkt等)却没有。

是的,我也无法下载nltk停用词。 我执行> python -m nltk.downloader -u http://nltk.github.com/nltk_data/时收到405错误

嗨,我正在尝试运行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知道并且正在解决这个问题。 这是他们对我说的话:

抱歉,添麻烦了。 我们不得不阻止对nltk / nltk_data存储库及其派生文件的raw.githubusercontent.com URL的请求,因为过度使用会导致GitHub服务出现问题。 我们正在努力解决问题,但是很遗憾,我们目前无法允许这些请求。

是的,我也收到了:

嗨Li陵
我在GitHub的支持团队工作,我想通知您,我们不得不暂时阻止对alvations / nltk_data存储库从raw.githubusercontent.comURLs提供的文件的访问。 当前,用户正在消耗来自该存储库的大量带宽请求文件,而目前我们唯一的选择是阻止所有请求。 我们一直在积极致力于缓解问题的方法,并在有更新时与您联系。如有任何问题,请告知我们。
欢呼声

@ ewan-klein @stevenbird我认为我们需要一种新的方式来分发数据,但这需要对nltk.downloader.py进行一些修改。

一些建议:

看来,我们别无选择,只能更改数据分发渠道:

嗨Li陵
希望对此进行补充,并提供一些其他信息。 我们一直在内部讨论此问题,并且在可预见的将来,很有可能我们不会在nltk / nltk_data分支网络中恢复对存储库的原始访问。 问题在于,有许多计算机以很高的频率调用nltk.download()。 在该活动停止之前,我们无法恢复原始访问。请随时与nltk社区共享此消息。 我们希望执行此操作的任何人都会收到问题的警报,并停止执行此操作的任何进程。
干杯,杰米

有人会认为他们可以专门阻止这些IP。 但是也许还有更多。

我确实有一个可下载nltk_data的docker映像,但是我并不经常对其进行重建。 我希望我不是那些高流量的用户之一...

是否有不依赖github的安装过程?

也许有人在AWS上错误地配置了他们的脚本。 @每个人,当我们找到数据分发的替代方法时,请帮助检查您的实例

嗨Li陵
我们无法共享具体数字,但是请求来自大量的AWS实例。 我们怀疑这可能是脚本或构建过程出了问题。 除此之外,我们所知不多。
干杯,杰米

好吧,这很轻松,我不使用AWS。

:解除:

在代码方面,也许我们也必须更改从nltk downloader.py更新同一软件包的频率。 否则,无论我们迁移到哪个发行渠道,都将发生相同的服务中断。

也许基于种子的东西行得通吗?

不确定许可证是什么样的,但是您可以在s3上将其公开: https :

@alvations似乎仅适用于gzip下载。 程序包需要移动到/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提到了一个解决方案。 如果您尝试构建一个docker,以下对我有用:

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/

我尝试在'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中的链接重新链接到适当的链接。 在Web主机上设置单个文件之后。

但是,如果由于某些安装/自动化脚本出错而导致流量仍然很高,那么我们最终会将一个服务提供商与另一个服务提供商搞混了。


还有其他建议吗?
有勇气的人愿意承担这个责任吗?

@ harigovind511 ,是的,您必须将下载的nltk_data文件夹放在nltk知道要查找的标准位置之一中,或者追加到nltk.data.path告诉它要查找的位置。 自动下载器仅查找标准位置。

为防止流氓机器的速率限制/解决,可能有必要使它不再重蹈覆辙。 我的投票将是对pip的投票,除非pip上的大包装有任何问题(或禁忌)?

使用pip还可以解决手册nltk.download()和代码内包管理。

文件似乎备份了吗? 似乎明智的做法是继续寻求替代的分配机制。 不过,在我自己的组织中,我们计划转移到内部托管并每季度检查一次

我想了解$ PATH_TO_NLTK_DATA的作用。 是否为NLTK的数据配置备用本地下载URL?

我想设置NLTK数据的本地缓存,所以我想知道设置此项是否告诉NLTK脱机工作?

由于问题的根源是带宽滥用,建议您手动提取整个nltk_data作为解决方法,这似乎是一个糟糕的主意。 如何你告诉我们,资源ID如何映射到URL,@alvations,这样我就可以wget只是punkt束,例如?

我认为,长期的解决方案是使初学者获取整个数据包(当我检查时压缩为638MB)变得不那么琐碎。 与其安排(并支付)更多的带宽以浪费在无意义的下载上,不如提供"all"作为下载选项; 相反,文档应向不专心的脚本撰写者展示如何下载他们所需的特定资源。 同时,要避免在堆栈溢出(我看着你,@ alvations)和下载程序文档字符串中编写nltk.download("all") (或等效值)作为示例或推荐用法的习惯。 (对于探索nltk, nltk.dowload("book")而不是"all"一样有用并且要小得多。)

目前,很难确定需要下载哪些资源。 如果我安装nltk并尝试nltk.pos_tag(["hello", "friend"]) ,则无法将错误消息映射到可以传递给nltk.download(<resource id>)的资源ID。 在这种情况下,下载所有内容是显而易见的解决方法。 如果在这种情况下可以修补nltk.data.load()nltk.data.find()来查找资源ID,那么从长远来看,我认为您会看到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 :

wget直接传递给软件包的问题之一是,它仍然依赖github上的原始内容。 在停机期间, https://github.com/nltk/nltk_data/blob/gh-pages/packages/tokenizers/punkt.zip链接也导致403/405错误。

因此,解决方法是下载整个git树。 回想起来,这可能不是一个好主意。

看起来封锁已经解除,太好了! 现在,我希望将来有一些票证可以预防类似的问题(也许按照我的建议,也许不是)。

(顺便说一句,现在下载又可以正常工作了,应该将此问题标记为“已关闭”吗?)

@alexisdimi发出警告,建议用户下载适当的模型是一个好主意。

对于在CI环境中运行NLTK的用户。 我想提出GH-1795,它可以用来指定备用URL进行下载。 这里的想法是可以在Web服务器(甚至python -m http.server)上设置nltk_data的本地副本,然后拥有一个可以覆盖下载URL的全局变量。

这样一来,我们无需修改项目的本地命令即可覆盖Jenkins等CI系统中的-u

向Github询问有关使用发行版和pip安装进行pip数据分发的问题:

谢谢杰米的支持!

我们正在寻找替代方法来托管nltk_data,其中一种是像SpaCy一样将其作为存储库版本托管https://github.com/explosion/spacy-models/releases

如果对存储库版本进行类似的高频请求,我们是否可以与您一起检查是否将执行相同的块? 还是版本库版本与Github上的原始内容有所不同?

问候,
ling陵

Github方面的一些更新:

嗨Li陵

使用发布只是将请求移到我们基础架构的不同部分。 如果要再次启动该带宽,那么即使这些请求是Releases,我们仍然必须阻止这些请求。

我们尝试过考虑将数据包保留在GitHub上的一些方法,但是说实话,这不是一个好的解决方案。 我们只是没有设置成高容量CDN。

干杯,
杰米

@owaaa / @zxiiro +1内部托管CI。 我们现在正在这样做,对于EC2 / S3用户而言,优势在于您可以将数据(或其所需的子集)放置在要构建机器的位置附近。 如果您跨越可用区,则可以仅在需要的地方复制存储桶,并且对AWS外部发生的事情更加健壮。

@alvations我非常喜欢virtualenv ,则环境目录的大小会随着您的软件包所在位置的增加而增加。 当然,这可以为您购买完全隔离和可审核的数据/模型版本,这对于频繁更新模型(例如spaCy)但不是免费午餐的项目非常有价值😕

此页面是否有帮助?
0 / 5 - 0 等级