分詞器簡單使用:
1.首先在pom文件中添加如下坐標
<!-- 有可能一次導入本地倉庫不成功,需要多嘗試幾次 -->
<dependency> <groupId>com.janeluo</groupId> <artifactId>ikanalyzer</artifactId> <version>2012_u6</version> </dependency>
2.在資源文件夾下添加如下添加 IKAnalyzer.cfg.xml配置文件,並指定擴展詞典配置的位置和擴展停詞詞典的位置。擴展文件的位置是在resource目錄下建立ikConf目錄,並添加兩個擴展配置文件。
擴展詞典:在我們漢語中本身有很多的常見詞語,但是在一些專業領域方面有些專業的詞語是不包含在常見詞語中的,這時候我們可以通過這個配置文件進行配置。(數據湖,苯溴馬隆)這些詞想作為詞組就直接添加在這個配置文件中。
擴展停詞詞典:停止詞,是由英文單詞:stopword翻譯過來的,原來在英語里面會遇到很多a,the,or等使用頻率很多的字或詞,常為冠詞、介詞、副詞或連詞等。如果搜索引擎要將這些詞都索引的話,那么幾乎每個網站都會被索引,也就是說工作量巨大。可以毫不誇張的說句,只要是個英文網站都會用到a或者是the。那么這些英文的詞跟我們中文有什么關系呢? 在中文網站里面其實也存在大量的stopword,我們稱它為停止詞。比如,我們前面這句話,“在”、“里面”、“也”、“的”、“它”、“為”這些詞都是停止詞。這些詞因為使用頻率過高,幾乎每個網頁上都存在,所以搜索引擎開發人員都將這一類詞語全部忽略掉。如果我們的網站上存在大量這樣的詞語,那么相當於浪費了很多資源。原本可以添加一個關鍵詞,排名就可以上升一名的,為什么不留着添加為關鍵詞呢?停止詞對SEO的意義不是越多越好,而是盡量的減少為宜。
主程序:放便我們去查看ik分詞器幫我分詞后的效果。
package com.zhp.ikanalyzer.test; import org.wltea.analyzer.core.IKSegmenter; import org.wltea.analyzer.core.Lexeme; import java.io.StringReader; import java.util.HashSet; import java.util.Set; public class Main { public static void main(String[] args) throws Exception { Set<String> segment = (Set<String>) segment("@車@險理賠@able,baby ll.bbbb,學a習"); for (String s : segment){ System.out.println(s); } } private static Set segment(String text) throws Exception{ Set<String> set = new HashSet<>(); StringReader re = new StringReader(text.trim()); IKSegmenter ik= new IKSegmenter(re,true); Lexeme lex; while((lex = ik.next())!=null){ set.add(lex.getLexemeText()); } return set; } }
構建IKSegmenter對象源碼中可以看到加載配置文件是在classes路徑下。因此我們在resources目錄下創建IKAnalyzer.cfg.xml,maven功能編譯之后會把resources目錄下的文件放在classes目錄下。
public IKSegmenter(Reader input, boolean useSmart) { this.input = input; this.cfg = DefaultConfig.getInstance(); this.cfg.setUseSmart(useSmart); this.init(); }
public class DefaultConfig implements Configuration { private static final String PATH_DIC_MAIN = "org/wltea/analyzer/dic/main2012.dic"; private static final String PATH_DIC_QUANTIFIER = "org/wltea/analyzer/dic/quantifier.dic"; private static final String FILE_NAME = "IKAnalyzer.cfg.xml"; private static final String EXT_DICT = "ext_dict"; private static final String EXT_STOP = "ext_stopwords"; private Properties props = new Properties(); private boolean useSmart; public static Configuration getInstance() { return new DefaultConfig(); } private DefaultConfig() { InputStream input = this.getClass().getClassLoader().getResourceAsStream("IKAnalyzer.cfg.xml"); if (input != null) { try { this.props.loadFromXML(input); } catch (InvalidPropertiesFormatException var3) { var3.printStackTrace(); } catch (IOException var4) { var4.printStackTrace(); } } }