Не удалось загрузить 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

Ответы:

262

У меня была такая же проблема. Зайдите в оболочку Python и введите:

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

Затем появится окно установки. Перейдите на вкладку «Модели» и выберите «пункт» из столбца «Идентификатор». Затем нажмите «Загрузить», и он установит необходимые файлы. Тогда это должно работать!

richardr
источник
4
Обратите внимание, что в некоторых версиях вкладка «Модели» отсутствует, и вы можете перейти к «Загрузить» и попытаться получить пакет «пункт» или использовать любые опции «список» для вывода списка доступных пакетов.
Ely
2
он устанавливается в мою домашнюю папку в каталоге nltk_data. Должен ли я скопировать этот каталог punkt в любую папку библиотеки nltk. Просьба помочь
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соединение), окно GUI не будет отображаться и, следовательно, не будет вкладки «Модели».
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 мог выполнять любую работу по токенизации.
Ицик Гили
как использовать токенизаторы?
счастливчик
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))

предложений_токенизация - это список списка токенов:

[['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, сопровождающей книгу «Mining the Social Web, 2nd Edition»

jjinking
источник
16

Из командной строки bash запустите:

$ python -c "import nltk; nltk.download('punkt')"
ВКТ
источник
Я получаю [nltk_data] Ошибка загрузки пункта: Ошибка HTTP 405: Не разрешено.
user2478236
1
@ user2478236 GitHub блокировал загрузчик с помощью HTTP 405 из-за чрезвычайно большого объема порой; см. github.com/nltk/nltk/issues/1787
Джон Ванденберг,
1
Работал для меня, это создает папку nltk_dataв моем домашнем каталоге и сохраняет пункт в нем. У меня есть Fedora 27, Py3.6.
MaNKuR
13

Это работает для меня:

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

В Windows вы также получите загрузчик NLTK

NLTK Downloader

Рошан Багдия
источник
9

Простой nltk.download()не решит эту проблему. Я попробовал ниже, и это сработало для меня:

в nltkпапке создайте tokenizersпапку и скопируйте вашу punktпапку в tokenizersпапку.

Это будет работать. структура папок должна быть такой, как показано на рисунке! 1

Дипти Карнам
источник
1
Это работает для меня, в моем случае я не смог загрузить через nltk.download ... Поэтому я скачал файл вручную с nltk.org/nltk_data и создал папку c: / nltk_data / tokenizers / punkt, и я скопировал все файлы в этом месте
Fermin Pitol
6

У nltk есть свои предварительно обученные модели токенизаторов. Модель загружается из предварительно определенных веб-источников и сохраняется по пути установленного пакета nltk, выполняя следующие возможные вызовы функций.

Например, 1 tokenizer = nltk.data.load ('nltk: tokenizers / punkt / english.pickle')

Например, 2 nltk.download ('пункт')

Если вы вызываете вышеприведенное предложение в своем коде, убедитесь, что у вас есть подключение к Интернету без каких-либо брандмауэров.

Я хотел бы поделиться более лучшим альтернативным способом решения вышеуказанной проблемы с более глубоким пониманием.

Пожалуйста, выполните следующие шаги и наслаждайтесь токенизацией английского слова, используя 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

На Дженкинс это может быть исправлено путем добавления следующего подобным кода в Virtualenv Builder под сборкой вкладки:

python -m nltk.downloader punkt

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

Abhijeet
источник
4

я столкнулся с этой проблемой, когда я пытался сделать pos-теги в nltk. способ, которым я получил это правильно, состоит в том, чтобы создать новый каталог вместе с корпоративным каталогом с именем "taggers" и скопировать max_pos_tagger в тегах каталога.
надеюсь, что это работает и для вас. удачи с ним !!!

Ашиш Сингх
источник
4

В Spyder перейдите в свою активную оболочку и загрузите nltk, используя нижеприведенные 2 команды. import nltk nltk.download () Затем вы должны увидеть окно загрузчика NLTK, открытое, как показано ниже, перейдите на вкладку «Модели» в этом окне, нажмите «пункт» и загрузите «пункт»

Окно

Криш
источник
0

Проверьте, есть ли у вас все библиотеки NLTK.

Torrtuga
источник
0

Данные токенайзеров punkt довольно велики - более 35 МБ , это может быть очень важно, если, как и я, вы запускаете nltk в среде, такой как lambda, с ограниченными ресурсами.

Если вам нужен только один или, возможно, несколько языковых токенизаторов, вы можете резко уменьшить размер данных, включив только эти языки. .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. Извлеките 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_data папки во встроенных местах, которые ищет nltk .

Трент Холлидей
источник
0

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

в '...AppData\Roaming\nltk_data\tokenizers'папке, извлеките загруженную punkt.zipпапку в том же месте.

bishnarender
источник
0

В Python-3.6I можно увидеть предложение в отладочных сообщениях . Это довольно полезно. Поэтому я скажу вам, ребята, чтобы вы обратили внимание на ошибку, которую вы получили, в большинстве случаев ответы находятся внутри этой проблемы;).

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

И затем, как предлагают другие люди здесь, либо с помощью терминала Python, либо с помощью команды, как python -c "import nltk; nltk.download('wordnet')"мы можем установить их на лету. Вам просто нужно выполнить эту команду один раз, и тогда она сохранит данные локально в вашем домашнем каталоге.

MaNKuR
источник
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 Downloader для получения ресурса:

import nltk nltk.download ('пункт')

Теперь, если я добавляю путь данных 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

Ноно Лондон
источник