NLTK 数据过期 - Python 3.4

8
我正在尝试为Python 3.4安装NLTK。实际的NLTK模块似乎已经安装完成了。然后我运行了以下命令:
import nltk

nltk.download()

我选择下载了所有东西,但是当下载完成后,窗口显示“已过期”。我尝试了刷新和重新下载,但它仍然像这样显示“已过期”:NLTK Window 1

我在网上搜索并尝试了各种修复方法,但我还没有找到对我的情况有帮助的解决方案。

我也尝试手动查找缺失的部分,结果发现缺失的部分是“Open Multilingual Wordnet”和“Wordnet”。以下是我如何找到缺失部分的方法:Open Multilingual Wordnet

我该怎么办?我应该卸载并重新安装NLTK吗?我还没有找到删除包的方法(除非手动删除)。

编辑:关于解决方案2和解决方案3: 更多关于解决方案2问题的澄清:

如果某些内容已成功下载,则输出如下:

>>> nltk.download('subjectivity')
[nltk_data] Downloading package subjectivity to
[nltk_data]     C:\Users\Shane\AppData\Roaming\nltk_data...
[nltk_data]   Package subjectivity is already up-to-date!
True

然而,当我重新下载“wordnet”和“omw”时,会发生以下情况:
>>> nltk.download('omw')
[nltk_data] Downloading package omw to
[nltk_data]     C:\Users\Shane\AppData\Roaming\nltk_data...
[nltk_data]   Unzipping corpora\omw.zip.
True

1
你使用的是哪个操作系统? - alvas
2个回答

16

简而言之:

不要使用图形用户界面(GUI),在Python解释器中添加所有包。

$ python3
>>> import nltk
>>> nltk.download('all')

详细解释:

可能是由于最近添加了Open Multilingual WordNet,NLTK下载GUI界面和索引出现了一些问题。

解决方案1:

简单地使用nltk.download() GUI并下载这两个包而不全选。(可能不起作用但值得尝试)

解决方案2:

通过Python解释器单独安装该软件包:

>>> import nltk
>>> nltk.download('wordnet')
>>> nltk.download('omw') # Open Multilingual WordNet

解决方案3:

nltk.download('all') 通过其索引检查所有软件包并下载它们,如果它们不可用。

>>> import nltk
>>> nltk.downlad('all')

注意:如果任何文件因为网络连接中断而损坏,只需找到存储NLTK数据的目录,然后执行解决方案3。

要找到存储nltk_data的位置,nltk.data.path 存储可能的位置:

>>> import nltk
>>> nltk.data.path
['/home/alvas/nltk_data', '/usr/share/nltk_data', '/usr/local/share/nltk_data', '/usr/lib/nltk_data', '/usr/local/lib/nltk_data']

由于数据下载的目的是为了使用它们,以确保您没有丢失所需的组件,如果您需要的是wordnetomw,您可以尝试以下操作:


>>> from nltk.corpus import wordnet as wn
>>> wn.synsets('bank')[0]
Synset('bank.n.01')
>>> wn.synsets('bank')[0].lemma_names('spa')
['margen', 'orilla', 'vera']
>>> wn.synsets('bank')[0].lemma_names('fre')
['rive', 'banque']
不要过于担心GUI上显示的内容。一旦nltk.download('all')没有错误地完成,就意味着您已经拥有了NLTK支持的所有语料库和模型。
但是作为一个好的实践,请在https://github.com/nltk/nltk_data/issues提出问题,以便开发人员可以检查是否可以重现该问题。也请展示更多的错误截图,包括提议解决方案之前和之后的截图=)

感谢您的回复。我已经尝试了解决方案1,但它没有解决问题。我还尝试了解决方案2,但是当我在GUI中查看时,它仍然显示“过时”。此外,如果我尝试通过该方法重新下载“wordnet”和“omw”,它会重新下载,好像之前不存在一样(而不是说“xyz已经是最新的”)。我刚刚尝试了解决方案3。我如何知道它是否正常工作?在GUI中,'wordnet'和'omw'仍然显示“过时”。如果我在解决方案3之后应用解决方案2,它也会重新下载,好像之前不存在一样。 - pyman
请参见上面的解决方案2问题(抱歉我无法在此正确输入代码) - pyman
GUI和命令行检查是相同的-当出现这种情况时,通常是因为自上次nltk索引(位于https://github.com/nltk/nltk_data/blob/gh-pages/index.xml)生成以来外部包已更改...因此,“索引已过期”可能意味着您不是最新版本,因为您有旧版本的软件包或者您有更新的版本。 - MartyMacGyver
不建议使用 GUI 的原因是因为 GUI 存在错误。实际上,我的包从未在 GUI 上更新,因为无论我如何使用最新的索引更新所有包,它仍将它们显示为未安装的包。因此,请避免使用 GUI。另外,当内核被终止时,GUI 会出现混乱,tkinter 就会挂起。 - alvas

2
不要担心“过时”的消息,这是浪费时间。继续使用nltk即可。
NLTK的数据资源几乎完全独立。您可能永远没有理由使用标记为“过时”的包之一,但即使您需要使用它们,它们也很可能已经完全安装并可用。
尽管如此,我也遇到了这种情况,这就是我发现的:如果下载器在其下载文件夹中检测到不在资源清单中的文件,则会认为该资源“过时”。也许有时是由于配置不当的资源引起的,但如果您使用目录浏览器访问相关资源,则可能会因GUI、编辑器或其他原因留下杂项文件而导致不匹配。例如,在Mac上,Finder会在访问的目录中留下一个.DS_Store文件。
但是正如我所说,“问题”实际上并不值得解决。享受NLTK吧!
附言:据我所知,刷新nltk_data目录的最佳(实际上是唯一)方法是删除整个目录并重新下载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接