Không thể tải english.pickle với nltk.data.load


144

Khi cố gắng tải punktmã thông báo ...

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

... a LookupErrorđã được nâng lên:

> 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
bạn có thể tải xuống mô hình dưa chua bằng cách sử dụng>>> nltk.download()
alvas

Câu trả lời:


261

Tôi có vấn đề này như nhau. Đi vào một vỏ trăn và gõ:

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

Sau đó, một cửa sổ cài đặt xuất hiện. Chuyển đến tab 'Mô hình' và chọn 'punkt' từ bên dưới cột 'Định danh'. Sau đó bấm Tải xuống và nó sẽ cài đặt các tập tin cần thiết. Sau đó, nó nên làm việc!


4
Lưu ý rằng trong một số phiên bản, không có tab Mô hình và bạn có thể truy cập 'Tải xuống' và thử lấy gói 'punkt' hoặc sử dụng bất kỳ tùy chọn 'danh sách' nào để liệt kê các gói có sẵn.
ely

2
nó cài đặt vào thư mục nhà của tôi trong một thư mục nltk_data. Tôi có nên sao chép thư mục này của punkt vào bất kỳ thư mục thư viện nltk nào không. vui lòng giúp đỡ
sumanth 232

Tôi không chắc ý của bạn là gì. tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')sau đó sẽ hoạt động và bạn có thể sử dụng mã thông báo như vậy : tokenizer.tokenize('The cat. The mat. It Sat.'). Ở đây nltk cố gắng giải quyết đường dẫn tương đối đối tokenizers/punkt/english.picklevới một số vị trí. Ví dụ: trên Windows, nó trông %APPDATA%\nltk_data\tokenizers\punkt\english.picklehoặc C:\nltk_data\tokenizers\punkt\english.pickle(giống với D: và E :). Vì vậy, nếu bạn chắc chắn rằng tệp punkt.zip được giải nén theo cách mà một trong những vị trí đó tồn tại, thì nó sẽ có thể tìm thấy nó.
richardr

Hoặc, đặt NLTK_DATAbiến môi trường của bạn để trỏ đến thư mục nltk_data để %NLTK_DATA%\tokenizers\punkt\english.pickletồn tại.
richardr

Nếu chạy trên hệ thống không có X-Window (ví dụ như qua sshkết nối), sẽ không có cửa sổ GUI và do đó không có tab 'Mô hình'.
mknaf

95

Bạn có thể làm điều đó như thế này.

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

Bạn có thể tải xuống các mã thông báo bằng cách chuyển punktlàm đối số cho downloadhàm. Các mã thông báo từ và câu sau đó có sẵn trên nltk.

Nếu bạn muốn tải về tất cả mọi thứ có nghĩa là chunkers, grammars, misc, sentiment, taggers, corpora, help, models, stemmers, tokenizers, không vượt qua bất kỳ đối số như thế này.

nltk.download()

Xem điều này để hiểu thêm. https://www.nltk.org/data.html


1
Mã chỉ có câu trả lời được tán thành cao. Vui lòng thêm giải thích cho câu trả lời của bạn. Làm thế nào để làm việc này? Tại sao nó hữu ích?
RubberDuck

Những gì nó làm chỉ đơn giản là tải xuống các thư viện cần thiết để cho phép nltk thực hiện bất kỳ công việc mã thông báo nào.
Itzik Gili

Làm thế nào để sử dụng mã thông báo?
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

Đây là những gì làm việc cho tôi ngay bây giờ:

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

câu_tokenized là một danh sách danh sách các mã thông báo:

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

Các câu được lấy từ ví dụ máy tính xách tay ipython kèm theo cuốn sách "Khai thác mạng xã hội, tái bản lần 2"


16

Từ dòng lệnh bash, chạy:

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

Tôi nhận được [nltk_data] Lỗi khi tải punkt: Lỗi HTTP 405: Không được phép.
dùng2478236

1
@ user2478236 GitHub đã chặn trình tải xuống bằng HTTP 405 do âm lượng cực kỳ cao; xem github.com/nltk/nltk/issues/1787
John Vandenberg

1
Làm việc cho tôi, điều này tạo thư mục nltk_datavào thư mục nhà của tôi và lưu punkt vào nó. Tôi có Fedora 27, Py3.6.
MaNKuR

