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を調べたところ、そこにあるので、何が起こっているのかわかりません。
私はこれと同じ問題を抱えていました。最終的に私のために働いたのは、アプリケーションのフォルダー自体に「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')
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データをインストールできます。
ローカルプロジェクトのルートに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'
post_compile
ステップトリガーが表示され、その後にnltkダウンロードが続きます。これがお役に立てば幸いです。楽しい!
Mac OSユーザーのみ。
_python -m nltk.downloader -d /usr/share/nltk_data wordnet
_
コーパスデータを_/usr/share/nltk_data
_フォルダーに直接ダウンロードすることはできません。エラーは「許可なし」を報告し、2つの解決策:
Macシステムに追加の権限変更を追加します。詳細は ルートEl capitanでの操作は許可されていません(ルートレス無効) を参照してください。ただし、このコーパスのためだけにMacのデフォルト設定に変更したくありません。と私は2番目の解決策に行きます。
Nltkパスにパスを追加します。 pyファイルに次の行を追加します。
import nltk nltk.data.path.append('nltk_data')
この問題が発生していました。仮想環境で作業していない人は、ubuntuの次のディレクトリにダウンロードする必要があります。
/usr/share/nltk_data/corpora/wordnet
ワードネットの代わりに、それは茶色か何でもかまいません。コーパスをダウンロードする場合は、端末でこのコマンドを直接実行できます。
$ Sudo python -m nltk.downloader -d /usr/share/nltk_data wordnet
繰り返しになりますが、wordnetの代わりに茶色にすることもできます。
これはうまくいきます:
Mac OSユーザー向け。
python -m nltk.downloader -d /usr/local/share/nltk_data wordnet
Herokuが組み込みのNLTKデータを正式にサポートするようになりました!
Herokuプラットフォームにチャットボットをデプロイしているときにも、まったく同じ問題に直面しました。 follyroofからの答えは間違いのないソリューションですが、多くの場合、リポジトリのサイズは大幅に増加します。
そこで、app.pyファイルでnltk.download( 'PACKAGE')を使用しました。これにより、app.pyが実行されるたびに、依存関係が自動的にダウンロードされます。