Falha ao carregar english.pickle com nltk.data.load

144

Ao tentar carregar o punkttokenizer ...

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

... a LookupErrorfoi criado:

> 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
fonte
2
você pode baixar o modelo de picles usando>>> nltk.download()
alvas

Respostas:

261

Eu tenho esse mesmo problema. Entre em um shell python e digite:

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

Em seguida, uma janela de instalação é exibida. Vá para a guia 'Modelos' e selecione 'punkt' na coluna 'Identificador'. Em seguida, clique em Download e ele instalará os arquivos necessários. Então deve funcionar!

richardr
fonte
4
Observe que em algumas versões, não existe a guia Modelos e você pode ir para 'Download' e tentar obter o pacote 'punkt' ou usar qualquer opção de 'lista' para listar os pacotes disponíveis.
Ely
2
ele instala na minha pasta pessoal em um diretório nltk_data. Devo copiar este diretório do punkt para qualquer pasta da biblioteca nltk. pls ajuda
sumanth232
Não sei bem o que você quer dizer. tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')deve, em seguida, trabalho e você pode usar tokenizer assim: tokenizer.tokenize('The cat. The mat. It Sat.'). Aqui o nltk tenta resolver o caminho relativo em tokenizers/punkt/english.picklevários locais. Por exemplo, no Windows, ele aparece %APPDATA%\nltk_data\tokenizers\punkt\english.pickleou C:\nltk_data\tokenizers\punkt\english.pickle(o mesmo para D: e E :). Portanto, se você garantir que o arquivo punkt.zip esteja descompactado de maneira que exista um desses locais, ele poderá encontrá-lo.
Richardr
Como alternativa, configure sua NLTK_DATAvariável de ambiente para apontar para a pasta nltk_data para que ela %NLTK_DATA%\tokenizers\punkt\english.pickleexista.
Richardr
Se estiver executando em um sistema que não seja o X-Window (como por exemplo, em uma sshconexão), não haverá janela da GUI e, portanto, nenhuma guia 'Modelos'.
Mknaf #
95

Você pode fazer isso assim.

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

Você pode baixar os tokenizadores passando punktcomo argumento para a downloadfunção Os tokenizadores de palavras e frases estão disponíveis em nltk.

Se você deseja fazer o download de tudo isto chunkers, grammars, misc, sentiment, taggers, corpora, help, models,stemmers , tokenizers, não passar quaisquer argumentos como este.

nltk.download()

Veja isso para mais informações. https://www.nltk.org/data.html

Naren Yellavula
fonte
1
As respostas do Code Only são altamente desaprovadas. Por favor, adicione mais explicações à sua resposta. Como isso funciona? Por que é útil?
precisa
O que ele faz é simplesmente fazer o download das bibliotecas necessárias para permitir que o nltk faça qualquer trabalho de tokenização.
Itzik Gili
como usar 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 28/05/19
27

Isto é o que funcionou para mim agora:

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

sentenças_tokenizadas é uma lista de uma lista de tokens:

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

As frases foram extraídas do exemplo do caderno ipython que acompanha o livro "Mining the Social Web, 2nd Edition"

brincando
fonte
16

Na linha de comando do bash, execute:

$ python -c "import nltk; nltk.download('punkt')"
cgl
fonte
Recebo [nltk_data] Erro ao carregar punkt: Erro HTTP 405: Não permitido.
user2478236
1
@ user2478236 O GitHub bloqueou o downloader com HTTP 405 devido ao volume extremamente alto às vezes; veja github.com/nltk/nltk/issues/1787
John Vandenberg
1
Trabalhou para mim, isso cria uma pasta nltk_datano meu diretório pessoal e salva punkt nele. Eu tenho o Fedora 27, Py3.6.
MaNKuR 10/04
13

Isso funciona para mim:

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

No Windows, você também receberá o nltk downloader

NLTK Downloader

Roshan Bagdiya
fonte
9

Simples nltk.download() não resolverá esse problema. Eu tentei o abaixo e funcionou para mim:

na nltkpasta, crie uma tokenizerspasta e copie sua punktpasta para a tokenizerspasta.

Isso vai funcionar. a estrutura da pasta precisa ser como mostra a figura! 1

Deepthi Karnam
fonte
1
Isso funciona para mim, no meu caso não consegui fazer o download via nltk.download ... Então baixei o arquivo manualmente em nltk.org/nltk_data e criei uma pasta c: / nltk_data / tokenizers / punkt e copiei todas as arquivos neste local
Fermin Pitol
6

O nltk possui seus modelos de tokenizer pré-treinados. O modelo está sendo baixado de fontes da Web predefinidas internamente e armazenado no caminho do pacote nltk instalado enquanto é executado após possíveis chamadas de função.

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

Por exemplo, 2 nltk.download ('punkt')

Se você chamar a frase acima no seu código, verifique se possui conexão com a Internet sem nenhuma proteção de firewall.

Gostaria de compartilhar uma maneira melhor de alterar a rede para resolver o problema acima com entendimentos mais profundos e melhores.

Siga as etapas a seguir e aproveite a tokenização de palavras em inglês usando o nltk.

Etapa 1: Baixe o modelo "english.pickle" seguindo o caminho da web.

