在 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

非常简单。当然,请确保您在Pipfilerequirements.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”的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 上找不到类“Memcached”

rails 应用程序在 heroku 上找不到 fontawesome 图标

错误:在 Heroku 上找不到模块 Discord.js

在 Heroku 上找不到 Django 静态文件(带白噪声)

如何解决 vue-cli-service: 在heroku 上找不到问题?

package.json 启动脚本,babel-node:在 heroku deploy 上找不到