nltk.data.loadでenglish.pickleを読み込めませんでした


144

punktトークナイザーをロードしようとすると...

import nltk.data
tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')

... a LookupErrorが発生しました:

> LookupError: 
>     *********************************************************************   
> Resource 'tokenizers/punkt/english.pickle' not found.  Please use the NLTK Downloader to obtain the resource: nltk.download().   Searched in:
>         - 'C:\\Users\\Martinos/nltk_data'
>         - 'C:\\nltk_data'
>         - 'D:\\nltk_data'
>         - 'E:\\nltk_data'
>         - 'E:\\Python26\\nltk_data'
>         - 'E:\\Python26\\lib\\nltk_data'
>         - 'C:\\Users\\Martinos\\AppData\\Roaming\\nltk_data'
>     **********************************************************************

2
次の方法でピクルスモデルをダウンロードできます>>> nltk.download()
alvas

回答:


261

私も同じ問題を抱えていました。Pythonシェルに移動し、次のように入力します。

>>> import nltk
>>> nltk.download()

次に、インストールウィンドウが表示されます。[モデル]タブに移動し、[識別子]列の下から[punkt]を選択します。次に、[ダウンロード]をクリックすると、必要なファイルがインストールされます。その後、動作するはずです!


4
一部のバージョンでは、[モデル]タブがなく、[ダウンロード]に移動してパッケージ 'punkt'を取得するか、任意の[リスト]オプションを使用して、利用可能なパッケージをリストすることができます。
2014年

2
nltk_dataディレクトリのホームフォルダーにインストールされます。このpunktのディレクトリをnltkライブラリフォルダーにコピーする必要があります。plsのヘルプ
sumanth232 2015

どういう意味かわかりません。tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')その後、動作するはずであり、次のようにトークナイザを使用できますtokenizer.tokenize('The cat. The mat. It Sat.')。ここで、nltkはtokenizers/punkt/english.pickle複数の場所に対する相対パスを解決しようとします。たとえば、Windowsでは%APPDATA%\nltk_data\tokenizers\punkt\english.pickleC:\nltk_data\tokenizers\punkt\english.pickle(またはD:とE:で同じ)を検索します。したがって、これらの場所の1つが存在するような方法でpunkt.zipファイルを解凍すると、ファイルが見つかるはずです。
richardr 2015

または、NLTK_DATAnltk_dataフォルダーを指すように環境変数を設定して、%NLTK_DATA%\tokenizers\punkt\english.pickle存在するようにします。
richardr 2015

X-Window以外のシステムで(たとえば、ssh接続を介して)実行している場合、GUIウィンドウがないため、[モデル]タブはありません。
mknaf 2016年

95

このようにできます。

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

関数にpunkt引数として渡すことでトークナイザーをダウンロードできますdownload。これで、単語と文のトークナイザーがで利用できるようになりnltkます。

あなたはすべてのもの、すなわちをダウンロードしたい場合はchunkersgrammarsmiscsentimenttaggerscorporahelpmodelsstemmerstokenizers、このような任意の引数を渡すことはありません。

nltk.download()

詳細については、こちらをご覧ください。https://www.nltk.org/data.html


1
コードのみの回答は非常に嫌われています。回答に説明を追加してください。これはどのように機能しますか?なぜそれが役立つのですか?
RubberDuck

必要なライブラリをダウンロードするだけで、nltkがトークン化作業を実行できます。
Itzik Gili、2017

トークナイザーの使い方は?
ラッキーハンドラー

python -c "import nltk; nltk.download('punkt')" [nltk_data] Downloading package punkt to /home/my_user/nltk_data... [nltk_data] Error downloading 'punkt' from [nltk_data] <https://raw.githubusercontent.com/nltk/nltk_data/gh- [nltk_data] pages/packages/tokenizers/punkt.zip>: HTTP Error [nltk_data] 503: first byte timeout
mrgloom

27

これが今私にとってうまくいったことです:

# Do this in a separate python interpreter session, since you only have to do it once
import nltk
nltk.download('punkt')

# Do this in your ipython notebook or analysis script
from nltk.tokenize import word_tokenize

sentences = [
    "Mr. Green killed Colonel Mustard in the study with the candlestick. Mr. Green is not a very nice fellow.",
    "Professor Plum has a green plant in his study.",
    "Miss Scarlett watered Professor Plum's green plant while he was away from his office last week."
]

sentences_tokenized = []
for s in sentences:
    sentences_tokenized.append(word_tokenize(s))

stories_tokenizedは、トークンのリストのリストです。