13

Điều này làm việc cho tôi:

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

Trong windows bạn cũng sẽ nhận được trình tải xuống nltk

Trình tải xuống NLTK


9

Đơn giản nltk.download()sẽ không giải quyết vấn đề này. Tôi đã thử dưới đây và nó làm việc cho tôi:

trong nltkthư mục tạo một tokenizersthư mục và sao chép punktthư mục của bạn vào tokenizersthư mục.

Điều này sẽ làm việc.! cấu trúc thư mục cần phải được thể hiện trong hình! 1


1
Điều này hoạt động với tôi, trong trường hợp của tôi, tôi không thể tải xuống qua nltk.doad ... Vì vậy, tôi đã tải xuống tệp theo cách thủ công từ nltk.org/nltk_data và tạo một thư mục c: / nltk_data / tokenulators / punkt và tôi đã sao chép tất cả tập tin ở vị trí này
Fermin Pitol

6

nltk có các mô hình mã thông báo được đào tạo trước. Mô hình đang tải xuống từ các nguồn web được xác định trước trong nội bộ và được lưu trữ tại đường dẫn của gói nltk đã cài đặt trong khi thực hiện các lệnh gọi hàm có thể.

Ví dụ: 1 mã thông báo = nltk.data.load ('nltk: mã thông báo / punkt / english.pickle')

Ví dụ: 2 nltk.doad ('punkt')

Nếu bạn gọi câu trên trong mã của mình, hãy đảm bảo bạn có kết nối internet mà không có bất kỳ sự bảo vệ tường lửa nào.

Tôi muốn chia sẻ một số cách thay đổi mạng tốt hơn để giải quyết vấn đề trên với những hiểu biết sâu sắc hơn.

Vui lòng làm theo các bước sau và tận hưởng mã thông báo từ tiếng Anh bằng cách sử dụng nltk.

Bước 1: Đầu tiên tải xuống mô hình "english.pickle" theo đường dẫn web.

Liên kết Goto " http://www.nltk.org/nltk_data/ " và nhấp vào "tải xuống" tại tùy chọn "107. Mô hình mã thông báo Punkt"

Bước 2: Giải nén tệp "punkt.zip" đã tải xuống và tìm tệp "english.pickle" từ tệp đó và đặt vào ổ C.

Bước 3: sao chép dán mã sau đây và thực hiện.

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

Hãy cho tôi biết, nếu bạn gặp phải bất kỳ vấn đề


Câu trả lời thực sự tốt đẹp nếu bạn đứng sau một tường lửa rất tích cực.
kariato

5

Trên Jenkins, điều này có thể được khắc phục bằng cách thêm mã như sau vào Virtualenv Builder trong tab Build :

python -m nltk.downloader punkt

nhập mô tả hình ảnh ở đây


4

tôi đã gặp vấn đề này khi tôi đang cố gắng thực hiện gắn thẻ pos trong nltk. cách tôi hiểu là bằng cách tạo một thư mục mới cùng với thư mục cora có tên "taggers" và sao chép max_pose_tagger trong thư mục taggers.
Hi vọng nó có ích cho bạn. Tốt nhất của may mắn với nó!!!.


4

Trong Spyder, hãy vào shell hoạt động của bạn và tải xuống nltk bằng cách sử dụng 2 lệnh bên dưới. nhập nltk nltk.doad () Sau đó, bạn sẽ thấy cửa sổ tải xuống NLTK mở ra như bên dưới, chuyển đến tab 'Mô hình' trong cửa sổ này và nhấp vào 'punkt' và tải xuống 'punkt'

Cửa sổ



0

Dữ liệu mã thông báo punkt khá lớn với hơn 35 MB , đây có thể là một vấn đề lớn nếu như tôi, bạn đang chạy nltk trong một môi trường như lambda có nguồn lực hạn chế.

Nếu bạn chỉ cần một hoặc có thể một vài mã thông báo ngôn ngữ, bạn có thể giảm đáng kể kích thước của dữ liệu bằng cách chỉ bao gồm các .pickletệp ngôn ngữ đó .

