分詞器常常用來做用戶輸入的分析男公,完后再檢索數(shù)據(jù)庫
一核芽、IK Analyzer簡介
- IK Analyzer是一個開源的,基于Java語言開發(fā)的輕量級的中文分詞工具包磁携;
- 最初,它是以開源項目Luence 為應(yīng)用主體的良风,結(jié)合詞典分詞和文法分析算法的中文分詞組件谊迄;從 3.0 版本開始,IK 發(fā)展為面向 Java 的公用分詞組件烟央,獨立亍 Lucene 項目统诺,同時提供了對 Lucene 的默認優(yōu)化實現(xiàn)。在 2012 版本中疑俭,IK 實現(xiàn)了簡單的分詞歧義排除算法粮呢,標(biāo)志著 IK 分詞器從單純的詞典分詞向模擬語義分詞衍化;
二钞艇、IK的使用
- 添加Maven引用
<dependency> <groupId>com.github.magese</groupId> <artifactId>ik-analyzer</artifactId> <version>7.5.0</version> </dependency>
- 添加配置文件
- 添加字典文件:extword.dict啄寡,主要用來把一些想分出來的詞添加到這里,還有一個添加輔助行詞語的文件:stopword.dict哩照,詳見碼云項目
- 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">classpath:extword.dict</entry> <!-- 配置自己的忽略詞 --> <entry key="ext_stopwords">classpath:stopword.dic</entry> </properties>
- 編寫代碼
package org.shreker.tools.ikanalyzer; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.wltea.analyzer.lucene.IKAnalyzer; import java.io.IOException; import java.io.StringReader; public class IKWordSplition { private static String WordSplition(String sentence) throws IOException { StringBuilder text = new StringBuilder(); // 創(chuàng)建分詞對象 Analyzer analyzer = new IKAnalyzer(true); StringReader reader = new StringReader(sentence); // 分詞 TokenStream tokenStream = analyzer.tokenStream("", reader); CharTermAttribute charTerm = tokenStream.getAttribute(CharTermAttribute.class); // 遍歷分詞數(shù)據(jù) tokenStream.reset(); while (tokenStream.incrementToken()) { text.append(charTerm.toString()).append("|"); } tokenStream.close(); reader.close(); return text.toString().trim() + "\n"; } public static void main(String[] args) throws IOException { System.out.println(WordSplition("張北京兒童醫(yī)院幾年解決痘痘")); } }
- 運行結(jié)果:
Load extended dictionary:extword.dict Load stopwords dictionary:stopword.dic 張|北京|兒童醫(yī)院|幾年|解決|痘痘|
- 運行結(jié)果: