24

Heroku で NLTK と wordnet を動作させようとしています。私はすでにやった

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

4

11 に答える 11

62

私はちょうどこれと同じ問題を抱えていました。私にとってうまくいったのは、アプリケーションのフォルダー自体に「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 コードから 1 ステップで:

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

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

于 2013-02-14T07:02:50.543 に答える
6

アップデート

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ステップが含まれています。

# 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 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. ファイルに追加nltkしますrequirements.txt(またはtextblob、Textblob を使用している場合)。

  5. これらすべての変更をリポジトリにコミットします。

  6. heroku アプリで NLTK_DATA 環境変数を設定します。

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

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

于 2016-06-01T02:26:45.447 に答える
4

Mac OS ユーザーのみ。

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

/usr/share/nltk_dataコーパス データをフォルダに直接ダウンロードすることはできません。エラーは「権限がありません」と報告します。2 つの解決策:

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

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

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

于 2016-02-26T03:26:48.723 に答える
2

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

/usr/share/nltk_data/corpora/wordnet

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

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

繰り返しますが、wordnet の代わりに茶色である可能性があります。

于 2016-01-13T20:28:02.063 に答える
1

これは古い質問であることは承知していますが、Heroku がサポートを提供したおかげで「正しい」答えが変わったので、nltk答える価値があるかもしれないと思いました。

Heroku が をサポートするようになりnltkました。何かをダウンロードする必要がある場合(この例ではワードネット、またはおそらくストップワードまたはコーパス)、とがある同じルート ディレクトリにファイルnltkを含めるだけで実行できます。ファイルには、ダウンロードしたい各アイテムをリストします。展開したばかりのプロジェクトでは、ストップワードとワードネットが必要だったので、次のようになります。nltk.txtProcfilerequirements.txtnltk.txtnltk.txt

stopwords

wordnet

かなり簡単です。そしてもちろん、 または で指定された の適切なバージョンがあることを確認しnltkてください。グラウンド トゥルースについては、https://devcenter.heroku.com/articles/python-nltkにアクセスしてください。Pipfilerequirements.txt

于 2020-06-14T07:54:06.980 に答える