Python 无法使用nltk.data.load加载english.pickle

Python 无法使用nltk.data.load加载english.pickle,python,jenkins,nltk,Python,Jenkins,Nltk,尝试加载punkt标记器时 import nltk.data tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle') …引发了一个LookupError: > LookupError: > ********************************************************************* > Resource 'tokenizers/punkt

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

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

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

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

我在尝试使用nltk进行词性标注时遇到了这个问题。 我得到正确答案的方法是,创建一个新目录以及名为“taggers”的corpora目录,并在目录taggers中复制max_pos_tagger。

希望它对你也有用。祝你好运

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

你可以像这样下载
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'
    - ''
**********************************************************************
如果不向
下载
函数传递任何参数,它将下载所有包,即
分块器
语法
杂项
情感
标记器
语料库
帮助
模型
词干
标记器

nltk.download()
上述功能将包保存到特定目录。您可以从这里的注释中找到该目录位置

Simple
nltk.download()
无法解决此问题。我尝试了下面的方法,效果很好:

nltk
文件夹中创建
tokenizers
文件夹,并将
punkt
文件夹复制到
tokenizers
文件夹中


这会有用的。!文件夹结构需要如图所示

这就是刚才对我起作用的原因:

# 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))
句子\u标记化是一个标记列表:

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

这些句子取自示例

检查是否有所有NLTK库。

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

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

例2 nltk.download('punkt')

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

我想和大家分享一些更好的方法,以更好的理解来解决上述问题

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

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

转到链接“”并单击选项“107.Punkt标记器模型”处的“下载”

步骤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')"

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

python-m nltk.downloader punkt

这对我来说很有用:

>>> import nltk
>>> nltk.download()
在windows中,您还将获得nltk下载程序


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

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

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

台阶
  • 下载nltk punkt数据:
  • 在您的环境中的某个地方创建文件夹:
    nltk_数据/tokenizers/punkt
    ,如果使用python 3,请添加另一个文件夹
    PY3
    ,以便新的目录结构看起来像
    nltk_数据/tokenizers/punkt/PY3
    。在我的例子中,我在项目的根目录下创建了这些文件夹
  • 解压缩zip文件并将您想要支持的语言的
    .pickle
    文件移动到刚刚创建的
    punkt
    文件夹中注意:Python 3用户应该使用
    PY3
    文件夹中的pickle。
    加载语言文件后,它应该看起来像:
  • 现在您只需将
    nltk_data
    文件夹添加到搜索路径,假设您的数据不在其中一个路径中。您可以使用环境变量
    NLTK_data='path/将数据添加到/your/NLTK_data'
    。您还可以通过以下操作在python运行时添加自定义路径:
  • 从nltk导入数据
    data.path+=['/path/to/your/nltk_data']
    

    注意:如果您不需要在运行时加载数据或将数据与代码捆绑在一起,最好在Spyder中的

    中创建
    nltk_数据
    文件夹,转到活动shell并使用以下2个命令下载nltk。 导入nltk nltk.download() 然后您应该看到NLTK downloader窗口如下所示打开,转到该窗口中的“模型”选项卡,单击“punkt”并下载“punkt”

    nltk.download()
    无法解决此问题。我尝试了下面的方法,效果很好:


    “…AppData\Roaming\nltk_data\tokenizers”
    文件夹中,提取相同位置下载的
    punkt.zip
    文件夹。

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

    然后,正如其他人所建议的,使用python终端或使用类似
    py的命令
    
    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')
    
    
    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."))
    
    
    
    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."))
    
    
    import nltk
    
    nltk.download()