IKAnalyzer进行中文分词和去停用词
最近學習主題模型pLSA、LDA,就想拿來試試中文。首先就是找文本進行切詞、去停用詞等預處理,這里我找了開源工具IKAnalyzer2012,下載地址:(:(注意:這里盡量下載最新版本,我這里用的IKAnalyzer2012.zip 這本版本后來測試時發現bug,這里建議IKAnalyzer2012_u6.zip))
https://code.google.com/p/ik-analyzer/
由于太多,而且名稱我也搞不清楚,不知道下載哪個。后來我下載了IKAnalyzer2012.zip 壓縮文件。
?
?壓縮后,按照說明說,需要配置
?
然而這里開始我連IKAnalyzer2012.jar安裝部署否不清楚,后來慢慢摸索才弄清楚:
首先在Eclipse中建一個Java工程,我這里名稱是“FC”,然后右鍵JRE System Library.jar ,點擊Build Path-->Configure Build Path
?
添加上IKAnalyzer2012.jar,確定。
stopwords.dic 是停用詞文件,可以自己建一個ext.dic 即自定義詞典,以及分詞擴張配置文件(主要用于調取stopwords.dic, ext.dic), 我們將其加入到FC--scr下
由于會經常配合lucene-core使用,這個jar包可以從這里下載:http://grepcode.com/snapshot/repo1.maven.org/maven2/org.apache.lucene/lucene-core/3.6.1
安裝如上進行配置。
我這里的配置后的工程目錄如下:
另外,雙擊scr下IKAnalyzer.cfg.xml文件,配置如下:
?
<?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">stopwords.dic;</entry> </properties>
這里給一個分詞演示程序:IKAnalyzerTest.java
在C盤根目錄下,見一個需要分詞的txt文檔(注意,這里需要用軟件Notepad2 對該內容轉成UTF-8編碼格式,將內容復制到Notepad中,點擊文件 --編碼--UTF-8--保存成txt文件即可):
李天一,現名李冠豐。著名歌唱家李雙江和知名歌唱家夢鴿之子。根據司法機關公布資料顯示,李天一出生于1996年4月。曾就讀北京海淀區中關村第三小學、人民大學附中、美國Shattuck-St. Mary's School(沙特克圣瑪麗學院)冰球學校。2011年9月6日,因與人斗毆被拘留教養1年。2012年9月19日,李天一被解除教養。2013年2月22日,因涉嫌輪奸案被刑事拘留,后因可查資料顯示未成年,移交少管所。3月7日,中央電視臺新聞中心官方微博發布了一條消息,稱李天一因涉嫌強奸罪,已被檢察機關批捕。2013年9月,李雙江一篇舊文證實李天一成年。
?
在ext.dic中設置個性詞典為:李雙江、李天一、夢鴿。 stopwords.dic中用的是中文的常用停用詞,這里可以在百度文庫中下載(注意,用notepad轉成UTF-8后保存)。
?
import java.io.*;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 Text1 {public static void main(String[] args) throws IOException {String filePath = "C:\\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;File f = new File("C://jieguo.txt"); f.delete();String path="C://jieguo.txt"; //%%%%%%while((lex=ik.next())!=null){System.out.print(lex.getLexemeText()+"|");try { FileWriter fw=new FileWriter(path,true);PrintWriter pw=new PrintWriter(fw); pw.print(lex.getLexemeText()+"|"); pw.close(); //bw.close(); fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }} }分詞后的文件,我這里仍然放在C盤根目錄下,結果:
李天一|現名|李|冠|豐|著名|歌唱家|李雙江|知名|歌唱家|夢鴿|之子|司法機關|公布|資料|顯示|李天一|出生于|1996年|4月|曾|就讀|北京|海淀區|中關村|第三|小學|人民大學|附中|美國|shattuck-st.|mary|s|school|沙特|克|圣瑪麗|學院|冰球|學校|2011年|9月|6日|與人|斗毆|拘留|教養|1年|2012年|9月|19日|李天一|解除|教養|2013年|2月|22日|因涉嫌|輪奸案|刑事拘留|后|可查|資料|顯示|未成年|移交|少管所|3月|7日|中央電視臺|新聞中心|官方|微|博|發布|一條|消息|稱|李天一|因涉嫌|強奸罪|已被|檢察機關|批捕|2013年|9月|李雙江|一篇|舊|文|證實|李天一|
?
轉載于:https://www.cnblogs.com/huadongw/p/4222866.html
總結
以上是生活随笔為你收集整理的IKAnalyzer进行中文分词和去停用词的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: U-boot 打补丁,编译,设置环境变量
- 下一篇: 云说的到底对不对,京东到底行不行?