IKAnalyzer基於lucene2.0版本API開發,實現了以詞典分詞爲基礎的正反向全切分算法,是Lucene Analyzer接口的實現。經過與mmseg4j-1.7.2、庖丁解牛等其它中文分詞程序比較後發現,IKAnalyzer的中文分詞效果好,程序調用簡單。所以採用IKAnalyzer作爲我們中文分詞的程序。
調用IKAnalyzer來進行中文分詞的代碼十分簡單:
- /**
- * 傳入一箇中文語句,返回一個List列表,列表中的每一個元素是一個String類型的分詞之後的中文詞組
- */
- public static ArrayList<String> testJe(StringtestString) throws Exception {
- ArrayList<String> tokenList =new ArrayList<String>();
- Analyzer analyzer = new IK_CAnalyzer();
- Reader r = new StringReader(testString);
- TokenStream ts = (TokenStream)analyzer.tokenStream("", r);
- Token t;
- while ((t = ts.next()) != null) {
- tokenList.add(t.termText());
- System.out.println(t.termText());
- }
- return tokenList;
- }
這段代碼如果是在Windows下使用Eclipse來執行,或許能夠很好地進行中文分詞,但是當你把程序放在Linux下,例如Ubuntu下運行時,可能就會發現這個Java中文分詞程序突然“失效”了。這是由於IKAnalyzer1.4採用了GBK的本地編碼來存儲字典,而linux環境,例如Ubuntu默認字符編碼是UTF-8,這就會常常造成在Linux和Unix環境下字典載入亂碼,從而使分詞失敗。
解決辦法有2個:
1、將字典目錄下的dic文件,在Windows環境下使用jdk的nativetoascii.exe將格式從GBK轉化成UTF-8;
2、修改Dictionary類中所有的字典load方法,將InputStreamReader中的編碼修改爲“UTF-8”;
其中第一個解決辦法最爲簡單,具體步驟如下:1、對着IKAnalyzer1.4.jar點擊右鍵,將IKAnalyzer1.4.jar解壓到本地,進入org\mira\lucene\analysis\dict目錄下,發現有4個文件,用文本編輯器打開,然後用UTF-8格式“另存爲”來進行重新存儲,覆蓋原來的文件;
2、將解壓的文件重新使用zip格式進行壓縮。需要注意的是,最頂層目錄應該是org和META-INF;
3、將後綴名zip改爲jar即可。
然後使用新的jar替換原來的IKAnalyzer1.4.jar即可在Ubuntu下正常使用這個Java中文分詞程序了。
另外,如果你打算使用Ubuntu的Cron來定時執行這個java中文分詞程序,可能又會發現中文分詞程序失效,這是因爲Linux下的Cron環境變量可能與普通用戶登錄進去之後的環境變量不太一樣,因此還是由於默認的字符集不同,造成了程序無法正常進行中文分詞。解決辦法如下,在腳本中顯式地指明字符集爲UTF-8:
- #! /bin/bash
- . /home/wangzhongyuan/.profile
- LANG=zh_CN.UTF-8
- LC_ALL=zh_CN.UTF-8
- export LANG LC_ALL
然後就可以在腳本中在調用java程序,就能夠使用Ubuntu的Cron來定時執行這個中文分詞程序了。
本文可以自由轉載,轉載時請保留全文並註明出處:
轉載自仲子說 [ http://www.wangzhongyuan.com/ ]
原文鏈接:http://www.wangzhongyuan.com/archives/723.html