使用nltk.data.load加载english.pickle失败


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

Answers:


261

我有同样的问题。进入python shell并输入:

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

然后出现安装窗口。转到“模型”标签,然后从“标识符”列下选择“ punkt”。然后单击下载,它将安装必要的文件。然后它应该工作!


4
请注意,在某些版本中,没有“模型”选项卡,您可以转到“下载”并尝试获取软件包“ punkt”,或使用任何“列表”选项列出可用的软件包。
2014年

2
它安装在目录nltk_data的主目录中。我应该将此punkt目录复制到任何nltk库文件夹中。请帮助
sumanth232

我不确定你是什么意思。tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')然后应该可以使用,您可以像这样使用tokenizer :tokenizer.tokenize('The cat. The mat. It Sat.')。在这里,nltk尝试解决tokenizers/punkt/english.pickle多个位置的相对路径。例如,在Windows上,它查找为%APPDATA%\nltk_data\tokenizers\punkt\english.pickleC:\nltk_data\tokenizers\punkt\english.pickle(对于D:和E:相同)。因此,如果确保以某种方式存在的位置解压缩punkt.zip文件,则应该可以找到它。
richardr 2015年

或者,将NLTK_DATA环境变量设置为指向nltk_data文件夹,以使其%NLTK_DATA%\tokenizers\punkt\english.pickle存在。
richardr

如果在非X窗口系统上运行(例如通过ssh连接),将没有GUI窗口,因此没有“模型”选项卡。
mknaf '16

95

您可以这样做。

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

您可以通过将punkt参数传递为函数来下载令牌生成器download。然后可以在上使用单词和句子标记器nltk

如果你想下载的一切,即chunkersgrammarsmiscsentimenttaggerscorporahelpmodelsstemmerstokenizers,不通过任何这样的论点。

nltk.download()

请参阅此以获得更多见解。https://www.nltk.org/data.html


1
仅限代码的答案不被接受。请在回答中添加更多说明。如何运作?为什么有用?
RubberDuck

它所做的只是下载所需的库以允许nltk执行任何标记化工作。
Itzik Gili

如何使用分词器?
luckyhandler '18

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

words_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笔记本。


16

从bash命令行运行:

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

我收到[nltk_data]加载punkt时出错:HTTP错误405:不允许。
user2478236

1
@ user2478236 GitHub有时由于HTTP 405的数量过大而一直阻止其下载;参见github.com/nltk/nltk/issues/1787
John Vandenberg

1
为我工作,这会nltk_data在我的主目录中创建文件夹并将punkt保存到其中。我有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具有其预训练的令牌生成器模型。模型是从内部预定义的Web资源下载的,并在执行以下可能的函数调用时存储在已安装的nltk软件包的路径中。

例如1个tokenizer = nltk.data.load('nltk:tokenizers / punkt / english.pickle')

例如2 nltk.download('punkt')

如果您在代码中调用上述句子,请确保您具有Internet连接且没有任何防火墙保护。

我想分享一些更好的替代网络方法,以更深刻的理解来解决上述问题。

请按照以下步骤操作,并使用nltk享受英语单词标记化。

步骤1:首先按照网络路径下载“ english.pickle”模型。

转到链接“ http://www.nltk.org/nltk_data/ ”,然后在选项“ 107. Punkt Tokenizer Models”上单击“下载”。

步骤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

让我知道,如果您遇到任何问题


如果您使用的是非常主动的防火墙,这是一个很好的答案。
kariato

5

在Jenkins上,可以通过在Build选项卡下的Virtualenv Builder中添加以下类似代码来解决此问题

python -m nltk.downloader punkt

在此处输入图片说明


4

当我尝试在nltk中进行pos标记时遇到了这个问题。我得到它的正确方法是通过创建一个新目录以及名为“ taggers”的语料库目录,然后在目录标记器中复制max_pos_tagger。
希望它也对您有用。祝你好运!!!


4

在Spyder中,转到您的活动外壳并使用以下2个命令下载nltk。import nltk nltk.download()然后,您应该看到NLTK下载器窗口打开,如下所示,转到此窗口中的“模型”选项卡,然后单击“ punkt”并下载“ punkt”

窗口



0

punkt令牌生成器数据非常大,超过35 MB,如果像我一样,您在lambda这样的资源有限的环境中运行nltk,这可能是一件大事。

如果只需要一种或几种语言标记器,则可以通过仅包含那些语言.pickle文件来大大减少数据的大小。

如果您只需要支持英语,那么您的nltk数据大小可以减少到407 KB(对于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查找nltk_data内置位置创建文件夹。


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下载器获取资源:

导入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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.