Gagal memuat english.pickle dengan nltk.data.load

144

Saat mencoba memuat punkttokenizer ...

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

... a LookupErrordibesarkan:

> 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'
>     **********************************************************************
Martin
sumber
2
Anda dapat mengunduh model acar menggunakan>>> nltk.download()
alvas

Jawaban:

261

Saya punya masalah yang sama. Pergilah ke shell python dan ketik:

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

Kemudian muncul jendela instalasi. Buka tab 'Model' dan pilih 'punkt' dari bawah kolom 'Identifier'. Kemudian klik Unduh dan itu akan menginstal file yang diperlukan. Maka itu harus bekerja!

richardr
sumber
4
Perhatikan bahwa dalam beberapa versi, tidak ada tab Model dan Anda dapat pergi ke 'Unduh' dan mencoba untuk mendapatkan paket 'punkt' atau menggunakan opsi 'daftar' apa pun untuk mendaftar paket yang tersedia.
ely
2
itu menginstal ke folder rumah saya di direktori nltk_data. Haruskah saya menyalin direktori punkt ini ke folder perpustakaan nltk. tolong bantu
sumanth232
Saya tidak yakin apa yang Anda maksud. tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')kemudian harus bekerja dan Anda dapat menggunakan tokenizer seperti: tokenizer.tokenize('The cat. The mat. It Sat.'). Di sini nltk mencoba menyelesaikan jalur relatif tokenizers/punkt/english.pickleterhadap beberapa lokasi. Misalnya pada Windows terlihat dalam %APPDATA%\nltk_data\tokenizers\punkt\english.pickleatau C:\nltk_data\tokenizers\punkt\english.pickle(sama untuk D: dan E :). Jadi, jika Anda memastikan file punkt.zip terbuka ritsleting sedemikian rupa sehingga salah satu lokasi tersebut ada, ia harus dapat menemukannya.
richardr
Atau, atur NLTK_DATAvariabel lingkungan Anda untuk menunjuk ke folder nltk_data sehingga %NLTK_DATA%\tokenizers\punkt\english.pickleada.
richardr
Jika berjalan pada sistem non-X-Window (seperti misalnya melalui sshkoneksi) tidak akan ada jendela GUI dan dengan demikian tidak ada tab 'Model'.
mknaf
95

Anda bisa melakukannya seperti ini.

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

Anda dapat mengunduh tokenizers dengan mengirimkan punktsebagai argumen ke downloadfungsi. Token kata dan kalimat kemudian tersedia pada nltk.

Jika Anda ingin men-download semuanya yaitu chunkers, grammars, misc, sentiment, taggers, corpora, help, models, stemmers, tokenizers, tidak lulus argumen seperti ini.

nltk.download()

Lihat ini untuk wawasan lebih lanjut. https://www.nltk.org/data.html

Naren Yellavula
sumber
1
Kode Hanya jawaban yang sangat disukai. Silakan tambahkan lebih banyak penjelasan untuk jawaban Anda. Bagaimana cara kerjanya? Mengapa ini bermanfaat?
RubberDuck
Apa yang dilakukannya hanyalah mengunduh pustaka yang diperlukan untuk memungkinkan nltk melakukan pekerjaan tokenisasi apa pun.
Itzik Gili
bagaimana cara menggunakan tokenizers?
luckyhandler
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

Inilah yang bekerja untuk saya sekarang:

# 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))

sentences_tokenized adalah daftar daftar token:

[['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', '.']]

Kalimat diambil dari contoh notebook ipython yang menyertai buku "Mining the Social Web, 2nd Edition"

jjinking
sumber
16

Dari bash command line, jalankan:

$ python -c "import nltk; nltk.download('punkt')"
cgl
sumber
Saya mendapatkan [nltk_data] Kesalahan saat memuat punkt: HTTP Error 405: Tidak diizinkan.
user2478236
1
@ user2478236 GitHub telah memblokir pengunduh dengan HTTP 405 karena volume yang sangat tinggi; lihat github.com/nltk/nltk/issues/1787
John Vandenberg
1
Bekerja untuk saya, ini membuat folder nltk_datake direktori home saya dan menyimpan punkt ke dalamnya. Saya punya Fedora 27, Py3.6.
MaNKuR
13

