2016-03-02 54 views
2

StanfordSegmenter在nltk中沒有接口,與StanfordPOStagger或StanfordNER不同。所以要使用它,基本上我必須爲StanfordSegmenter手動創建一個接口,即在../nltk/tokenize/下的stanford_segmenter.py。我按照指示在這裏http://textminingonline.com/tag/chinese-word-segmenterImportError:沒有名爲stanford_segmenter的模塊

然而,當我試圖運行此from nltk.tokenize.stanford_segmenter import stanford_segmenter,我得到一個錯誤

msg Traceback (most recent call last): 
    File "C:\Users\qubo\Desktop\stanfordparserexp.py", line 48, in <module> 
    from nltk.tokenize.stanford_segmenter import stanford_segmenter 
ImportError: No module named stanford_segmenter 
[Finished in 0.6s] 

提到創建stanford_segmenter.py後重新安裝NLTK的說明。我不太明白這一點,但我確實如此。然而,這個過程很難被稱爲「重新安裝」,而是將python庫分離並重新連接到nltk。

我使用的是Windows 64和Python 2.7.11。 NLTK和所有相關pkgs已更新至最新版本。不知道你們是否可以解釋這一點。非常感謝你。

+0

嘗試實施一個,併爲開源貢獻=) – alvas

+0

看看https://github.com/alvations/NTU-MC/blob/master/ntumc/toolkit/cmn.py從http:// www。 aclweb.org/anthology/C/C14/C14-2019.pdf – alvas

+0

謝謝alvas!雖然不知道如何正確設置(將其安裝爲第三方模塊)Minisegmenter,但我仍然可以通過在文件夾內創建一個__init __。py來直接在該py文件中進行分割。 – fbabelle

回答

1

我可以通過運行下面的代碼導入模塊:

import imp 

yourmodule = imp.load_source("module_name.py", "/path/to/module_name.py") 
yourclass = yourmodule.TheClass() 

yourclass是類的實例,TheClass是你要創建的類的名稱與obj在這相似。於使用的:因此,在StanfordSegmenter的情況下

from pkg_name.module_name import TheClass 

,代碼的完整線如下:

# -*- coding: utf-8 -*- 
import imp 
import os 
ini_path = 'D:/jars/stanford-segmenter-2015-04-20/' 
os.environ['STANFORD_SEGMENTER'] = ini_path + 'stanford-segmenter-3.5.2.jar' 
stanford_segmenter = imp.load_source("stanford_segmenter", "C:/Users/qubo/Miniconda2/pkgs/nltk-3.1-py27_0/Lib/site-packages/nltk/tokenize/stanford_segmenter.py") 
seg = stanford_segmenter.StanfordSegmenter(path_to_model='D:/jars/stanford-segmenter-2015-04-20/data/pku.gz', path_to_jar='D:/jars/stanford-segmenter-2015-04-20/stanford-segmenter-3.5.2.jar', path_to_dict='D:/jars/stanford-segmenter-2015-04-20/data/dict-chris6.ser.gz', path_to_sihan_corpora_dict='D:/jars/stanford-segmenter-2015-04-20/data') 

sent = '我有一隻小毛驢我從來也不騎。' 
text = seg.segment(sent.decode('utf-8')) 
相關問題