Vá para o link " http://www.nltk.org/nltk_data/ " e clique em "download" na opção "107. Modelos de Tokenizer Punkt"

Etapa 2: extraia o arquivo "punkt.zip" baixado e localize o arquivo "english.pickle" e coloque-o na unidade C.

Etapa 3: copie e cole o seguinte código e execute.

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

Deixe-me saber, se você enfrentar algum problema

Jignesh Vasoya
fonte
Resposta muito boa se você estiver atrás de um firewall muito agressivo.
Kryto #
5

No Jenkins, isso pode ser corrigido adicionando o seguinte código ao Virtualenv Builder na guia Build :

python -m nltk.downloader punkt

insira a descrição da imagem aqui

Abhijeet
fonte
4

me deparei com este problema quando eu estava tentando fazer a marcação pos no nltk. a maneira como eu o corrigi é criando um novo diretório junto com o diretório corpora chamado "taggers" e copiando max_pos_tagger nos taggers de diretório.
Espero que funcione para você também. Boa sorte com isso!!!.

Ashish Singh
fonte
4

No Spyder, vá para o seu shell ativo e faça o download do nltk usando abaixo de 2 comandos. import nltk nltk.download () Então você deverá ver a janela do NLTK Downloader aberta como abaixo: Vá para a guia 'Modelos' nesta janela e clique em 'punkt' e faça o download de 'punkt'

Janela

Krish
fonte
0

Verifique se você possui todas as bibliotecas NLTK.

Torrtuga
fonte
0

Os dados dos tokenizadores punkt são muito grandes, com mais de 35 MB , isso pode ser um grande problema se, como eu, você estiver executando o nltk em um ambiente como o lambda, que possui recursos limitados.

Se você precisar apenas de um ou talvez alguns tokenizadores de idioma, poderá reduzir drasticamente o tamanho dos dados incluindo apenas os .picklearquivos de idiomas .

Se tudo o que você precisa é oferecer suporte apenas ao inglês, o tamanho dos dados nltk poderá ser reduzido para 407 KB (para a versão python 3).

Passos

  1. Faça o download dos dados do nltk punkt: https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenizers/punkt.zip
  2. Em algum lugar do seu ambiente, crie as pastas nltk_data/tokenizers/punkt:, se estiver usando o python 3, adicione outra pasta PY3para que sua nova estrutura de diretórios se pareça nltk_data/tokenizers/punkt/PY3. No meu caso, criei essas pastas na raiz do meu projeto.
  3. Extraia o zip e mova os .picklearquivos para os idiomas que você deseja oferecer suporte para a punktpasta que você acabou de criar. Nota: Os usuários do Python 3 devem usar os pickles da PY3pasta. Com os arquivos de idioma carregados, ele deve se parecer com: exemplo-pasta-estrutura
  4. Agora você só precisa adicionar sua nltk_datapasta aos caminhos de pesquisa, supondo que seus dados não estejam em um dos caminhos de pesquisa predefinidos . Você pode adicionar os seus dados usando a variável de ambiente NLTK_DATA='path/to/your/nltk_data'. Você também pode adicionar um caminho personalizado em tempo de execução em python, fazendo:
from nltk import data
data.path += ['/path/to/your/nltk_data']

NOTA: Se você não precisar carregar os dados em tempo de execução ou agrupar os dados com o seu código, seria melhor criar suas nltk_datapastas nos locais internos procurados pelo nltk .

Trent Holliday
fonte
0

nltk.download()não resolverá esse problema. Eu tentei o abaixo e funcionou para mim:

na '...AppData\Roaming\nltk_data\tokenizers'pasta, extraia a punkt.zippasta baixada no mesmo local.

bishnarender
fonte
0

Em Python-3.6posso ver a sugestão no traceback. Isso é bastante útil. Portanto, direi a vocês que prestem atenção ao erro que obtiveram, na maioria das vezes as respostas estão dentro desse problema;).

insira a descrição da imagem aqui

E então, como sugerido por outras pessoas aqui, usando o terminal python ou usando um comando como python -c "import nltk; nltk.download('wordnet')"podemos instalá-los em tempo real. Você só precisa executar esse comando uma vez e, em seguida, ele salvará os dados localmente no seu diretório pessoal.

MaNKuR
fonte
0

Eu tive um problema semelhante ao usar uma pasta atribuída para vários downloads e precisei anexar o caminho de dados manualmente:

download único, pode ser obtido da seguinte forma (obras)

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

Esse código funciona, o que significa que o nltk se lembra do caminho de download passado na função de download. Por outro lado, se eu baixar um pacote subsequente, recebo erro semelhante ao descrito pelo usuário:

Vários downloads geram um erro:

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

Erro:

Punkt de recurso não encontrado. Por favor, use o NLTK Downloader para obter o recurso:

import nltk nltk.download ('punkt')

Agora, se eu anexar o caminho de dados ntlk ao meu caminho de download, ele funcionará:

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

Isso funciona ... Não sei por que funciona em um caso, mas não no outro, mas a mensagem de erro parece sugerir que ele não entra na pasta de download pela segunda vez. NB: usando windows8.1 / python3.7 / nltk3.5

Nono London
fonte