Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 资源';语料库/wordnet';在Heroku上找不到_Python_Django_Heroku_Nltk_Wordnet - Fatal编程技术网

Python 资源';语料库/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

我想让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'

然而,我查看了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
文件夹。错误报告“无权限”,两种解决方案:

  • 向Mac系统添加其他权限更改,详细信息请参阅。但是,我不想只为这个语料库更改为mac默认设置。我选择第二种解决方案

    • 将语料库下载到您有权访问的任何目录`python-m nltk.downloader-d一些用户可访问的目录wordnet'。注意,这里您只下载所需的语料库,例如wordnet、reuters,而不是从nltk下载整个语料库
    • 将路径添加到nltk路径。在py文件中,添加以下行:

      导入nltk
      nltk.data.path.append('nltk\u data')

  • 更新 ,一个更简单的解决方案被添加到heroku python构建包中。将
    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应用程序上设置NLTK_数据环境变量

    $ heroku config:set NLTK_DATA='/app/nltk_data'
    
  • 部署到Heroku。您将在部署结束时看到
    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
    所在的根目录中即可。在您的代码中