[['Mr.', 'Green', 'killed', 'Colonel', 'Mustard', 'in', 'the', 'study', 'with', 'the', 'candlestick', '.', 'Mr.', 'Green', 'is', 'not', 'a', 'very', 'nice', 'fellow', '.'],
['Professor', 'Plum', 'has', 'a', 'green', 'plant', 'in', 'his', 'study', '.'],
['Miss', 'Scarlett', 'watered', 'Professor', 'Plum', "'s", 'green', 'plant', 'while', 'he', 'was', 'away', 'from', 'his', 'office', 'last', 'week', '.']]

この文章は、本「Mining the Social Web、2nd Edition」に付属するサンプルのipythonノートブックから取られました


16

bashコマンドラインから、次のコマンドを実行します。

$ python -c "import nltk; nltk.download('punkt')"

[nltk_data]が表示されます。punktの読み込みエラー:HTTPエラー405:許可されていません。
user2478236 2017

1
@ user2478236 GitHubは、ときどき非常に大量になるため、HTTP 405でダウンローダーをブロックしていました。github.com/nltk/nltk/issues/1787を
John Vandenberg

1
私のために働いた、これはnltk_data私のホームディレクトリにフォルダーを作成し、それにpunktを保存します。Fedora 27、Py3.6を使用しています。
MaNKuR

13

これは私にとってはうまくいきます:

>>> import nltk
>>> nltk.download()

Windowsでは、nltkダウンローダーも取得します

NLTKダウンローダー


9

Simple nltk.download()はこの問題を解決しません。以下を試してみましたが、うまくいきました:

nltkフォルダの作成tokenizers、フォルダをして、コピーしpunktたフォルダをtokenizersフォルダ。

これは動作します。フォルダ構造は写真のようにする必要があります!1


1
私にとってこの作品は、私の場合、私は経由nltk.downloadダウンロードすることができませんでした...だから私は手動でファイルをダウンロードしnltk.org/nltk_data とフォルダCを作成します:/ nltk_data /トークナイザー/ PUNKTと私はすべてのコピーこの場所にあるファイル
Fermin Pitol

6

nltkには、事前トレーニング済みのトークナイザーモデルがあります。内部で事前定義されたWebソースからモデルがダウンロードされ、インストールされているnltkパッケージのパスに保存されている間、次の可能な関数呼び出しを実行しています。

例1 tokenizer = nltk.data.load( 'nltk:tokenizers / punkt / english.pickle')

例2 nltk.download( 'punkt')

コードで上記の文を呼び出す場合は、ファイアウォール保護なしでインターネットに接続していることを確認してください。

上記の問題をより深く理解して解決するためのより良いオルターネットの方法を共有したいと思います。

次の手順に従って、nltkを使用して英語の単語のトークン化をお楽しみください。

ステップ1:まず、Webパスに従って「english.pickle」モデルをダウンロードします。

リンク「http://www.nltk.org/nltk_data/」に移動し、オプション「107. Punkt Tokenizer Models」で「download」をクリックします

ステップ2:ダウンロードした「punkt.zip」ファイルを抽出し、そこから「english.pickle」ファイルを見つけて、Cドライブに配置します。

手順3:次のコードをコピーして貼り付け、実行します。

from nltk.data import load
from nltk.tokenize.treebank import TreebankWordTokenizer

sentences = [
    "Mr. Green killed Colonel Mustard in the study with the candlestick. Mr. Green is not a very nice fellow.",
    "Professor Plum has a green plant in his study.",
    "Miss Scarlett watered Professor Plum's green plant while he was away from his office last week."
]

tokenizer = load('file:C:/english.pickle')
treebank_word_tokenize = TreebankWordTokenizer().tokenize

wordToken = []
for sent in sentences:
    subSentToken = []
    for subSent in tokenizer.tokenize(sent):
        subSentToken.extend([token for token in treebank_word_tokenize(subSent)])

    wordToken.append(subSentToken)

for token in wordToken:
    print token

問題が発生した場合はお知らせください


非常にアグレッシブなファイアウォールの内側にいる場合は、本当にいい答えです。
kariato

5

ジェンキンスさんは、これはへのコードのように、以下を追加することによって固定することができVIRTUALENVビルダーの下にビルド ]タブ:

python -m nltk.downloader punkt

ここに画像の説明を入力してください


4

nltkでpos taggingを行おうとしたときにこの問題に遭遇しました。私が正しく理解した方法は、「taggers」という名前のコーパスディレクトリと共に新しいディレクトリを作成し、ディレクトリタガーにmax_pos_taggerをコピーすることです。
それもあなたのために働くことを願っています。それで最高の幸運!!!。


4

