如何测试运行我的代码的机器上是否已安装nltk资源?

时间:2014-05-16 21:03:44

标签: python nlp nltk

我刚刚开始了我的第一个NLTK项目,并对正确的设置感到困惑。我需要几个资源,如Punkt Tokenizer和maxent pos tagger。我自己使用GUI nltk.download()下载了它们。对于我的合作者,我当然希望自动下载这些内容。我还没有在文档中找到任何惯用的代码。

我是否应该将nltk.data.load('tokenizers/punkt/english.pickle')及其类似内容放入代码中?这是在每次运行脚本时下载资源吗?我是否向用户(即我的共同开发者)提供了有关下载内容以及为什么需要这么长时间的反馈?那里必须有适合工作的装备,对吗? :)

//编辑以探讨我的问题:
如何测试运行我的代码的机器上是否已经安装了nltk资源(如Punkt Tokenizer),如果不是,则安装它?

1 个答案:

答案 0 :(得分:15)

您可以使用nltk.data.find()功能,请参阅https://github.com/nltk/nltk/blob/develop/nltk/data.py

>>> import nltk
>>> nltk.data.find('tokenizers/punkt.zip')
ZipFilePathPointer(u'/home/alvas/nltk_data/tokenizers/punkt.zip', u'')

当资源不可用时,您会发现错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/nltk-3.0a3-py2.7.egg/nltk/data.py", line 615, in find
    raise LookupError(resource_not_found)
LookupError: 
**********************************************************************
  Resource u'punkt.zip' not found.  Please use the NLTK Downloader
  to obtain the resource:  >>> nltk.download()
  Searched in:
    - '/home/alvas/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
**********************************************************************

最有可能的是,您希望执行类似的操作以确保您的协作者拥有该包:

>>> try:
...     nltk.data.find('tokenizers/punkt')
... except LookupError:
...     nltk.download('punkt')
... 
[nltk_data] Downloading package punkt to /home/alvas/nltk_data...
[nltk_data]   Package punkt is already up-to-date!
True