>>> 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 :
任何意见,将不胜感激。
似乎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_data
都是可点子的。 (因此,每个新环境都需要安装新的pip,并且我们不再依赖物理目录)然后,我们还需要对代码,downloader.py和所有相关的语料库阅读器界面进行一些大修。
可能的pip
限制(从PyPI方面)可以阻止具有高频率请求的流氓用户/机器
这将需要我们简单地将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)但不是免费午餐的项目非常有价值😕
最有用的评论
@plaihonen,您应该可以通过执行类似
python -m nltk.downloader -u https://pastebin.com/raw/D3TBY4Mj punkt
来使用此替代索引