前提・実現したいこと
GAE(GoogleAppEngine)でnltkを使用したpythonのスクリプトを実行したいと思っています。
発生している問題・エラーメッセージ
どうやらnltkに使用するデータが見つからないようです。
LookupError at find (/layers/google.python.pip/pip/lib/python3.8/site-packages/nltk/data.py:583) at __load (/layers/google.python.pip/pip/lib/python3.8/site-packages/nltk/corpus/util.py:83)
該当のソースコード
python
1def get_key_phrase(text, n=5): 2 """キーフレーズ処理 3 Args: 4 text ([type]): キーフレーズ対象の文字列 5 n (int, optional): [description]. Defaults to 10. 6 gc_collect (bool, optional): [description]. Defaults to False. 7 8 Returns: 9 [type]: [description] 10 """ 11 from spacy.lang.ja import stop_words 12 import ginza # pip install ginza 13 import nltk # pip install nltk 14 nltk.data.path.append("[アプリ名]/nltk_data") 15 import spacy 16 import pke # pip install git+https://github.com/boudinfl/pke.git 17 18 # MultipartiteRankなどのキーフレーズの手法については以下のサイトが参考になります 19 # https://www.ogis-ri.co.jp/otc/hiroba/technical/similar-document-search/part5.html 20 pke.base.lang_stopwords['ja_ginza'] = 'japanese' 21 22 # spacyに設定されているstopwordを使う 23 spacy_model = spacy.load("ja_ginza") # GiNZAモデルの読み込み 24 stopwords = list(stop_words.STOP_WORDS) 25 nltk.corpus.stopwords.words_org = nltk.corpus.stopwords.words 26 nltk.corpus.stopwords.words = lambda lang: stopwords if lang == 'japanese' else nltk.corpus.stopwords.words_org( 27 lang) 28 29 extractor = pke.unsupervised.MultipartiteRank() 30 extractor.load_document(input=text, language='ja_ginza', 31 normalization=None, spacy_model=spacy_model) 32 extractor.candidate_selection(pos={'NOUN', 'PROPN', 'ADJ', 'NUM'}) 33 extractor.candidate_weighting(threshold=0.74, method='average', alpha=1.1) 34 key_phrase = extractor.get_n_best(n) 35 36 return key_phrase
試したこと
これに対してこちらのサイトを参考にnltkからstopwordsのダウンロードとtokenizerのダウンロードを行い、アプリケーションフォルダ内にnltk_dataのフォルダを作成し、その中にダウンロードしたファイルなどをコピーしました。
またapp.yamlで環境変数を
env_variables: NLTK_DATA: "./nltk_data/"
のように設定しました。
また、pythonファイル内で
python
1import nltk 2nltk.data.path.append("[アプリ名]/nltk_data")
パスの設定を行いましたが、依然として同様のエラーが出てしまいます。解決方法を教えていただきたいです。
補足情報(FW/ツールのバージョンなど)
フォルダ構造
[アプリ名] |___nltk_data #stopwordsやtokenizerをコピーしたファイル |___app.yaml #pythonのruntimeとinstance_class, 環境変数を設定. |___main.py #該当のpythonファイル |___~~~.json # firestore使用に必要なjson
このようになっております。
その他参考にしたサイト
https://stackoverflow.com/questions/19749541/nltk-for-google-app-engine
https://stackoverflow.com/questions/1286301/using-the-python-nltk-2-0b5-on-the-google-app-engine?noredirect=1&lq=1
最後に
長文になりましたが、何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。