【问题标题】:How to install NLTK modules in Heroku如何在 Heroku 中安装 NLTK 模块
【发布时间】:2013-08-22 15:51:20
【问题描述】:

嘿,我想在我的 Heroku 服务器上安装 NLTK pos_tag。我怎么能这样做。请给我作为 Heroku 服务器系统新手的步骤。

【问题讨论】:

标签: python heroku nltk


【解决方案1】:

我刚刚在 buildpack 中添加了官方 nltk 支持!

只需添加一个nltk.txt 文件,其中包含您要安装的语料库列表,一切都会按预期工作。

【讨论】:

  • 什么是语料库??
【解决方案2】:

更新

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 数据。

  1. 在本地项目的根目录中创建bin 目录。

  2. 将您自己的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"
    
  3. 将您自己的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 averaged_perceptron_tagger corpora, 
    # so you may want to change for your specific needs.  
    # See http://www.nltk.org/data.html
    python -m nltk.downloader averaged_perceptron_tagger
    
    # 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"
    
  4. nltk 添加到您的requirements.txt 文件(如果您使用的是Textblob,则添加textblob)。

  5. 将所有这些更改提交到您的存储库。

  6. 在您的 heroku 应用上设置 NLTK_DATA 环境变量。

    $ heroku config:set NLTK_DATA='/app/nltk_data'
    
  7. 部署到 Heroku。您将在部署结束时看到 post_compile 步骤触发器,然后是 nltk 下载。

我希望这对您有所帮助!享受吧!

【讨论】:

  • 我在按照您的说明操作后收到此错误。 - 导入 bp_cli ImportError:没有名为 bp_cli 的模块!推送被拒绝,无法编译 Python 应用程序。 !推送失败
  • 嗨@Sainath。我不熟悉您的错误,但它似乎与 NLTK 无关。您的 requirements.txt 文件中可能缺少应用程序其他部分的一些要求。
  • 我也遇到了同样的错误。 @Sainath 你有没有想过如何解决它?
  • 想通了。我没有遵循最后一条指令:heroku config:set NLTK_DATA='/app/nltk_data'。这样做了,效果很好!
  • 重要提示:heroku python build pack v97 改变了行为,导致 nltk_data 目录被省略。请参阅github.com/heroku/heroku-buildpack-python/issues/356 进行修复。
【解决方案3】:

如果您想使用简单的功能,例如 pos_tag、tokenizer、词干提取等,那么您可以执行以下步骤

  1. 在 requirements.txt 中提及 nltk
  2. 在 nltk.txt 中提及以下模块
    • wordnet
    • 优点缺点
    • 路透社
    • hmm_treebank_pos_tagger
    • maxent_treebank_pos_tagger
    • universal_tagset
    • 朋克特
    • averaged_perceptron_tagger_ru
    • averaged_perceptron_tagger
    • 雪球数据
    • rslp
    • porter_test
    • vader_lexicon
    • 树库
    • dependency_treebank

【讨论】:

  • 停用词怎么样,只是“停用词”?
  • 您可以在 nltk.txt 文件中添加停用词。
  • 您是如何得出这份清单的?我只需要nltk.datanltk.word_tokenizenltk.post_tagnltk.sentiment。你知道在这种情况下我应该在nltk.txt 文件中包含什么吗?
  • 回答我自己...如果有人需要知道nltk.txt中提到的所需包,请查看heroku日志(转到网站中的应用>更多>查看日志),然后查看细节。例如。如果你缺少punkt,它会说:nltk.download('punkt'),所以你在nltk.txt等中添加punkt。我最终只需要punktvader_lexiconaveraged_perceptron_tagger
【解决方案4】:

您需要按照以下步骤操作。

  1. nltk.txt 需要出现在根文件夹中
  2. 将您要下载的模块(如 punkt、停用词)添加为单独的行项
  3. 将结尾的行从 windows 更改为 UNIX

更改行尾是非常重要的一步。可以通过 Sublime Text 或 Notepad++ 轻松完成。在 Sublime Text 中,可以从 View 菜单完成,然后是 Line Endings。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 2012-02-17
    • 2020-09-13
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2011-02-23
    相关资源
    最近更新 更多