0

我正在尝试使用Hunpos 标记器使用 NLTK 而不是传统的 POS 标记pos_tag(),但是在加载二进制文件english.modelen_wsj.model.

其实我是在linux mint中,我把它们放进去/usr/local/bin,设置HUNPOS环境变量到这个路径,甚至尝试把这个路径传递给of文件path_to_bin中使用的参数,但是当它识别到文件时,就会抛出这个错误:__init__nltk/tag/hunpos.py

>>> 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

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

4

2 回答 2

2

我想我找到了一种方法。对于那些遇到同样问题的人,我建议您下载源代码,构建它并以不同于 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)此时,您tagger.nativetrunk目录中应该有一个二进制文件。将整个trunk目录放入您的/usr/local/bin(您可能需要以超级用户身份进行操作)。

5) 在此处en_wsj.model.gz下载文件,解压缩并将二进制文件也放入.en_wsj.modelusr/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(或~/.bash_profile在 MacOS 中):

export HUNPOS=/usr/local/bin/trunk

并重新启动您的终端。

这对我有用,但如果有人有更好、更短或更简单的方法来设置它,我很想听听 :)

于 2013-07-02T12:34:36.723 回答
1

如果您在 linux 上工作,您可以立即使用 hunpos 的预编译版本,而无需从源代码编译。

$ 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')]
于 2014-01-02T23:30:02.287 回答