我正在努力让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中查看过了,所以我不知道发生了什么。
答案 0 :(得分:53)
我刚遇到同样的问题。最终为我工作的是在应用程序的文件夹中创建一个'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底部的文本字段设置下载目录。如果您正在使用命令行1,则在配置菜单中进行设置。
一旦下载者知道指向您新创建的nltk_data
目录,请下载您的语料库。
或者从Python代码中迈出一步:
nltk.download("wordnet", "whatever_the_absolute_path_to_myapp_is/nltk_data/")
第3步:让nltk知道在哪里看
ntlk
查找数据,资源等。在nltk.data.path
变量中指定的位置。您需要做的就是使用nltk将nltk.data.path.append('./nltk_data/')
添加到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')
答案 1 :(得分:4)
仅适用于Mac OS用户。
python -m nltk.downloader -d /usr/share/nltk_data wordnet
语料库数据无法直接下载到/usr/share/nltk_data
文件夹。错误报告"没有许可",两个解决方案:
向Mac系统添加其他权限更改,详情请参阅mixed content。但是,我不想仅为此语料库更改为mac默认设置。然后我去寻找第二个解决方案。
添加路径到nltk路径。在py文件中,添加以下行:
import nltk
nltk.data.path.append('nltk_data')
答案 2 :(得分:3)
As Kenneth Reitz pointed out,一个更简单的解决方案已被添加到heroku-python-buildpack中。将nltk.txt
文件添加到根目录并在其中列出您的语料库。有关详细信息,请参阅https://devcenter.heroku.com/articles/python-nltk。
这是一个更简洁的解决方案,允许您直接在Heroku上安装NLTK数据,而无需将其添加到您的git仓库。
我使用类似的步骤在Heroku上安装Textblob,Heroku使用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'
post_compile
步骤触发器,然后是nltk下载。我希望你发现这有用!享受!
答案 3 :(得分:2)
我遇到了这个问题。对于那些不在虚拟环境中工作的人,需要下载到ubuntu中的以下目录:
/usr/share/nltk_data/corpora/wordnet
而不是wordnet它可能是棕色或其他什么。 如果要下载语料库,可以在终端中直接运行此命令。
$ sudo python -m nltk.downloader -d /usr/share/nltk_data wordnet
再次代替wordnet,它可能是棕色的。
答案 4 :(得分:1)
Heroku现在正式支持内置的NLTK数据!
答案 5 :(得分:1)
这个有效:
适用于Mac OS用户。
python -m nltk.downloader -d /usr/local/share/nltk_data wordnet
答案 6 :(得分:0)
在Heroku平台上部署聊天机器人时,我遇到了完全相同的问题。尽管天窗的答案是一个万无一失的解决方案,但是在许多情况下,存储库的大小将急剧增加。
因此,我在app.py文件中使用了nltk.download('PACKAGE')。这样,无论何时运行app.py,都将自动下载依赖项。
答案 7 :(得分:0)
我只能用此解决方案解决问题:
https://github.com/gunthercox/ChatterBot/issues/930#issuecomment-322111087
这是与SSL相关的解决方法。
答案 8 :(得分:0)
我知道这是一个老问题,但是由于Heroku对nltk
的支持,“正确”的答案已经改变,我认为可能值得回答。
Heroku现在支持nltk
。如果您需要下载nltk
的内容(在此示例中为wordnet,或者可能是停用词或语料库),则只需在您的{ {1}}和nltk.txt
。在Procfile
文件中,列出要下载的每个项目。对于刚刚部署的项目,我需要停用词和wordnet,因此我的requirements.txt
如下所示:
nltk.txt
非常简单。并且,当然,请确保您在nltk.txt
或stopwords
wordnet
中指定了正确的nltk
版本。有关基本事实,请访问https://devcenter.heroku.com/articles/python-nltk。
答案 9 :(得分:0)
我遇到了同样的错误。 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