1. 程式人生 > >使用IKAnalyzer進行中文分詞

使用IKAnalyzer進行中文分詞

               

一個完整的結構如下:

其中ext.dic和chinese_stopword.dic都是自定義的,這裡ext.dic用的是百度百科的詞條【496萬個詞條】,需要在xml裡面新增dic的位置。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  <properties>   <comment>IK Analyzer 擴充套件配置</comment> <!--使用者可以在這裡配置自己的擴充套件字典 -->
 <entry key="ext_dict">ext.dic;</entry>   <!--使用者可以在這裡配置自己的擴充套件停止詞字典--> <entry key="ext_stopwords">stopword.dic;chinese_stopword.dic</entry>  </properties>
新增好字典後,就可以寫個程式來測試效果了,測試用例如下:

李天一,現名李冠豐。著名歌唱家李雙江和知名歌唱家夢鴿之子。根據司法機關公佈資料顯示,李天一出生於1996年4月。曾就讀北京海淀區中關村第三小學、人民大學附中、美國Shattuck-St. Mary's School(沙特克聖瑪麗學院)冰球學校。2011年9月6日,因與人鬥毆被拘留教養1年。2012年9月19日,李天一被解除教養。2013年2月22日,因涉嫌輪姦案被刑事拘留,後因可查資料顯示未成年,移交少管所。3月7日,中央電視臺新聞中心官方微博釋出了一條訊息,稱李天一因涉嫌強姦罪,已被檢察機關批捕。2013年9月,李雙江一篇舊文證實李天一成年。

測試程式如下:

import java.io.BufferedReader;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.StringReader;import org.apache.lucene.analysis.TokenStream;import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;import org.wltea.analyzer.core.IKSegmenter;import
org.wltea.analyzer.core.Lexeme;import org.wltea.analyzer.lucene.IKAnalyzer;public class IKAnalyzerTest public static void main(String[] args) throws IOException {  String filePath = "test.txt";  String news=new String();        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF8"));     String str;     while ((str = in.readLine()) != null) {      news+=str;     }    in.close();    System.out.println(news);    IKAnalyzer analyzer = new IKAnalyzer(true);    StringReader reader = new StringReader(news);    TokenStream ts = analyzer.tokenStream("", reader);    CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);    while(ts.incrementToken()){     System.out.print(term.toString()+"|");     }    analyzer.close();    reader.close();        System.out.println();    StringReader re = new StringReader(news);    IKSegmenter ik = new IKSegmenter(re,true);    Lexeme lex = null;    while((lex=ik.next())!=null){     System.out.print(lex.getLexemeText()+"|");    } }}

其中上面第一個沒有呼叫lucene庫,第二個是呼叫lucene庫進行分詞,兩者區別貌似不大。

得到結果如下:

?李天一,現名李冠豐。著名歌唱家李雙江和知名歌唱家夢鴿之子。根據司法機關公佈資料顯示,李天一出生於1996年4月。曾就讀北京海淀區中關村第三小學、人民大學附中、美國Shattuck-St. Mary's School(沙特克聖瑪麗學院)冰球學校。2011年9月6日,因與人鬥毆被拘留教養1年。2012年9月19日,李天一被解除教養。2013年2月22日,因涉嫌輪姦案被刑事拘留,後因可查資料顯示未成年,移交少管所。3月7日,中央電視臺新聞中心官方微博釋出了一條訊息,稱李天一因涉嫌強姦罪,已被檢察機關批捕。2013年9月,李雙江一篇舊文證實李天一成年。啊載入擴充套件詞典:ext.dic載入擴充套件停止詞典:stopword.dic載入擴充套件停止詞典:chinese_stopword.dic李天一|現名|李冠|豐|著名|歌唱家|李雙|江和|知名|歌唱家|夢鴿|之子|根據|司法機關|公佈|資料|顯示|李天一|出生於|1996年|4月|就讀|北京|海淀區|中關村第三小學|人民大學|附中|美國|shattuck-st.|mary|s|school|沙|特克|聖瑪麗學院|冰球|學校|2011年|9月6日|與人|鬥毆|拘留|教養|1年|2012年|9月19日|李天|一被|解除|教養|2013年|2月22日|因涉嫌|輪姦案|刑事拘留|可查|資料|顯示|未成年|移交|少管所|3月7日|中央電視臺|新聞中心|官方|微博|釋出|一條|訊息|稱|李天一|因涉嫌|強姦罪|已被|檢察機關|批捕|2013年|9月|李雙江|一篇|舊文|證實|李天一|成年|李天一|現名|李冠|豐|著名|歌唱家|李雙|江和|知名|歌唱家|夢鴿|之子|根據|司法機關|公佈|資料|顯示|李天一|出生於|1996年|4月|就讀|北京|海淀區|中關村第三小學|人民大學|附中|美國|shattuck-st.|mary|s|school|沙|特克|聖瑪麗學院|冰球|學校|2011年|9月6日|與人|鬥毆|拘留|教養|1年|2012年|9月19日|李天|一被|解除|教養|2013年|2月22日|因涉嫌|輪姦案|刑事拘留|可查|資料|顯示|未成年|移交|少管所|3月7日|中央電視臺|新聞中心|官方|微博|釋出|一條|訊息|稱|李天一|因涉嫌|強姦罪|已被|檢察機關|批捕|2013年|9月|李雙江|一篇|舊文|證實|李天一|成年|

可以看到有些詞分出來不是很準確,比如上面紅色標記的部分,這裡採用了智慧匹配,但是依然出錯了,分出來的詞甚至不在詞表中。看來還是ANSJ分詞比較靠譜。