2013-07-01 39 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