Ini bekerja untuk saya:

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

Di windows Anda juga akan mendapatkan nltk downloader

Pengunduh NLTK

Roshan Bagdiya
sumber
9

Sederhana nltk.download()tidak akan menyelesaikan masalah ini. Saya mencoba di bawah ini dan itu berhasil untuk saya:

dalam nltkfolder buat tokenizersfolder dan salin punktfolder Anda ke tokenizersfolder.

Ini akan berhasil.! struktur folder harus seperti yang ditunjukkan pada gambar! 1

Deepthi Karnam
sumber
1
Ini berfungsi untuk saya, dalam kasus saya, saya tidak dapat mengunduh melalui nltk.download ... Jadi saya mengunduh file secara manual dari nltk.org/nltk_data dan membuat folder c: / nltk_data / tokenizers / punkt dan saya menyalin semua file di lokasi ini
Fermin Pitol
6

nltk memiliki model tokenizer yang sudah dilatih sebelumnya. Model sedang mengunduh dari sumber web yang telah ditentukan secara internal dan disimpan di jalur paket nltk yang diinstal saat menjalankan panggilan fungsi berikut.

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

Misal 2 nltk.download ('punkt')

Jika Anda memanggil kalimat di atas dalam kode Anda, Pastikan Anda memiliki koneksi internet tanpa perlindungan firewall.

Saya ingin berbagi cara alter-net yang lebih baik untuk menyelesaikan masalah di atas dengan pemahaman yang lebih dalam.

Ikuti langkah-langkah berikut dan nikmati tokenisasi kata bahasa Inggris menggunakan nltk.

Langkah 1: Pertama unduh model "english.pickle" mengikuti jalur web.

Tautan goto " http://www.nltk.org/nltk_data/ " dan klik "unduh" pada opsi "107. Model Tokenizer Punkt"

Langkah 2: Ekstrak file "punkt.zip" yang diunduh dan cari file "english.pickle" dari file tersebut dan letakkan di drive C.

Langkah 3: salin tempel kode berikut dan jalankan.

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

Beri tahu saya, jika Anda menghadapi masalah

Jignesh Vasoya
sumber
Jawaban yang sangat bagus jika Anda berada di belakang firewall yang sangat agresif.
kariato
5

Di Jenkins ini dapat diperbaiki dengan menambahkan kode seperti seperti ini ke Virtualenv Builder di bawah tab Build :

python -m nltk.downloader punkt

masukkan deskripsi gambar di sini

Abhijeet
sumber
4

saya menemukan masalah ini ketika saya mencoba melakukan penandaan pos di nltk. cara saya mendapatkannya dengan benar adalah dengan membuat direktori baru bersama dengan direktori corpora bernama "taggers" dan menyalin max_pos_tagger dalam direktori taggers.
semoga berhasil juga untuk Anda. semoga sukses !!!

Ashish Singh
sumber
4

Di Spyder, buka shell aktif Anda dan unduh nltk menggunakan di bawah 2 perintah. import nltk nltk.download () Maka Anda akan melihat jendela pengunduh NLTK terbuka seperti di bawah ini, Buka tab 'Models' di jendela ini dan klik 'punkt' dan unduh 'punkt'

Jendela

Krish
sumber
0

Periksa apakah Anda memiliki semua perpustakaan NLTK.

Torrtuga
sumber
0

Data tokenizers punkt cukup besar di lebih dari 35 MB , ini bisa menjadi masalah besar jika seperti saya Anda menjalankan nltk di lingkungan seperti lambda yang memiliki sumber daya terbatas.

Jika Anda hanya membutuhkan satu atau mungkin beberapa tokenizer bahasa, Anda dapat secara drastis mengurangi ukuran data hanya dengan memasukkan bahasa-bahasa tersebut. .pickle file .

