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

2025-04-15 09:18:00
admin
原创
29
摘要:问题描述:当尝试加载punkt标记器时...import nltk.data tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle') ...有人LookupError提出:> LookupError: > **...

问题描述:

当尝试加载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'
>     **********************************************************************

解决方案 1:

我遇到了同样的问题。进入 Python Shell 并输入:

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

然后会出现一个安装窗口。转到“模型”选项卡,在“标识符”列下选择“punkt”。然后点击“下载”,系统就会安装所需的文件。然后就可以正常工作了!

解决方案 2:

您看到该错误的主要原因是 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`miscsentimenttaggerscorporahelpmodelsstemmers`tokenizers

nltk.download()

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

解决方案 3:

这就是刚才对我有用的东西:

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

这些句子取自《挖掘社交网络,第二版》一书附带的示例 ipython 笔记本

解决方案 4:

从 bash 命令行运行:

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

解决方案 5:

这对我有用:

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

在 Windows 中你还会得到 nltk 下载器

NLTK 下载器

解决方案 6:

简单方法nltk.download()并不能解决这个问题。我尝试了以下方法,并且有效:

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

这会起作用!文件夹结构需要如图所示!1

解决方案 7:

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

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

例如 2 nltk.download('punkt')

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

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

请按照以下步骤使用 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

如果您遇到任何问题,请告诉我

解决方案 8:

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

python -m nltk.downloader punkt

在此处输入图片描述

解决方案 9:

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

窗户

解决方案 10:

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

单独下载,可按如下方式实现(有效)

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

解决方案 11:

我在 nltk 中尝试进行词性标注时遇到了这个问题。我解决此问题的方法是:在语料库目录的基础上新建一个名为“taggers”的目录,并将 max_pos_tagger 复制到 taggers 目录中。

希望这个方法也能帮到你。祝你好运!!!

解决方案 12:

我在Python-3.6回溯中看到了这个建议。这很有帮助。所以我建议大家注意自己遇到的错误,大多数情况下答案就在这个问题里 ;)。

在此处输入图片描述

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

解决方案 13:

你只需要进入 python 控制台并输入->

import nltk

按 Enter 键并重新输入->

nltk.download()

然后会出现一个界面。只需搜索下载按钮并点击即可。它会安装所有必需的程序,但需要一些时间。请耐心等待,然后再试一次。您的问题会得到解决。

解决方案 14:

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

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

我肯定因此浪费了几个小时,而这段代码似乎解决了我的问题。

参考:

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

解决方案 15:

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

解决方案 16:

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 用户应使用该文件夹中的 pickle 文件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 查找的内置位置创建文件夹。

解决方案 17:

nltk.download()无法解决这个问题。我尝试了以下方法,效果不错:

在文件夹中,在同一位置`'...AppDataRoaming
ltk_data okenizers'提取下载的文件夹。punkt.zip`

解决方案 18:

在此处输入图片描述

只需添加下面两行:-

import nltk
nltk.download('punkt')

解决方案 19:

尝试使用这个:

import nltk
nltk.download('punkt_tab')
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2482  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1533  
  PLM(产品生命周期管理)项目对于企业优化产品研发流程、提升产品质量以及增强市场竞争力具有至关重要的意义。然而,在项目推进过程中,范围蔓延是一个常见且棘手的问题,它可能导致项目进度延迟、成本超支以及质量下降等一系列不良后果。因此,有效避免PLM项目范围蔓延成为项目成功的关键因素之一。以下将详细阐述三大管控策略,助力企业...
plm系统   0  
  PLM(产品生命周期管理)项目管理在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和产品复杂度的提升,PLM项目面临着诸多风险。准确量化风险优先级并采取有效措施应对,是确保项目成功的关键。五维评估矩阵作为一种有效的风险评估工具,能帮助项目管理者全面、系统地评估风险,为决策提供有力支持。五维评估矩阵概述...
免费plm软件   0  
  引言PLM(产品生命周期管理)开发流程对于企业产品的全生命周期管控至关重要。它涵盖了从产品概念设计到退役的各个阶段,直接影响着产品质量、开发周期以及企业的市场竞争力。在当今快速发展的科技环境下,客户对产品质量的要求日益提高,市场竞争也愈发激烈,这就使得优化PLM开发流程成为企业的必然选择。缺陷管理工具和六西格玛方法作为...
plm产品全生命周期管理   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用