加载带有 nltk.data.load 的 english.pickle 失败

当试图加载 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'
>     **********************************************************************
206328 次浏览

我也遇到过同样的问题,进入一个 python shell 并输入:

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

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

我在 nltk 做贴标签的时候遇到了这个问题。 正确的方法是创建一个名为“ taggers”的新目录以及一个名为“ taggers”的语料库目录,并在目录 taggers 中复制 max _ pos _ tagger。
希望对你也有用。祝你好运! ! 。

出现这个错误的主要原因是 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函数传递任何参数,它就会下载所有包,即 chunkersgrammarsmiscsentimenttaggerscorporahelpmodelsstemmerschunkers0。

nltk.download()

上面的函数将包保存到一个特定的目录。您可以在这里的注释中找到该目录的位置

简单的 nltk.download()不能解决这个问题。我试了下面的方法,它对我很有效:

nltk文件夹中创建一个 tokenizers文件夹并将 punkt文件夹复制到 tokenizers文件夹中。

这将工作。 ! 文件夹结构需要如图所示! 1

这就是刚才对我奏效的方法:

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

Instance _ 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 笔记本

检查是否有所有的 NLTK 库。

Nltk 有预先训练好的 tokenizer 模型。模型是从内部预定义的 Web 源下载,并存储在安装的 nltk 包的路径,同时执行以下可能的函数调用。

例如1 Tokenizer = nltk.data.load (‘ nltk: tokenizer/ponkt/english.pickle’)

例如2 下载(‘ Punkt’)

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

我想分享一些更好的交互网方式来解决上述问题,有更好的深刻理解。

请按照以下步骤使用 nltk 进行英语单词标记。

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

前往链接“ http://www.nltk.org/nltk_data/”,并点击“下载”在选项“107.Punkt Tokenizer 模型”

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

如果你遇到什么问题就告诉我

从 bash 命令行运行:

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

对于詹金斯,可以通过在 建造选项卡下向 Virtualenv Builder添加如下代码来修复:

python -m nltk.downloader punkt

enter image description here

这对我有用:

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

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

NLTK Downloader

Punk 标记数据在 35MB以上是相当大的,如果您像我一样在资源有限的环境(如 lambda)中运行 nltk,那么这可能是一个大问题。

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

如果您只需要支持英语,那么您的 nltk 数据大小可以减少到 407KB(对于 python3版本)。

步骤

  1. 下载 nltk punk 数据: https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenizers/punkt.zip
  2. 在您的环境中的某个地方创建文件夹: nltk_data/tokenizers/punkt,如果使用 python3,则添加另一个文件夹 PY3,使您的新目录结构看起来像 nltk_data/tokenizers/punkt/PY3。在我的例子中,我在项目的根目录中创建了这些文件夹。
  3. 解压缩压缩文件并将希望支持的语言的 .pickle文件移动到刚才创建的 punkt文件夹中。加载了语言文件后,它应该看起来像: 示例-文件夹-结构
  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文件夹。

在 Spyder 中,使用以下2个命令进入活动 shell 并下载 nltk。 进口网络 Download () 然后你会看到 NLTK 下载窗口如下所示打开,转到这个窗口的“模特”选项卡,点击“ Punkt”下载“ Punkt”

Window

nltk.download()不能解决这个问题。我尝试了下面的方法,它对我很有效:

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

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

enter image description here

然后,正如这里的其他人建议的那样,要么使用 Python 终端,要么使用像 python -c "import nltk; nltk.download('wordnet')"这样的命令,我们可以动态安装它们。 您只需要运行该命令一次,然后它就会将数据保存在您的主目录中。

在使用指定的文件夹进行 多个下载时,我遇到了类似的问题,我必须手动添加数据路径:

单次下载,可以实现如下(工程)

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 记住下载函数中传递的下载路径。在其他 nads 上,如果我下载一个后续的软件包,我会得到与用户描述类似的错误:

多次下载引发错误:

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

进口网络 下载(‘ 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

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

import nltk

按回车键并重新输入->

nltk.download()

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

enter image description here

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

import nltk
nltk.download('punkt')

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

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

我一定是因为这个浪费了好几个小时,而这个代码似乎解决了我的问题。

参考文献:

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