Jika semua yang Anda butuhkan hanya mendukung bahasa Inggris maka ukuran data nltk Anda dapat dikurangi menjadi 407 KB (untuk versi python 3).

Langkah

  1. Unduh data punkt nltk: https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenizers/punkt.zip
  2. Di suatu tempat di lingkungan Anda membuat folder:, nltk_data/tokenizers/punktjika menggunakan python 3 tambahkan folder lain PY3sehingga struktur direktori baru Anda terlihat seperti nltk_data/tokenizers/punkt/PY3. Dalam kasus saya, saya membuat folder ini di root proyek saya.
  3. Ekstrak zip dan pindahkan .picklefile untuk bahasa yang ingin Anda dukung ke punktfolder yang baru saja Anda buat. Catatan: Pengguna Python 3 harus menggunakan acar dari PY3folder. Dengan file bahasa Anda dimuat seharusnya akan terlihat seperti: example-folder-stucture
  4. Sekarang Anda hanya perlu menambahkan nltk_datafolder Anda ke jalur pencarian, dengan asumsi data Anda tidak ada di salah satu jalur pencarian yang telah ditentukan . Anda dapat menambahkan data menggunakan variabel lingkungan NLTK_DATA='path/to/your/nltk_data'. Anda juga dapat menambahkan jalur khusus saat runtime di python dengan melakukan:
from nltk import data
data.path += ['/path/to/your/nltk_data']

CATATAN: Jika Anda tidak perlu memuat data saat runtime atau bundel data dengan kode Anda, akan lebih baik untuk membuat nltk_datafolder di lokasi bawaan yang nltk cari .

Trent Holliday
sumber
0

nltk.download()tidak akan menyelesaikan masalah ini. Saya mencoba di bawah ini dan itu berhasil untuk saya:

di '...AppData\Roaming\nltk_data\tokenizers'folder, ekstrak punkt.zipfolder yang diunduh di lokasi yang sama.

bishnarender
sumber
0

Di Python-3.6saya bisa melihat saran di traceback. Itu cukup membantu. Oleh karena itu saya akan mengatakan kalian memperhatikan kesalahan yang Anda dapatkan, sebagian besar waktu jawaban berada dalam masalah itu;).

masukkan deskripsi gambar di sini

Dan kemudian seperti yang disarankan oleh orang lain di sini baik menggunakan terminal python atau menggunakan perintah seperti python -c "import nltk; nltk.download('wordnet')"kita dapat menginstalnya dengan cepat. Anda hanya perlu menjalankan perintah itu sekali dan kemudian akan menyimpan data secara lokal di direktori home Anda.

MaNKuR
sumber
0

Saya memiliki masalah serupa ketika menggunakan folder yang ditetapkan untuk banyak unduhan, dan saya harus menambahkan jalur data secara manual:

unduhan tunggal, dapat dicapai sebagai diikuti (berfungsi)

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')

Kode ini berfungsi, artinya nltk mengingat jalur pengunduhan yang dilewati dalam pengunduhan unduhan. Di nads lain jika saya mengunduh paket berikutnya saya mendapatkan kesalahan yang sama seperti yang dijelaskan oleh pengguna:

Banyak unduhan menimbulkan kesalahan:

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."))

Kesalahan:

Sumber daya punkt tidak ditemukan. Silakan gunakan Pengunduh NLTK untuk mendapatkan sumber daya:

import nltk nltk.download ('punkt')

Sekarang jika saya menambahkan jalur data ntlk dengan jalur unduh saya, ini berfungsi:

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."))

Ini berfungsi ... Tidak yakin mengapa bekerja dalam satu kasus tetapi tidak yang lain, tetapi pesan kesalahan tampaknya menyiratkan bahwa itu tidak memeriksa ke folder unduhan kedua kalinya. NB: menggunakan windows8.1 / python3.7 / nltk3.5

Nono London
sumber