Не вдалося завантажити english.pickle з nltk.data.load


144

При спробі завантажити punktтокенізатор ...

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

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

У мене була ця сама проблема. Перейдіть в оболонку пітона і введіть:

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

Потім з'являється вікно встановлення. Перейдіть на вкладку "Моделі" та виберіть "пункт" з-під стовпця "Ідентифікатор". Потім натисніть Завантажити, і він встановить необхідні файли. Тоді це має працювати!


4
Зауважте, що в деяких версіях немає вкладки Моделі, і ви можете перейти до "Завантажити" і спробувати отримати пакет "punkt" або скористатися будь-якими параметрами "список", щоб перелічити доступні пакети.
ely

2
він встановлюється в мою домашню папку в каталозі nltk_data. Чи потрібно скопіювати цей каталог punkt в будь-яку папку бібліотеки nltk. pls help
sumanth232

Я не впевнений, що ти маєш на увазі. 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.pickleабо те C:\nltk_data\tokenizers\punkt\english.pickleсаме для D: і E :). Тож якщо ви переконайтеся, що файл punkt.zip розпакований таким чином, що існує одне з цих місць, його слід мати змогу знайти.
Річардр

Крім того, встановіть NLTK_DATAзмінну вашого середовища вказувати на папку nltk_data, щоб вона %NLTK_DATA%\tokenizers\punkt\english.pickleіснувала.
Річардр

Якщо працює в системі, яка не є X-Window (як, наприклад, через sshз'єднання), не буде вікна графічного інтерфейсу і, отже, немає вкладки "Моделі".
mknaf

95

Ви можете зробити це так.

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

Ви можете завантажити токенізатори, передавши punktяк аргумент downloadфункції. Токенізатори слів і пропозицій потім доступні на nltk.

Якщо ви хочете скачати все тобто chunkers, grammars, misc, sentiment, taggers, corpora, help, models, stemmers, tokenizers, не проходять жодних аргументів , як це.

nltk.download()

Дивіться це для отримання більш детальної інформації. https://www.nltk.org/data.html


1
Код лише на відповіді сильно хмуриться. Будь ласка, додайте більше пояснень до своєї відповіді. Як це працює? Чому це корисно?
RubberDuck

Це просто завантаження необхідних бібліотек, щоб дозволити nltk виконувати будь-яку роботу з токенізації.
Іцік Гілі

як користуватися токенізаторами?
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
мрглоом

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

rečenica_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', '.']]

Речення взято з прикладу зошита ipython, що супроводжує книгу "Майнінг соціальної мережі, 2-е видання"


16

З командного рядка bash запустіть:

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

Я отримую [nltk_data] Помилка завантаження punkt: HTTP Помилка 405: Не дозволено.
user2478236

1
@ user2478236 GitHub заблокував завантажувач HTTP 405 через надзвичайно високу гучність; дивіться github.com/nltk/nltk/isissue/1787
Джон Ванденберг

1
Працюючи для мене, це створює папку nltk_dataв моєму домашньому режимі і зберігає в ній панк. У мене є Fedora 27, Py3.6.
MaNKuR


9

Просте nltk.download()це питання не вирішить. Я спробував нижче, і це спрацювало для мене:

у nltkпапці створіть tokenizersпапку та скопіюйте її punktв tokenizersпапку.

Це спрацює.! структура папки повинна бути такою, як показано на малюнку! 1


1
Це працює для мене, в моєму випадку я не зміг завантажити через nltk.download ... Тому я завантажив файл вручну з nltk.org/nltk_data і створив папку c: / nltk_data / tokenizers / punkt, і я скопіював усі Файли в цьому місці
Фермін Пітол

6

nltk має свої попередньо навчені моделі токенізатора. Модель завантажується з заздалегідь заданих веб-джерел і зберігається на шляху встановленого пакета nltk під час виконання наступних можливих викликів функцій.

Наприклад 1 tokenizer = nltk.data.load ('nltk: токенізатори / punkt / english.pickle')

Наприклад, 2 nltk.download ('punkt')

Якщо ви зателефонували у своєму коді над реченням, переконайтеся, що у вас підключення до Інтернету без захисту брандмауера.

Я хотів би поділитися ще кращим способом вирішити вищезгадану проблему з кращими глибшими розуміннями.

Виконайте наступні кроки і насолоджуйтесь англійською токенізацією слів за допомогою nltk.

Крок 1: Спочатку скачайте модель "english.pickle", слідуючи веб-шляху.

Перейдіть за посиланням " http://www.nltk.org/nltk_data/ " і натисніть "скачати" за опцією "107. Моделі токенізатора Punkt"

Крок 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

Повідомте мене, якщо ви зіткнулися з будь-якою проблемою


Дійсно приємна відповідь, якщо ви стоїте за дуже агресивним брандмауером.
каріато

5

На Jenkins це можна виправити, додавши подібний код до Virtualenv Builder на вкладці Build :

python -m nltk.downloader punkt

введіть тут опис зображення


4

Я зіткнувся з цією проблемою, коли я намагався зробити теги pos у nltk. я правильно зрозумів це, створивши новий каталог разом із каталогом корпорацій під назвою "taggers" та скопіювавши max_pos_tagger у теги тегів.
сподіваюся, що він працює і для вас. удачі з цим !!!.


4

У Spyder перейдіть до своєї активної оболонки та завантажте nltk, використовуючи нижче 2 команди. import nltk nltk.download () Тоді ви побачите відкрите вікно завантажувача NLTK, як показано нижче, перейдіть на вкладку "Моделі" у цьому вікні та натисніть "punkt" та завантажте "punkt"

Вікно



0

Дані токенізаторів punkt досить великі - понад 35 Мб , це може бути великою справою, якщо, як я, ви працюєте nltk в такому середовищі, як лямбда, що має обмежені ресурси.

Якщо вам потрібен лише один або, можливо, кілька мовних токенізаторів, ви можете різко зменшити розмір даних, включивши лише ці .pickleфайли мов .

Якщо вам потрібно лише підтримати англійську мову, то розмір даних nltk може бути зменшений до 407 Кб (для версії 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. Витягніть блискавку та перемістіть .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_dataпапки у вбудованих місцях, на які nltk шукає .


0

nltk.download()не вирішить це питання. Я спробував нижче, і це спрацювало для мене:

у '...AppData\Roaming\nltk_data\tokenizers'папці витягніть завантажену punkt.zipпапку в тому самому місці.


0

У програмі Python-3.6я бачу пропозицію в трассеці. Це цілком корисно. Тому я скажу, що ви, хлопці, зверніть увагу на помилку, яку ви отримали, більшість часу відповіді знаходяться в межах цієї проблеми;).

введіть тут опис зображення

І тоді, як пропонують інші люди тут, або використовуючи термінал python, або використовуючи команду, як python -c "import nltk; nltk.download('wordnet')"ми можемо встановити їх на льоту. Вам просто потрібно запустити цю команду один раз, і тоді вона збереже дані локально у вашому домашньому каталозі.


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 запам'ятовує шлях завантаження, пройдений у фукції завантаження. Якщо я завантажую наступний пакет, я отримую подібну помилку, як описано користувачем:

Багаторазове завантаження викликає помилку:

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 для отримання ресурсу:

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

Це працює ... Не впевнений, чому працює в одному випадку, а не в іншому, але повідомлення про помилку означає, що воно не перевіряється в папку для завантаження вдруге. Примітка: використання windows8.1 / python3.7 / nltk3.5

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.