在 Heroku 上找不到资源“语料库/wordnet”
Posted
技术标签:
【中文标题】在 Heroku 上找不到资源“语料库/wordnet”【英文标题】:Resource 'corpora/wordnet' not found on Heroku 【发布时间】:2012-12-07 14:21:45 【问题描述】:我正在尝试让 NLTK 和 wordnet 在 Heroku 上运行。我已经完成了
heroku run python
nltk.download()
wordnet
pip install -r requirements.txt
但我收到此错误:
Resource 'corpora/wordnet' not found. Please use the NLTK
Downloader to obtain the resource: >>> nltk.download()
Searched in:
- '/app/nltk_data'
- '/usr/share/nltk_data'
- '/usr/local/share/nltk_data'
- '/usr/lib/nltk_data'
- '/usr/local/lib/nltk_data'
然而,我在 /app/nltk_data 中查看过,它就在那里,所以我不确定发生了什么。
【问题讨论】:
devcenter.heroku.com/articles/python-nltk 【参考方案1】:我遇到了同样的问题,我尝试了这个解决方案,它是有效的。我刚刚放了这些:
import nltk
nltk.download('wordnet')
在上面的代码中,它运行没有问题。 所以试试吧,也许对你有帮助。
【讨论】:
【参考方案2】:我遇到了同样的错误。 Fred Foo 的这个解决方法帮助我解决了这个问题 以下对我有用:
# 1) execute the below written code
# 2) a NLTK Download window will open
# 3) select "Corpora" tab and scroll down until "wordnet"
# 4) doubleclick to install
nltk.download()
from nltk.corpus import wordnet
Import WordNet In NLTK
【讨论】:
【参考方案3】:我知道这是一个老问题,但由于 Heroku 为nltk
提供支持,“正确”答案已经改变,我认为可能值得回答。
Heroku 现在支持nltk
。如果您需要下载 nltk
的内容(本例中为 wordnet,或者可能是停用词或语料库),您只需在您拥有 Procfile
和 @ 的同一根目录中包含一个 nltk.txt
文件即可。 987654327@。在您的nltk.txt
文件中列出您要下载的每个项目。对于我刚刚部署的项目,我需要停用词和 wordnet,所以我的 nltk.txt
看起来像这样:
stopwords
wordnet
非常简单。当然,请确保您在Pipfile
或requirements.txt
中指定了适当版本的nltk
。有关基本事实,请访问https://devcenter.heroku.com/articles/python-nltk。
【讨论】:
【参考方案4】:我只能用这个解决方案解决我的问题:
https://github.com/gunthercox/ChatterBot/issues/930#issuecomment-322111087
这是与 SSL 相关的解决方法。
【讨论】:
【参考方案5】:我在 Heroku 平台上部署聊天机器人时遇到了完全相同的问题。尽管来自 follyroof 的答案是一个万无一失的解决方案,但在许多情况下,存储库的大小会急剧增加。
所以,我在 app.py 文件中使用了 nltk.download('PACKAGE')。这样每当 app.py 运行时,依赖项就会自动下载。
【讨论】:
【参考方案6】:这个有效:
对于 Mac OS 用户。
python -m nltk.downloader -d /usr/local/share/nltk_data wordnet
【讨论】:
【参考方案7】:更新
As Kenneth Reitz pointed out,在 heroku-python-buildpack 中添加了一个更简单的解决方案。将nltk.txt
文件添加到您的根目录并在其中列出您的语料库。详情请见https://devcenter.heroku.com/articles/python-nltk。
原答案
这是一个更简洁的解决方案,允许您直接在 Heroku 上安装 NLTK 数据,而无需将其添加到您的 git 存储库中。
我使用类似的步骤在 Heroku 上安装 Textblob,它使用 NLTK 作为依赖项。我在第 3 步和第 4 步中对我的原始代码进行了一些小调整,这些调整应该适用于仅 NLTK 的安装。
默认的 heroku buildpack 包含一个 post_compile
step,它在所有默认构建步骤完成后运行:
# post_compile
#!/usr/bin/env bash
if [ -f bin/post_compile ]; then
echo "-----> Running post-compile hook"
chmod +x bin/post_compile
sub-env bin/post_compile
fi
如您所见,它会在您的项目目录中查找您自己的post_compile
文件,该文件位于bin
目录中,如果存在则运行它。你可以使用这个钩子来安装 nltk 数据。
在本地项目的根目录中创建bin
目录。
将您自己的post_compile
文件添加到bin
目录。
# bin/post_compile
#!/usr/bin/env bash
if [ -f bin/install_nltk_data ]; then
echo "-----> Running install_nltk_data"
chmod +x bin/install_nltk_data
bin/install_nltk_data
fi
echo "-----> Post-compile done"
将您自己的install_nltk_data
文件添加到bin
目录。
# bin/install_nltk_data
#!/usr/bin/env bash
source $BIN_DIR/utils
echo "-----> Starting nltk data installation"
# Assumes NLTK_DATA environment variable is already set
# $ heroku config:set NLTK_DATA='/app/nltk_data'
# Install the nltk data
# NOTE: The following command installs the wordnet corpora,
# so you may want to change for your specific needs.
# See http://www.nltk.org/data.html
python -m nltk.downloader wordnet
# If using Textblob, use this instead:
# python -m textblob.download_corpora lite
# Open the NLTK_DATA directory
cd $NLTK_DATA
# Delete all of the zip files
find . -name "*.zip" -type f -delete
echo "-----> Finished nltk data installation"
将nltk
添加到您的requirements.txt
文件(如果您使用的是Textblob,则添加textblob
)。
将所有这些更改提交到您的存储库。
在您的 heroku 应用上设置 NLTK_DATA 环境变量。
$ heroku config:set NLTK_DATA='/app/nltk_data'
部署到 Heroku。您将在部署结束时看到post_compile
步骤触发器,然后是 nltk 下载。
希望对您有所帮助!享受吧!
【讨论】:
按原样,每次部署应用程序时,解决方案都会加载 nltk_data,这可能会很长。有必要吗? 根据我的经验,如果只安装所需的 nltk 数据,额外的部署时间可以忽略不计。对于这个特定的问题,每次部署都安装 wordnet 会非常快。即使您需要少量数据包,它仍然很有效。只是不要尝试安装所有的 nltk 数据,你应该适合大多数用例。 太棒了 .. 加 1 用于建议 buildpacks :) 我真的很想知道为什么这还没有好票!! @Jean-ClaudeMoissinac 您可以轻松地保持检查 nltk 是否已安装的条件。并且只有在没有安装时才安装。 很好的答案!我一直在寻找解决方案,这是迄今为止最好的解决方案。【参考方案8】:Heroku 现在正式支持内置的 NLTK 数据!
https://devcenter.heroku.com/articles/python-nltk
【讨论】:
【参考方案9】:我也遇到了同样的问题。最终为我工作的是在应用程序的文件夹本身中创建一个“nltk_data”目录,将语料库下载到该目录并在我的代码中添加一行,让 nltk 知道在该目录中查找。您可以在本地完成所有这些操作,然后将更改推送到 Heroku。
所以,假设我的 python 应用程序位于一个名为“myapp/”的目录中
第 1 步:创建目录
cd myapp/
mkdir nltk_data
第 2 步:将语料库下载到新目录
python -m nltk.downloader
这将弹出nltk
下载器。将您的下载目录设置为whatever_the_absolute_path_to_myapp_is/nltk_data/
。如果您使用的是 GUI 下载器,下载目录是通过 UI 底部的文本字段设置的。如果您使用的是命令行一,则在配置菜单中进行设置。
一旦下载器知道指向您新创建的nltk_data
目录,下载您的语料库。
或从 Python 代码一步完成:
nltk.download("wordnet", "whatever_the_absolute_path_to_myapp_is/nltk_data/")
第 3 步:让 nltk 知道去哪里寻找
ntlk
查找数据、资源等。在nltk.data.path
变量中指定的位置。您需要做的就是将nltk.data.path.append('./nltk_data/')
添加到实际使用nltk 的python 文件中,它会在其中查找语料库、标记器等,以及默认路径。
第 4 步:将其发送到 Heroku
git add nltk_data/
git commit -m 'super useful commit message'
git push heroku master
应该可以!无论如何,它对我有用。值得注意的一点是,从执行 nltk 内容的 python 文件到 nltk_data 目录的路径可能会有所不同,具体取决于您构建应用程序的方式,所以当您执行 nltk.data.path.append('path_to_nltk_data')
【讨论】:
如果您想在 Heroku 上安装 NLTK 数据而不将其添加到您的 git 存储库中,请参阅下面的解决方案:***.com/a/37558445/387337 对我来说关键是添加 nltk.data.path.append('./nltk_data/')。谢谢!【参考方案10】:仅适用于 Mac OS 用户。
python -m nltk.downloader -d /usr/share/nltk_data wordnet
语料库数据不能直接下载到/usr/share/nltk_data
文件夹。报错“无权限”,两种解决方法:
增加Mac系统额外权限变更,详情参考Operation Not Permitted when on root El capitan (rootless disabled)。但是,我不想仅为这个语料库更改为 mac 默认设置。我选择第二种解决方案。
将语料库下载到您有权访问的任何目录。 `python -m nltk.downloader -d some_user_accessable_directory wordnet'。请注意,您只下载所需的语料库,例如 wordnet、reuters,而不是从 nltk 下载整个语料库。将路径添加到 nltk 路径。在 py 文件中,添加以下行:
import nltk
nltk.data.path.append('nltk_data')
【讨论】:
【参考方案11】:我遇到了这个问题。不在虚拟环境下工作的朋友,需要下载到ubuntu的以下目录:
/usr/share/nltk_data/corpora/wordnet
它可以是棕色的,而不是 wordnet。 如果您想下载语料库,可以直接在终端中运行此命令。
$ sudo python -m nltk.downloader -d /usr/share/nltk_data wordnet
同样,它可能是棕色的,而不是 wordnet。
【讨论】:
以上是关于在 Heroku 上找不到资源“语料库/wordnet”的主要内容,如果未能解决你的问题,请参考以下文章
rails 应用程序在 heroku 上找不到 fontawesome 图标
在 Heroku 上找不到 Django 静态文件(带白噪声)