1.分析器的分詞效果
1.1 分析文本
"The Spring Framework provides a comprehensive programming and configuration model."
1.2 代碼
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.junit.Test;
/**
* 分析器
*/
public class TestTokenStream {
@Test
public void testTokenStream() throws Exception {
//1.創建一個標準分析器對象
Analyzer analyzer = new StandardAnalyzer();
//2.獲得tokenStream對象
//第一個參數:域名,可以隨便給一個
//第二個參數:要分析的文本內容
TokenStream tokenStream = analyzer.tokenStream("test", "The Spring Framework provides a comprehensive programming and configuration model.");
//3.添加一個引用,可以獲得每個關鍵詞
CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
//添加一個偏移量的引用,記錄了關鍵詞的開始位置以及結束位置
// OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);
//4.將指針調整到列表的頭部
tokenStream.reset();
//5.遍歷關鍵詞列表,通過incrementToken方法判斷列表是否結束
while(tokenStream.incrementToken()) {
//關鍵詞的起始位置
// System.out.println("start->" + offsetAttribute.startOffset());
//取關鍵詞
System.out.println(charTermAttribute);
//結束位置
// System.out.println("end->" + offsetAttribute.endOffset());
}
//6.關閉
tokenStream.close();
}
}
1.3 運行結果
2. 中文分析器
2.1 Lucene自帶中文分詞器
2.1.1 StandardAnalyzer:
單字分詞:就是按照中文一個字一個字地進行分詞。如:“我愛中國”,
效果:“我”、“愛”、“中”、“國”。
2.1.2 SmartChineseAnalyzer
對中文支持較好,但擴展性差,擴展詞庫,禁用詞庫和同義詞庫等不好處理
<!-- Lucene提供的中文分詞器模塊,lucene-analyzers-smartcn:Lucene 的中文分詞器 SmartChineseAnalyzer -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-smartcn</artifactId>
<version>7.4.0</version>
</dependency>
效果:
2.2 IKAnalyzer
github地址:https://github.com/wks/ik-analyzer
2.2.1 常規使用方法:
第一步:把jar包添加到工程中
第二步:把配置文件和擴展詞典和停用詞詞典添加到classpath下
2.2.2 maven使用
第一步:將jar包安裝到本地倉庫
mvn install:install-file -DgroupId=IK-Analyzer -DartifactId=IK-Analyzer -Dversion=1.0 -Dpackaging=jar -Dfile=D:\Java\lib\IK-Analyzer-1.0-SNAPSHOT.jar
第二步:pom.xml引入
<dependency>
<groupId>IK-Analyzer</groupId>
<artifactId>IK-Analyzer</artifactId>
<version>1.0</version>
</dependency>
注意:hotword.dic和ext_stopword.dic文件的格式爲UTF-8,注意是無BOM 的UTF-8 編碼。
也就是說禁止使用windows記事本編輯擴展詞典文件
使用EditPlus.exe保存爲無BOM 的UTF-8 編碼格式,如下圖:
2.2.3 效果
2.3.4 添加分詞
2.3.5 禁用分詞
2.3 使用自定義分析器
//1.創建Directory對象,指定索引庫的存放位置
//存放到磁盤中
Directory directory = FSDirectory.open(Paths.get("D:\\test\\lucene\\programme"));
//存放到內存中
//Directory directory = new RAMDirectory();
//2.指定一個IKAnalyzer分析器,對文檔內容進行分析
Analyzer analyzer = new IKAnalyzer();
//3.基於分析器創建 IndexWriterConfig 對象
IndexWriterConfig config = new IndexWriterConfig(analyzer);