1.分析器 所有分析器最終繼承的類都是Analyzer
1.1 預設标準分析器:StandardAnalyzer
在我們建立索引的時候,我們使用到了IndexWriterConfig對象,在我們建立索引的過程當中,會經曆分析文檔的步驟,就是分詞的步驟,預設采用的标準分析器自動分詞
1.2 檢視分析器的分析效果
public static void main(String[] args) throws IOException {
//1.建立一個Analyzer對象
Analyzer analyzer=new StandardAnalyzer();
//2.調用Analyzer對象的tokenStream方法擷取TokenStream對象,此對象包含了所有的分詞結果
TokenStream tokenStream = analyzer.tokenStream("", "The spring Framework provides a comprehensive programming and configuration model.");
//3.給tokenStream對象設定一個指針,指針在哪目前就在哪一個分詞上
CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
//4.調用tokenStream對象的reset方法,重置指針,不調用會報錯
tokenStream.reset();
//5.利用while循環,拿到分詞清單的結果 incrementToken方法傳回值如果為false代表讀取完畢 true代表沒有讀取完畢
while (tokenStream.incrementToken()){
System.out.println(charTermAttribute.toString());
}
//6.關閉
tokenStream.close();
}
預設标準分析器分析英文沒有問題,但是他是怎麼樣分析中文的?
1.2 中文分析器
第三方中文分析器:IKAnalyzer
IKAnalyzer的使用步驟:
1.導入依賴
<!-- https://mvnrepository.com/artifact/com.jianggujin/IKAnalyzer-lucene -->
<dependency>
<groupId>com.jianggujin</groupId>
<artifactId>IKAnalyzer-lucene</artifactId>
<version>8.0.0</version>
</dependency>
2.配置IKAnalyzer,導入配置檔案
hotword.dic 擴充詞典,可以将時尚的網絡名詞放入到該詞典當中,這樣就能根據擴充詞典進行分詞
stopword.dic 停用詞詞典,可以将無意義的詞和敏感詞彙放入到該詞典當中,這樣在分析的時候就會忽略這些内容
在自定義擴充詞典和停用詞詞典的過程當中,千萬不要使用windows記事本編輯,因為windows記事本是UTF-8+BOM編碼
3.使用IKAnalyzer進行分詞
public static void main(String[] args) throws IOException {
//1.建立一個Analyzer對象
Analyzer analyzer=new IKAnalyzer();
//2.調用Analyzer對象的tokenStream方法擷取TokenStream對象,此對象包含了所有的分詞結果
TokenStream tokenStream = analyzer.tokenStream("", "五道口課工場安裝mysql-5.7.22-winx64後資料庫服務啟動報錯:本地計算機上的mysql服務啟動停止後,某些服務未由其他服務或程式使用時将自動停止而且mysql官網下載下傳的壓縮包解壓出來沒有網線上安裝教... 博文 來自: 測試菜鳥在路上,呵呵");
//3.給tokenStream對象設定一個指針,指針在哪目前就在哪一個分詞上
CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
//4.調用tokenStream對象的reset方法,重置指針,不調用會報錯
tokenStream.reset();
//5.利用while循環,拿到分詞清單的結果 incrementToken方法傳回值如果為false代表讀取完畢 true代表沒有讀取完畢
while (tokenStream.incrementToken()){
System.out.println(charTermAttribute.toString());
}
//6.關閉
tokenStream.close();
}
4.程式當中使用IKAnalyzer
IndexWriter indexWriter=new IndexWriter(directory,new IndexWriterConfig(new IKAnalyzer()));