我刚刚开始了我的第一个NLTK项目,并对正确的设置感到困惑。我需要几个资源,如Punkt Tokenizer和maxent pos tagger。我自己使用GUI nltk.download()
下载了它们。对于我的合作者,我当然希望自动下载这些内容。我还没有在文档中找到任何惯用的代码。
我是否应该将nltk.data.load('tokenizers/punkt/english.pickle')
及其类似内容放入代码中?这是在每次运行脚本时下载资源吗?我是否向用户(即我的共同开发者)提供了有关下载内容以及为什么需要这么长时间的反馈?那里必须有适合工作的装备,对吗? :)
//编辑以探讨我的问题:
如何测试运行我的代码的机器上是否已经安装了nltk资源(如Punkt Tokenizer),如果不是,则安装它?
答案 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