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

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


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»


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


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

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


4

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


4

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

Окно



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папку в том же месте.


0

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

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

И затем, как предлагают другие люди здесь, либо с помощью терминала 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 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.