web-dev-qa-db-ja.com

Herokuにリソース「corpora / wordnet」が見つかりません

HerokuでNLTKとワードネットを動作させようとしています。もうやった

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を調べたところ、そこにあるので、何が起こっているのかわかりません。

22
user1881006

私はこれと同じ問題を抱えていました。最終的に私のために働いたのは、アプリケーションのフォルダー自体に「nltk_data」ディレクトリを作成し、そのディレクトリにコーパスをダウンロードし、nltkがそのディレクトリを参照できるようにするコードに行を追加することです。これをすべてローカルで実行してから、変更をHerokuにプッシュできます。

したがって、my python applicationが「myapp /」というディレクトリにあると仮定します

ステップ1:ディレクトリを作成する

_cd myapp/
mkdir nltk_data
_

ステップ2:コーパスを新しいディレクトリにダウンロード

_python -m nltk.downloader
_

nltkダウンローダーが表示されます。 Download Directoryを_whatever_the_absolute_path_to_myapp_is/nltk_data/_に設定します。 GUIダウンローダーを使用している場合、ダウンロードディレクトリはUIの下部にあるテキストフィールドで設定されます。コマンドラインを使用している場合は、configメニューで設定します。

ダウンローダーが新しく作成した_nltk_data_ディレクトリを指すことがわかったら、コーパスをダウンロードします。

またはPythonコードからの1ステップで:

_nltk.download("wordnet", "whatever_the_absolute_path_to_myapp_is/nltk_data/")
_

ステップ3:nltkに参照先を知らせます

ntlkは、データ、リソースなどを探します。 _nltk.data.path_変数で指定された場所。実際にnltkを使用してpythonファイルにnltk.data.path.append('./nltk_data/')を追加するだけで、デフォルトパスに加えてコーパス、トークナイザーなどが検索されます。

ステップ4:Herokuに送信

_git add nltk_data/
git commit -m 'super useful commit message'
git Push heroku master
_

それはうまくいくはずです!とにかくそれは私のためにした。注目に値することの1つは、python nltkを実行するファイルからnltk_dataディレクトリへのパスは、アプリケーションの構成方法によって異なる可能性があるため、実行するときにそれを考慮に入れることですnltk.data.path.append('path_to_nltk_data')

55
follyroof

更新

Kenneth Reitzが指摘したように より簡単なソリューションがheroku-python-buildpackに追加されました。 nltk.txtファイルをルートディレクトリに追加し、内部にコーパスをリストします。詳細は https://devcenter.heroku.com/articles/python-nltk を参照してください。


元の回答

これは、NLTKデータをgitリポジトリに追加せずにHerokuに直接インストールできる、よりクリーンなソリューションです。

同様の手順を使用して、依存関係としてNLTKを使用するHerokuに Textblob をインストールしました。手順3および4で、NLTKのみのインストールで機能するはずの元のコードにいくつかのマイナーな調整を加えました。

デフォルトのherokuビルドパックには 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

ご覧のように、プロジェクトディレクトリでbinディレクトリにある独自のpost_compileファイルを探し、ファイルが存在する場合はそれを実行します。このフックを使用して、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 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"
    
  4. nltkrequirements.txtファイルに追加します(Textblobを使用している場合はtextblob)。

  5. これらの変更をすべてリポジトリにコミットします。
  6. HerokuアプリでNLTK_DATA環境変数を設定します。

    $ heroku config:set NLTK_DATA='/app/nltk_data'
    
  7. Herokuにデプロイします。デプロイメントの最後にpost_compileステップトリガーが表示され、その後にnltkダウンロードが続きます。

これがお役に立てば幸いです。楽しい!

4

Mac OSユーザーのみ。

_python -m nltk.downloader -d /usr/share/nltk_data wordnet_

コーパスデータを_/usr/share/nltk_data_フォルダーに直接ダウンロードすることはできません。エラーは「許可なし」を報告し、2つの解決策:

  1. Macシステムに追加の権限変更を追加します。詳細は ルートEl capitanでの操作は許可されていません(ルートレス無効) を参照してください。ただし、このコーパスのためだけにMacのデフォルト設定に変更したくありません。と私は2番目の解決策に行きます。

    • アクセスできる任意のディレクトリにコーパスをダウンロードします。 `python -m nltk.downloader -d some_user_accessable_directory wordnet '。なお、nltkからコーパス全体をダウンロードするのではなく、必要なコーパス(wordnetなど)のみをダウンロードします。
    • Nltkパスにパスを追加します。 pyファイルに次の行を追加します。

      import nltk nltk.data.path.append('nltk_data')

4
HappyCoding

この問題が発生していました。仮想環境で作業していない人は、ubuntuの次のディレクトリにダウンロードする必要があります。

/usr/share/nltk_data/corpora/wordnet

ワードネットの代わりに、それは茶色か何でもかまいません。コーパスをダウンロードする場合は、端末でこのコマンドを直接実行できます。

$ Sudo python -m nltk.downloader -d /usr/share/nltk_data wordnet

繰り返しになりますが、wordnetの代わりに茶色にすることもできます。

2
Gaurav Anand

これはうまくいきます:

Mac OSユーザー向け。

python -m nltk.downloader -d /usr/local/share/nltk_data wordnet
2
Joolah

Herokuが組み込みのNLTKデータを正式にサポートするようになりました!

https://devcenter.heroku.com/articles/python-nltk

1
Kenneth Reitz

Herokuプラットフォームにチャットボットをデプロイしているときにも、まったく同じ問題に直面しました。 follyroofからの答えは間違いのないソリューションですが、多くの場合、リポジトリのサイズは大幅に増加します。

そこで、app.pyファイルでnltk.download( 'PACKAGE')を使用しました。これにより、app.pyが実行されるたびに、依存関係が自動的にダウンロードされます。

0
Scid