Spyderでアクティブシェルに移動し、以下の2つのコマンドを使用してnltkをダウンロードします。import nltk nltk.download()すると、NLTKダウンローダーウィンドウが次のように表示されます。このウィンドウの[モデル]タブに移動し、[punkt]をクリックして、[punkt]をダウンロードします。

窓



0

punkt tokenizersのデータは35 MBを超える非常に大きいため、私のように、リソースが限られているラムダなどの環境でnltkを実行している場合、これは大きな問題になる可能性があります。

1つまたはおそらくいくつかの言語トークナイザーのみが必要な場合は、それらの言語.pickleファイルのみを含めることで、データのサイズを大幅に削減できます。

英語のみをサポートする必要がある場合は、nltkデータサイズを407 KBに減らすことができます(python 3バージョンの場合)。

手順

  1. nltk punktデータをダウンロード:https ://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenizers/punkt.zip
  2. 環境のどこかにフォルダを作成しますnltk_data/tokenizers/punkt。python 3を使用している場合PY3は、新しいディレクトリ構造がのようになるように別のフォルダを追加しますnltk_data/tokenizers/punkt/PY3。私の場合、プロジェクトのルートにこれらのフォルダーを作成しました。
  3. zipを解凍し、.pickleサポートする言語のファイルを、punkt作成したフォルダーに移動します。注:Python 3ユーザーは、PY3フォルダーのピクルスを使用する必要があります。言語ファイルが読み込まれると、example-folder-stuctureのようになります。
  4. ここでnltk_data、データが事前定義された検索パスのいずれにもない場合は、検索パスにフォルダーを追加する必要があります。環境変数を使用してデータを追加できますNLTK_DATA='path/to/your/nltk_data'。また、Pythonで実行時にカスタムパスを追加することもできます。
from nltk import data
data.path += ['/path/to/your/nltk_data']

注:実行時にデータをロードしたり、データをコードにバンドルしたりする必要がない場合は、nltkが検索する組み込みの場所にnltk_dataフォルダーを作成するのが最適です


0

nltk.download()この問題は解決されません。以下を試してみましたが、うまくいきました:

'...AppData\Roaming\nltk_data\tokenizers'、フォルダ、抽出物は、ダウンロードしたpunkt.zip同じ場所にフォルダを。


0

ではPython-3.6、トレースバックで提案を見ることができます。それは非常に役に立ちます。したがって、私はあなたが得たエラーに注意を払うようにあなたたちに言います、ほとんどの場合、答えはその問題の範囲内です;)。

ここに画像の説明を入力してください

そして、ここで他の人々が示唆しているようpython -c "import nltk; nltk.download('wordnet')"に、Pythonターミナルを使用するか、オンザフライでインストールできるようなコマンドを使用します。このコマンドを1回実行するだけで、データがローカルのホームディレクトリに保存されます。


0

割り当てられたフォルダーを複数のダウンロードに使用するときにも同様の問題があり、データパスを手動で追加する必要がありました。

単一のダウンロード、次のように達成できます(動作)

import os as _os
from nltk.corpus import stopwords
from nltk import download as nltk_download

nltk_download('stopwords', download_dir=_os.path.join(get_project_root_path(), 'temp'), raise_on_error=True)

stop_words: list = stopwords.words('english')

このコードは機能します。つまり、nltkはダウンロード機能で渡されたダウンロードパスを記憶しています。他のnadsでは、後続のパッケージをダウンロードすると、ユーザーが説明したのと同様のエラーが発生します。

複数ダウンロードするとエラーが発生します。

import os as _os

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

from nltk import download as nltk_download

nltk_download(['stopwords', 'punkt'], download_dir=_os.path.join(get_project_root_path(), 'temp'), raise_on_error=True)

print(stopwords.words('english'))
print(word_tokenize("I am trying to find the download path 99."))

エラー:

リソースパンクが見つかりません。リソースを取得するには、NLTKダウンローダーを使用してください。

インポートnltk nltk.download( 'punkt')

ここで、ダウンロードパスにntlkデータパスを追加すると、機能します。

import os as _os

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

from nltk import download as nltk_download
from nltk.data import path as nltk_path


nltk_path.append( _os.path.join(get_project_root_path(), 'temp'))


nltk_download(['stopwords', 'punkt'], download_dir=_os.path.join(get_project_root_path(), 'temp'), raise_on_error=True)

print(stopwords.words('english'))
print(word_tokenize("I am trying to find the download path 99."))

これは機能します...なぜ一方のケースでは機能するのかわからないのですが、エラーメッセージは、2回目にダウンロードフォルダーにチェックインしないことを示しているようです。注意:windows8.1 / python3.7 / nltk3.5を使用

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.