Python 资源';语料库/wordnet';在Heroku上找不到
我想让NLTK和wordnet在Heroku上工作。我已经做完了Python 资源';语料库/wordnet';在Heroku上找不到,python,django,heroku,nltk,wordnet,Python,Django,Heroku,Nltk,Wordnet,我想让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() S
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'
然而,我查看了in/app/nltk_数据,它就在那里,所以我不确定发生了什么。我也遇到了同样的问题。最终对我有用的是在应用程序文件夹中创建一个“nltk_data”目录,将语料库下载到该目录,并在我的代码中添加一行代码,让nltk知道如何在该目录中查找。您可以在本地完成这些操作,然后将更改推送到Heroku 因此,假设我的python应用程序位于名为“myapp/”的目录中 步骤1:创建目录
cd myapp/
mkdir nltk_data
python -m nltk.downloader
步骤2:将语料库下载到新目录
cd myapp/
mkdir nltk_data
python -m nltk.downloader
这将弹出nltk
下载程序。将您的下载目录设置为无论\u myapp\u的绝对路径是什么/nltk\u data/
。如果您使用的是GUI下载程序,则通过UI底部的文本字段设置下载目录。如果您使用的是命令行,那么可以在配置菜单中进行设置
一旦下载程序知道指向您新创建的nltk\u数据
目录,下载您的语料库
或者在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 stuff的python文件到nltk_数据目录的路径可能会有所不同,这取决于您构建应用程序的方式,所以在执行
nltk.data.path.append('path_to_nltk_data')
时,请考虑这一点。对于那些不在虚拟环境中工作的人,需要下载到ubuntu中的以下目录:
/usr/share/nltk_data/corpora/wordnet
而不是wordnet,它可以是棕色的或者其他的。
如果要下载语料库,可以在终端中直接运行此命令
$ sudo python -m nltk.downloader -d /usr/share/nltk_data wordnet
同样,它可以是棕色的,而不是wordnet。仅适用于Mac OS用户
python-m nltk.downloader-d/usr/share/nltk_data wordnet
语料库数据不能直接下载到/usr/share/nltk_data
文件夹。错误报告“无权限”,两种解决方案:
- 将语料库下载到您有权访问的任何目录`python-m nltk.downloader-d一些用户可访问的目录wordnet'。注意,这里您只下载所需的语料库,例如wordnet、reuters,而不是从nltk下载整个语料库李>
- 将路径添加到nltk路径。在py文件中,添加以下行:
导入nltk nltk.data.path.append('nltk\u data')
nltk.txt
文件添加到根目录,并在其中列出您的语料库。有关详细信息,请参阅
原始答案 这里有一个更干净的解决方案,允许您直接在Heroku上安装NLTK数据,而无需将其添加到git repo中 我使用类似的步骤在Heroku上安装,Heroku使用NLTK作为依赖项。在步骤3和步骤4中,我对我的原始代码做了一些小的调整,这些调整应该只适用于NLTK安装 默认heroku buildpack包括在所有默认构建步骤完成后运行的:
# 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
如您所见,它在您的项目目录中查找bin
目录中您自己的post\u compile
文件,如果它存在,它将运行它。您可以使用这个钩子来安装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"
# 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"
install_nltk_data
文件添加到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"
# 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 config:set NLTK_DATA='/app/nltk_data'
post_compile
step触发器,然后是nltk下载
我希望这对你有帮助!享受吧 Heroku现在正式支持NLTK数据,内置 这一款有效: 适用于Mac OS用户
python -m nltk.downloader -d /usr/local/share/nltk_data wordnet
在Heroku平台上部署聊天机器人时,我遇到了完全相同的问题。虽然Follorof的答案是一个简单的解决方案,但在许多情况下,存储库的大小会急剧增加
因此,我在app.py文件中使用了nltk.download('PACKAGE')。这样,每当运行app.py时,依赖项都会自动下载 我只能用这个解决方案来解决我的问题:
这是一个与SSL相关的变通方法。我知道这是一个老问题,但由于Heroku提供了对
nltk
的支持,所以“正确”的答案已经改变,我认为可能值得回答
Heroku现在支持nltk
。如果您需要下载nltk
(本例中为wordnet,或者可能是stopwords或语料库),只需将nltk.txt
文件包含在Procfile
和requirements.txt
所在的根目录中即可。在您的代码中