什么是分析器?

分析(Analysis)在Lucene中指的是将域(Field)文本转换为最基本的索引表示单元—项(Term)的过程。

分析器(Analyzer)对分析操作进行了封装,通过执行一系列操作,将文本语汇单元化,

这些操作包括提取单词、去除标点符号、去除语汇单元上的音调符号、将大写字母转换成小写、移除常用词、将单词转换为词干(词干还原)等。

标准分析器

  @Test
//默认分析器
public void testTokenStream() throws IOException {
//创建一个标准分析器对象
Analyzer analyzer = new StandardAnalyzer();
//获得tokenStream对象
//第一个参数:域名,可以随便给一个
//第二个参数:要分析的文本内容
TokenStream tokenStream = analyzer.tokenStream("test", "The Spring Framework provides a comprehensive programming and configuration model.");
//添加一个引用,可以获得每个关键词
CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
//添加一个偏移量的引用,记录了关键词的开始位置以及结束位置
OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);
//将指针调整到列表的头部
tokenStream.reset();
//遍历关键词列表,通过incrementToken方法判断列表是否结束
while(tokenStream.incrementToken()) {
//关键词的起始位置
System.out.println("start->" + offsetAttribute.startOffset());
//取关键词
System.out.println(charTermAttribute);
//结束位置
System.out.println("end->" + offsetAttribute.endOffset());
}
tokenStream.close();
}

  

效果

中文分析器

第三方中文分析器:IKAnalyzer

IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。

导入依赖

	<!-- https://mvnrepository.com/artifact/com.jianggujin/IKAnalyzer-lucene -->
<dependency>
<groupId>com.jianggujin</groupId>
<artifactId>IKAnalyzer-lucene</artifactId>
<version>8.0.0</version>
</dependency>

  

配置IKAnalyzer,导入配置文件

hotword.dic 扩展词典,可以将时尚的网络名词放入到该词典当中,这样就能根据扩展词典进行分词
stopword.dic 停用词词典,可以将无意义的词和敏感词汇放入到该词典当中,这样在分析的时候就会忽略这些内容

在自定义扩展词典和停用词词典的过程当中,千万不要使用windows记事本编辑,因为windows记事本是UTF-8+BOM编码

使用IKAnalyzer进行分词

    @Test
//自定义分析器
public void addDocument() throws Exception {
//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();
}

  

效果

创建的时候使用IKAnalyzer

IndexWriter indexWriter=new IndexWriter(directory,new IndexWriterConfig(new IKAnalyzer()));

  

最新文章

  1. DDD 领域驱动设计-三个问题思考实体和值对象
  2. C#回顾 - 8.利用反射动态创建对象
  3. 元素设置为display:none,其绑定的事件仍存在
  4. 【转】Android Support v4、v7、v13的区别和应用场景
  5. Spring aop实现方式记录
  6. linux下神奇的script命令
  7. 51Testing招聘软件测试课程研发人员
  8. JavaScript 之 Cookie
  9. 关于调用约定(cdecl、fastcall、、thiscall) 的一点知识(用汇编来解释)good
  10. Python拉勾爬虫——以深圳地区数据分析师为例
  11. Mac Os系统设置
  12. lua 操作数据库
  13. SSM-SpringMVC-03:SpringMVC执行流程一张有意思的图
  14. [翻译][架构设计]The Clean Architecture
  15. Java基础系列——序列化(一)
  16. DateUtils时间单元说明
  17. CRC8校验
  18. 非阻塞套接字编程, IO多路复用(epoll)
  19. LeetCode - Department Highest Salary
  20. 关于service相关知识的认识

热门文章

  1. python笔记05
  2. laravel脚手架搭建项目问题之生产环境element-ui组件字体图标显示错误问题
  3. 利用在线绘制3d几何图形工具分析投影变化
  4. springIOC源码接口分析(五):ListableBeanFactory
  5. 使用c++标准IO库实现txt文本文件的读与写操作
  6. SpringBoot学习遇到的问题(1) - 配置文件有日志的debug模式等配置项,为什么不起作用
  7. 第一篇:CDH配置本地http服务
  8. Eureka注册中心高可用集群配置
  9. java-zhisji
  10. 视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版)