173

尝试加载punkt标记器时...

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

...aLookupError提出:

> 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'
>     **********************************************************************
4

18 回答 18

296

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

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

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

于 2012-06-01T15:12:26.043 回答
113

您看到该错误的主要原因是 nltk 找不到punkt包。由于nltk套件的大小,安装时默认情况下不会下载所有可用的软件包。

你可以下载punkt这样的包。

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

在更新版本的错误消息中也建议这样做:

LookupError: 
**********************************************************************
  Resource punkt not found.
  Please use the NLTK Downloader to obtain the resource:

  >>> import nltk
  >>> nltk.download('punkt')
  
  Searched in:
    - '/root/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
    - '/usr/nltk_data'
    - '/usr/lib/nltk_data'
    - ''
**********************************************************************

如果您不向download函数传递任何参数,它将下载所有包,即chunkers, grammars, misc, sentiment, taggers, corpora, help, models, stemmers, tokenizers

nltk.download()

上述函数将包保存到特定目录。您可以从此处的评论中找到该目录位置。https://github.com/nltk/nltk/blob/67ad86524d42a3a86b1f5983868fd2990b59f1ba/nltk/downloader.py#L1051

于 2014-12-30T13:50:10.347 回答
28

这就是刚才对我有用的方法:

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

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

这些句子取自“挖掘社交网络,第 2 版”一书的示例 ipython 笔记本

于 2015-07-17T08:00:45.997 回答
17

从 bash 命令行,运行:

$ python -c "import nltk; nltk.download('punkt')"
于 2017-05-26T18:50:31.523 回答
13

这对我有用:

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

在 Windows 中,您还将获得 nltk 下载器

NLTK 下载器

于 2018-06-16T04:21:03.810 回答
11

简单nltk.download()不会解决这个问题。我尝试了以下方法,它对我有用:

nltk文件夹中创建一个tokenizers文件夹并将您的文件夹复制punkttokenizers文件夹中。

这会奏效。!文件夹结构需要如图所示!1

于 2015-04-01T11:53:38.407 回答
6

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

窗户

于 2019-06-29T05:28:07.087 回答
6

nltk 有其预训练的标记器模型。模型从内部预定义的 Web 源下载并存储在已安装的 nltk 包的路径中,同时执行以下可能的函数调用。

例如 1 标记器 = nltk.data.load('nltk:tokenizers/punkt/english.pickle')

例如 2 nltk.download('punkt')

如果您在代码中调用上述语句,请确保您有没有任何防火墙保护的互联网连接。

我想分享一些更好的alter-net方法来解决上述问题,并有更深入的理解。

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

第 1 步:首先按照 web 路径下载“english.pickle”模型。

转到链接“ http://www.nltk.org/nltk_data/ ”并单击选项“107.Punkt Tokenizer Models”中的“下载”

步骤2:解压下载的“punkt.zip”文件并从中找到“english.pickle”文件并放入C盘。

第三步:复制粘贴以下代码并执行。

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

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

于 2017-03-17T05:15:41.043 回答
6

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

python -m nltk.downloader punkt

在此处输入图像描述

于 2018-01-29T04:00:13.330 回答
4

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

于 2013-02-05T15:54:56.543 回答
3

使用分配的文件夹进行多次下载时我遇到了类似的问题,我不得不手动附加数据路径:

单次下载,可按如下方式实现(作品)

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


错误:

找不到资源punkt。请使用 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

于 2020-05-30T09:26:52.707 回答
2

Python-3.6我可以看到回溯中的建议。这很有帮助。因此,我会说你们要注意你得到的错误,大多数时候答案都在那个问题之内;)。

在此处输入图像描述

然后按照这里其他人的建议,要么使用 python 终端,要么使用python -c "import nltk; nltk.download('wordnet')"我们可以即时安装它们的命令。您只需要运行该命令一次,然后它将数据本地保存在您的主目录中。

于 2020-04-10T12:04:15.003 回答
1

您只需要转到 python 控制台并输入->

import nltk

按回车并重新输入->

nltk.download()

然后会出现一个界面。只需搜索下载按钮并按下它。它将安装所有必需的项目并且需要时间。给点时间,然后再试一次。你的问题会得到解决

于 2020-12-07T02:38:39.893 回答
0

punkt tokenizers 数据非常大,超过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创建文件夹。

于 2019-05-16T16:27:53.443 回答
0

nltk.download()不会解决这个问题。我尝试了以下方法,它对我有用:

'...AppData\Roaming\nltk_data\tokenizers'文件夹中,将下载的文件夹解压缩punkt.zip到同一位置。

于 2019-08-21T15:45:44.927 回答
0

在此处输入图像描述

只需添加下面给出的两行:-

import nltk
nltk.download('punkt')
于 2021-10-02T15:16:57.817 回答
0

检查您是否拥有所有 NLTK 库。

于 2016-09-11T15:36:27.810 回答
0

如果上述所有策略都不起作用(对我来说就是这种情况),只需运行以下代码:

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

我一定因此浪费了时间,这段代码似乎解决了我的问题。

参考:

https://www.nltk.org/howto/data.html

于 2021-12-20T16:34:00.610 回答