Nếu tất cả những gì bạn chỉ cần hỗ trợ tiếng Anh thì kích thước dữ liệu nltk của bạn có thể giảm xuống còn 40 KB KB (đối với phiên bản python 3).

Các bước

  1. Tải xuống dữ liệu punkt của nltk: https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenators/punkt.zip
  2. Một nơi nào đó trong môi trường của bạn tạo các thư mục : nltk_data/tokenizers/punkt, nếu sử dụng python 3, hãy thêm một thư mục khác PY3để cấu trúc thư mục mới của bạn trông như thế nào nltk_data/tokenizers/punkt/PY3. Trong trường hợp của tôi, tôi đã tạo các thư mục này ở thư mục gốc của dự án.
  3. Giải nén zip và di chuyển các .pickletệp cho các ngôn ngữ bạn muốn hỗ trợ vào punktthư mục bạn vừa tạo. Lưu ý: Người dùng Python 3 nên sử dụng dưa chua từ PY3thư mục. Với các tệp ngôn ngữ của bạn được tải, nó sẽ trông giống như: ví dụ-cấu trúc thư mục
  4. Bây giờ bạn chỉ cần thêm nltk_datathư mục của mình vào các đường dẫn tìm kiếm, giả sử dữ liệu của bạn không nằm trong một trong các đường dẫn tìm kiếm được xác định trước . Bạn có thể thêm dữ liệu của mình bằng cách sử dụng biến môi trường NLTK_DATA='path/to/your/nltk_data'. Bạn cũng có thể thêm một đường dẫn tùy chỉnh trong thời gian chạy trong python bằng cách thực hiện:
from nltk import data
data.path += ['/path/to/your/nltk_data']

LƯU Ý: Nếu bạn không cần tải dữ liệu trong thời gian chạy hoặc gói dữ liệu với mã của mình, tốt nhất là tạo các nltk_datathư mục của bạn tại các vị trí tích hợp mà nltk tìm kiếm .


0

nltk.download()sẽ không giải quyết vấn đề này. Tôi đã thử dưới đây và nó làm việc cho tôi:

trong '...AppData\Roaming\nltk_data\tokenizers'thư mục, giải nén punkt.zipthư mục đã tải xuống ở cùng một vị trí.


0

Trong Python-3.6tôi có thể thấy gợi ý trong trac trở lại. Điều đó khá hữu ích. Do đó tôi sẽ nói các bạn chú ý đến lỗi bạn gặp phải, hầu hết các câu trả lời đều nằm trong vấn đề đó;).

nhập mô tả hình ảnh ở đây

Và sau đó theo đề xuất của những người khác ở đây hoặc sử dụng thiết bị đầu cuối python hoặc sử dụng một lệnh như python -c "import nltk; nltk.download('wordnet')"chúng ta có thể cài đặt chúng một cách nhanh chóng. Bạn chỉ cần chạy lệnh đó một lần và sau đó nó sẽ lưu dữ liệu cục bộ trong thư mục chính của bạn.


0

Tôi gặp vấn đề tương tự khi sử dụng một thư mục được chỉ định cho nhiều lần tải xuống và tôi phải nối đường dẫn dữ liệu theo cách thủ công:

tải xuống một lần, có thể đạt được như sau (hoạt động)

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

Mã này hoạt động, có nghĩa là nltk nhớ đường dẫn tải xuống được thông qua trong phiên bản tải xuống. Trên các nad khác nếu tôi tải xuống gói tiếp theo, tôi sẽ gặp lỗi tương tự như được mô tả bởi người dùng:

Nhiều lượt tải xuống gây ra lỗi:

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

Lỗi:

Tài nguyên punkt không tìm thấy. Vui lòng sử dụng Trình tải xuống NLTK để lấy tài nguyên:

nhập nltk nltk.d Download ('punkt')

Bây giờ nếu tôi nối đường dẫn dữ liệu ntlk với đường dẫn tải xuống của mình, nó sẽ hoạt động:

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

Điều này hoạt động ... Không chắc chắn tại sao hoạt động trong một trường hợp nhưng không phải là trường hợp khác, nhưng thông báo lỗi dường như ngụ ý rằng nó không kiểm tra vào thư mục tải xuống lần thứ hai. Lưu ý: sử dụng windows8.1 / python3.7 / nltk3.5

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.