在NLTK中实例化和使用StanfordTagger

Inv*_*rse 7 python nltk

我为这个问题的新手性质道歉 - 我一直试图找出Python包装和名称空间,但更好的观点似乎让我无法理解.也就是说,我想将Python包装器用于斯坦福的词性标注器.我在这里找到文档没有问题,它提供了一个使用示例:

st = StanfordTagger('bidirectional-distsim-wsj-0-18.tagger')
st.tag('What is the airspeed of an unladen swallow ?'.split())
    [('What', 'WP'), ('is', 'VBZ'), ('the', 'DT'), ('airspeed', 'NN'), ('of', 'IN'), ('an', 'DT'), ('unladen', 'JJ'), ('swallow', 'VB'), ('?', '.')]
Run Code Online (Sandbox Code Playgroud)

这看起来很棒,但我似乎无法在我的本地Python + NLTK安装中显示正确的命名空间(我有最新的NLTK版本,并在Python 2.6.x以及2.7.x中尝试过以下) :

>>> import nltk
>>> from nltk import *
>>> from nltk.tag import stanford 
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name stanford
Run Code Online (Sandbox Code Playgroud)

我也尝试了这个import语句,结果相同:

>>> from nltk.tag.stanford import StanfordTagger
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named stanford
Run Code Online (Sandbox Code Playgroud)

在这里搜索SO,我发现了这个问题,海报似乎遇到了完全相同的问题,但是能够通过命名空间步骤:

问题是我的nltk lib不包含stanford模块.所以我将其复制到相应的文件夹并编译相同.

听起来确实是同样的问题,除了我不能为我的生活找到任何关于如何将模块添加到NLTK的文档.我在NLTK网站上阅读的所有内容都暗示斯坦福模块应该已经打包到基本安装中.那么,问题分为两部分:

  1. (具体)是否有任何关于通过这个特定问题并开始使用Python的StanfordTagger的建议?我知道我可以很容易地直接调用罐子,然后解释在Python输出 - 这是所有的Python包装确实反正 - 但我想得到这个工作出的原则,如果没有别的.
  2. (一般)什么是一个好的pythonic方法来调查丢失的包装问题或依赖性,如上所述?

Max*_* Li -1

建议:a. 查看 PC 上安装的 nltk 目录。我检查了我的,stanford.py 不存在(即在 nltk/tag/ 目录中丢失)。您可以快速找到运行此程序的位置:

import distutils.sysconfig
print distutils.sysconfig.get_python_lib()+'/nltk/tag/'
Run Code Online (Sandbox Code Playgroud)

b. 如果不存在,则将 stanford.py 文件从您提到的源复制到 PC 上的 nltk/tag 目录(您在步骤 a 中获得)。

我希望一切顺利。