如何在NLTK中正确设置Hunpos tagger用于英文的POS标记?

时间:2013-07-01 15:47:27

标签: nltk pos-tagger

我正在尝试使用Hunpos tagger对NLTK进行POS标记而不是传统的pos_tag(),但我在加载二进制文件english.model或{{1}时遇到了一些问题}}

事实上,我在linux中,我将它们放在en_wsj.model中,将/usr/local/bin环境变量设置为此路径,甚至尝试将此路径传递给参数{{1}在HUNPOS path_to_bin文件中使用,但当它识别文件时,会抛出此错误:

__init__

有没有人知道发生了什么?

2 个答案:

答案 0 :(得分:1)

我想我找到了办法。对于那些遇到相同问题的人,我建议您下载源代码,构建它并以与NLTK文档中描述的方式不同的方式调用它。因为这对我来说并非无足轻重,所以我一步一步地把它放在这里:

在Unix下:

1)如果您没有SVN,请下载Subversion SVN并查看项目源代码:

svn checkout http://hunpos.googlecode.com/svn/trunk/ hunpos-read-only

这将创建一个您签出的trunk目录。

2)然后,为了能够成功构建它,您可能需要ocamlbuild来自动编译Objective Caml。 sudo apt-get install ocaml-nox应该处理这个问题。

3)cdtrunk目录(您下载了Hunpos源代码)并执行

./build.sh build

4)此时,您的tagger.native目录中应该有一个二进制文件trunk。将整个trunk目录放在/usr/local/bin中(您可能需要以超级用户身份执行)。

5)下载en_wsj.model.gz文件here,将其解压缩并将en_wsj.model二进制文件也放在usr/local/bin中。

6)最后,在你的python脚本中,你可以创建一个HunposTagger类的实例,传递你之前创建的两个文件的路径,非常接近:

>>> from nltk.tag.hunpos import HunposTagger
>>> ht = HunposTagger(path_to_model='/usr/local/bin/en_wsj.model', \
                      path_to_bin=  '/usr/local/bin/trunk/tagger.native')
>>> ht.tag('I want to go to San Francisco next year'.split())
[('I', 'PRP'), ('want', 'VBP'), ('to', 'TO'), ('go', 'VB'), ('to', 'TO'),
 ('San', 'NNP'), ('Francisco', 'NNP'), ('next', 'JJ'), ('year', 'NN')]
>>> ht.close()

(别忘了关闭......如果你不想关闭,你也可以使用with声明)

7)如果仍有问题,请尝试将环境变量HUNPOS设置为/usr/local/bin/trunk。为此,您可以将以下行添加到~/.bashrc(或MacOS中的~/.bash_profile)中:

export HUNPOS=/usr/local/bin/trunk

并重新启动终端。

这对我有用,但是如果某人有更好,更短或更简单的方法来设置它,请我很乐意听到:)

答案 1 :(得分:1)

有一些预编译的hunpos版本,如果您正在使用linux,可以立即使用而无需从源代码编译。

$ wget https://hunpos.googlecode.com/files/hunpos-1.0-linux.tgz
$ wget https://hunpos.googlecode.com/files/en_wsj.model.gz
$ tar xvfz hunpos-1.0-linux.tgz
$ gunzip en_wsj.model.gz
$ mv en_wsj.model hunpos-1.0-linux
$ python
>>> from nltk.tag import HunposTagger
>>> hpt = HunposTagger('hunpos-1.0-linux/en_wsj.model','hunpos-1.0-linux/hunpos-tag')
>>> hpt.tag('this is a foo bar sentence'.split())
[('this', 'DT'), ('is', 'VBZ'), ('a', 'DT'), ('foo', 'JJ'), ('bar', 'NN'), ('sentence', 'NN')]