2016年12月31日 星期六

Stanford Chinese Segmenter初探(三)

2010年在 Stanford Chinese Segmenter初探 一文中,繁體中文還不能正常處理,但在官網 http://nlp.stanford.edu/software/segmenter.shtml 上的最新版 3.5 已經可以處理繁體中文。

測試句為
第一年住院醫師,做闌尾切除手術時,找不到闌尾在何處,你若是他的主治醫師,請你告訴他下列何種方法最容易找到闌尾
第一年住院医师,做阑尾切除手术时,找不到阑尾在何处,你若是他的主治医师,请你告诉他下列何种方法最容易找到阑尾
pku的處理結果如下
第一 年 住院 醫師 , 做 闌尾 切除 手 術時 , 找 不 到 闌尾 在 何處 , 你 若是 他 的 主治 醫師 ,請 你 告訴 他 下列 何種 方法 最 容易 找到 闌尾
第一 住院 医师 阑尾 切除 手术 阑尾 何处 若是 主治 医师 告诉 下列 何种 方法 容易 找到 阑尾
ctb的處理結果如下
第一 年 住院 醫師 , 做闌 尾 切除 手術時 , 找不到 闌尾 在 何處 , 你 若是 他 的 主治 醫師 , 請 你 告訴 他 下列 何 種 方法 最 容易 找到 闌尾
第一 住院 医师 阑尾 切除 手术 找不到 阑尾 何处 若是 主治 医师 告诉 下列 方法 容易 找到 阑尾 
看來對於繁體中文,pku和ctb的處理結果各有高下,不是百分百正確,"手術時"等處斷得不對。請看中研院 http://ckipsvr.iis.sinica.edu.tw/
 第一(Neu) 年(Nf) 住院(VA) 醫師(Na) ,(COMMACATEGORY)
----------------------------------------------------------------------------------------------------------------------------------
 做(VC) 闌尾(Na) 切除(VC) 手術(Na) 時(Ng) ,(COMMACATEGORY)
----------------------------------------------------------------------------------------------------------------------------------
 找(VC) 不(D) 到(P) 闌尾(Na) 在(P) 何處(Nc) ,(COMMACATEGORY)
----------------------------------------------------------------------------------------------------------------------------------
 你(Nh) 若是(Cbb) 他(Nh) 的(DE) 主治(VB) 醫師(Na) ,(COMMACATEGORY)
----------------------------------------------------------------------------------------------------------------------------------
 請(VF) 你(Nh) 告訴(VE) 他(Nh) 下列(A) 何(Nes) 種(Nf) 方法(Na) 最(Dfa) 容易(VH) 找到(VC) 闌尾(Na)
----------------------------------------------------------------------------------------------------------------------------------
上述括號中的詞性代號說明請見 http://linganchor.sinica.edu.tw/data/file/la00033.ppt

我想還是要先研究一下英文斷字的結果,再來回頭看中文斷字的問題。

原始碼的編譯/執行(以 windows 平台為例)

以下假設工作目錄為 C:\stanford-segmenter-2015-12-09\

原始碼

下載的壓縮檔解開後包含 stanford-segmenter-3.6.0-sources.jar ,把它解開到 src 子目錄下

編譯程式

要裝個 JDK ,我抓了 jdk-8u121-windows-x64.exe 下來裝
還要裝個 ant ,我抓了 apache-ant-1.10.0-bin.zip 下來裝

建立環境

windows 10的 cmd.exe 中下達指令(記得改成實機安裝的目錄):
set ANT_HOME=c:\ant
set JAVA_HOME=c:\jdk1.7.0_51
set PATH=%PATH%;%ANT_HOME%\bin

編譯

執行 ant 會把 src 子目錄中的所有檔案編譯為 class 放到 classes 子目錄中

執行

java -mx1024m -cp C:\stanford-segmenter-2015-12-09\classes;C:\stanford-segmenter-2015-12-09\slf4j-api.jar;C:\stanford-segmenter-2015-12-09\slf4j-simple.jar edu.stanford.nlp.ie.crf.CRFClassifier -sighanCorporaDict C:\stanford-segmenter-2015-12-09\data -readStdin -inputEncoding UTF-8 -outputEncoding UTF-8 -sighanPostProcessing true -keepAllWhitespaces false -loadClassifier C:\stanford-segmenter-2015-12-09\data\pku.gz -serDictionary C:\stanford-segmenter-2015-12-09\data\dict-chris6.ser.gz

serDictionary 參數若需要多個字典檔,必需以','逗號分隔,而不是java程式常用的';'分號;字典檔一辭一行,以ser.gz結尾的檔案需要壓縮,一般而言我們還是用純文字檔就好。

沒有留言:

張貼留言