2013-07-01 68 views
0

我试图使用Hunpos tagger用于NLTK的POS标记而不是传统的pos_tag(),但我在加载二进制文件english.modelen_wsj.model时遇到了一些问题。如何正确设置NLTK中的Hunpos tagger用于英文POS标记?

事实上,我在Linux Mint的,我把它们放在/usr/local/bin,在HUNPOS环境变量设置为这条道路,甚至试图以这个路径传递到__init__nltk/tag/hunpos.py的文件中使用的参数path_to_bin,但是当它识别该文件,它会抛出此错误:

>>> ht = HunposTagger('en_wsj.model','/usr/local/bin/en_wsj.model') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/nltk-2.0.4-py2.7.egg/nltk/tag/hunpos.py", line 89, in __init__ 
    shell=False, stdin=PIPE, stdout=PIPE, stderr=PIPE) 
    File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
    raise child_exception 
OSError: [Errno 8] Exec format error 

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

回答

1

我想我找到了一种方法来做到这一点。对于那些遇到同样问题的人,我建议您下载源代码,构建它,并以与NLTK文档中描述的方式不同的方式调用它。因为它是不平凡的我,我把它在这里一步一步:

在Unix:

1)下载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)在这一点上,你将在你的trunk目录有一个二进制文件tagger.native。将整个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。要做到这一点,你可以(在MacOS上或~/.bash_profile)以下行添加到您的~/.bashrc

export HUNPOS=/usr/local/bin/trunk 

,并重新启动终端。

这为我工作,但如果有人有更好的,更短或简单的方法来设置此,请我很想听听:)

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')] 
+0

一般来说,我更喜欢预编译的版本太多,但是当我3个月前试过要么没有工作或我需要在代码中进行一些小变化,我不记得他们中的哪一个。这就是为什么我试图编译标签。 – rafa