2016-11-02 2 views
0

は、私が実行している特定のスクリプトのために、私はnltk以下のパッケージからインストールしておく必要があります。ダウンロードしたnltkサブパッケージを横断/ナビゲートしますか?

req_modules = ['punkt', 'stopwords', 'averaged_perceptron_tagger', 'maxent_ne_chunker'] 

私はこのように、stopwordsがダウンロードされているかどうかを確認することができます知っている:については

import nltk 
import os 

if 'stopwords' in os.listdir(nltk.data.find('corpora')): 
    print(True) 
else: 
    print(False) 

私は前にstopwordsを使っていたので、これはうまくいきます。

if not all(m in os.listdir(nltk.data.find('models')) for m in ['punkt', 'averaged_perceptron_tagger', 'maxent_ne_chunker']: 
    # download the ones that aren't already downloaded 

彼らはすべてのnltk.download()でアクセスダウンローダのモジュールとしてラベル付けされています。しかし、私は最終的のようなものを使用して、他の三つのモジュールがインストールされている場合、プログラムでチェックできるようにしたいです。これは、簡単に検索する必要がありますので、私は1つのリスト内のすべてのダウンロードされたサブパッケージを取得するには、このような何かを試してみました:

all_downloaded = os.listdir(nltk.data.find("corpora")) + os.listdir(nltk.data.find("models")) 

しかし、私は LookupError: Resource 'models' not foundを取得します。 nltk.data'models'タブを検索するには、 'corpora'のように検索するにはどうすればよいですか?

は、以下の提案を考慮に入れる:私はこれらのリソースを見つけるための命名規則を前提とすると、「コーパス」は編集enter image description here

下記のダウンローダで見られるタブと同じ名前であるように、同じです私は以下のコードを試しましたが、例外処理があってもまだ ImportErrorになります。そこには何が起こっているのですか?

req_modules = {'from nltk import punkt': 'punkt', 'from nltk.corpus import stopwords': 'stopwords', 
       'from nltk import pos_tag': 'averaged_perceptron_tagger', 
       'from nltk import ne_chunk': 'maxent_ne_chunker', 
       'from nltk.stem.porter import PorterStemmer': 'porter_test'} 

for m in req_modules: 
    try: 
     print("Trying: %s" % m) 
     exec(m) 
    except LookupError or ImportError: 
     print("Tried: %s. Resource '%s' was not available and is being downloaded.\n" % (m, req_modules[m])) 
     nltk.download(req_modules[m]) 

編集2:

私はそれは用事、動作するようになりました。私はfrom nltk import porter_testfrom nltk.stem.porter import PorterStemmerに変更しました。

答えて

1

モジュールが使用するnltk_dataディレクトリのファイルとnltkモジュールを混同しているようです。 nltkをインストールすると、パッケージがすべて入手されます。さまざまなモジュールと機能では、ダウンロードしたデータファイルをnltk_dataに取り込む必要があります。 (それらのうちのいくつかは "Models"カテゴリにありますが、これはおそらく "modules"と混同していますか?)チェックするデータファイルを調べるには、nltk_dataフォルダなしで対応する関数を実行してエラーメッセージを調べます。例:

>>> nltk.ne_chunk("anything") 
Traceback (most recent call last): 
... 
raise LookupError(resource_not_found) 
LookupError: 
********************************************************************** 
    Resource 
    'chunkers/maxent_ne_chunker/PY3/english_ace_multiclass.pickle' 
    not found. Please use the NLTK Downloader to obtain the 
    ... 

しかし、私の場合は、データファイルを直接混乱させません。代わりに、必要なサービスを試してエラーが発生するかどうかを確認してください。

try: 
    nltk.ne_chunk([]) 
except LookupError: 
    nltk.download("maxent_ne_chunker") 
+0

したがって、nltkの "Models"部分でダウンロードされたモデルの存在を検索することは、os.listdir( 'nltk.data.find'の 'stopwords'のようなもの) "コーパス")) '? – blacksite

+0

「モデル」は単にダウンローダーのメニュータブです。そこに 'book'フォルダがないように、' nltk_data'フォルダ階層との関係はありません。そして、あなたは 'nltk'ではなく' nltk_data'を意味していたに違いありません。 – alexis

+0

ちなみに、ファイルの存在をチェックするときは、 'os.listdir()'全体を取得してファイルをチェックしないでください。 http://stackoverflow.com/questions/82831/how-do-i-check-whether-a-file-exists-using-pythonを参照してください。 – alexis

0

私は同じエラーが発生しています。

nltk.download("maxent_ne_chunker") 

は私に私はそれが正常に動作しているzipファイルを抽出し、私の/Users/../nltk_dataフォルダ内のzipファイルを与えています。

関連する問題