在NLTK中实例化和使用StanfordTagger
抱歉我这个问题有点初学者的味道——我一直在尝试理解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'), ('?', '.')]
这个看起来不错,但我在本地的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
我还尝试了这个导入语句,结果也是一样:
>>> from nltk.tag.stanford import StanfordTagger
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named stanford
在这里的StackOverflow上搜索时,我发现了这个问题,发帖的人似乎遇到了完全相同的问题,但他通过以下方式解决了命名空间的问题:
问题是我的nltk库里没有stanford模块。所以我把它复制到了合适的文件夹里并进行了编译。
听起来确实是同样的问题,只是我怎么也找不到关于如何将模块添加到NLTK的文档。我在NLTK网站上看到的所有内容都暗示斯坦福模块应该已经包含在基础安装中。所以,我有两个问题:
- (具体) 有没有什么建议可以帮助我解决这个特定问题,并开始在Python中使用StanfordTagger?我知道我可以直接调用jar文件,然后在Python中解析输出——反正Python的封装就是这么做的——但我想从原则上让它正常工作,哪怕只是为了这个。
- (一般) 有什么好的Python方法来调查缺失的打包问题或依赖关系,比如上面提到的?
1 个回答
-1
建议:
a. 查看一下你电脑上安装的nltk目录。我检查了一下我的,发现stanford.py文件不在那儿(也就是说,在nltk/tag/目录里缺失)。你可以通过运行以下命令快速找到要查看的地方:
import distutils.sysconfig
print distutils.sysconfig.get_python_lib()+'/nltk/tag/'
b. 如果那里没有这个文件,那就把你提到的来源里的stanford.py文件复制到你电脑上的nltk/tag目录里(就是在步骤a中找到的那个目录)。
希望这样能解决问题。