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);