原生分词器(StandardAnalzyer)|学习笔记

简介: 快速学习原生分词器(StandardAnalzyer)

开发者学堂课程【Lucene 知识精讲与实战(上) 原生分词器(StandardAnalzyer)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/700/detail/12339


原生分词器(StandardAnalzyer)

 

Lucene 原生分词器

1.什么是原生分词器?

原生分词器是 Lucene 自带的分词器。

2. StandardAnalyzer

StandardAnalyzer 叫做标准分词器。

特点:Lucene 提供的标准分词器,可以对用英文进行天然的切分词。对英文的分词效果很好,因为英文和英文,单词和单词之间是用空格进行分隔的,单词不可能连起来写,如果不进行分隔,单词就不叫单词,它只是一堆英文字母。对中文一般用语义分析,同一句话如果切分词不同,会有不一样的意思,StandardAnalyzer 对中文是单字分词,也就是一个字就认为是一个词。

3.示例

(1)下面请看 Lucene 原生分词器的部分源代码。

protected TokenStreamComponents createComponents(String fieldName){

final StandardTokenizer src = new StandardTokenizer ();

src.setMaxTokenLength(this.maxTokenLength);

Tokenstream tok = new LowerCaseFilter (src);

Tokenstream tok = new StopFilter (tok,this.stopwords);

return new TokenStreamComponents(src,tok){

protected void setReader (Reader reader){

src.setMaxTokenLength(StandardAnalyzer.this.maxTokenLength):

super.setReader (reader);

选中 protected TokenStreamComponents

createComponents(String fieldName){

中的createComponents,

找到 StandardAnalyzer ,如图:

image.png

(2)然后打开 StandardAnalyze ,根据它的源代码找它的方法,如图:

image.png

传进的参数 fieldName 叫做域名,它在方法当中会把域的值取出,因为 name 名称里面包含了中英文、字母,空格等,所以可以假设存的域名是 name,然后 name 后面的值会被取出取出之后,会经过以下过程:

(3)请看以下代码:

protected TokenStreamComponents createComponents(String fieldName){

final StandardTokenizer src = new StandardTokenizer ();

src.setMaxTokenLength(this.maxTokenLength);

Tokenstream tok = new LowerCaseFilter (src);

Tokenstream tok = new StopFilter (tok,this.stopwords);

return new TokenStreamComponents(src,tok){

protected void setReader (Reader reader){

src.setMaxTokenLength(StandardAnalyzer.this.maxTokenLength):

super.setReader (reader);


其中,j 代码中的 LowerCaseFilter 是把大写字母转换成小写字母,StopFilter 的作用是去掉停用词,这里还有其他的一些过滤器。

回到文档中,如图是语汇单元的生成过程:

image.png

可以看到,传入域名,把域值取出,取出之后进行切分词,在切分词时,首先 StandardAnalyzer 对英文的分词是通过空格切分;对中文是一个字就是一个词的切分。切分词之后会进行大小写字母的转换,然后去掉停用词、空格以及标点符号等过滤器之后,就会返回已经切分完成的值给用户。

(4)举例:

原文档内容:

Lucene is a Java search engine。

分析后得到的多个词汇单元:

Lucene、Java、full、text、search、engine

刚开始原文档的内容是由空格分隔的,切分之后的文档内容就是:Lucene、Java、full、text、search、engine 的格式,之前的 is 和 a 在搜索中没有意义,所以它们和空格以及最后的句号一起被过滤了。这就是 StandardAnalyzer 的作用。

5如图:

这里使用 StandardAnalyzer 创建得到的结果。

image.png

可以看到,有4 g、6 g等词,这些就是切分后的词,而对于中文,这里显示一个字就是一个词。这就是 StandardAnalyzer 切分的效果。

image.png

相关文章
|
前端开发 Java 开发者
深入理解Spring Boot中的@Service注解
【4月更文挑战第22天】在 Spring Boot 应用开发中,@Service 注解扮演着特定的角色,主要用于标识服务层组件。本篇技术博客将全面探讨 @Service 注解的概念,并提供实际的应用示例,帮助开发者理解如何有效地使用这一注解来优化应用的服务层架构
3003 1
|
消息中间件 Java 中间件
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。接下来我就将从零开始介绍什么是消息队列?消息队列的应用场景?如何进行选型?如何在Spring Boot项目中整合集成消息队列。
25453 10
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
219856 69
|
JSON API 数据格式
使用Python发送包含复杂JSON结构的POST请求
使用Python发送包含复杂JSON结构的POST请求
|
Linux C# C++
【.NET Developer】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
本文介绍了如何使用VS2019和.NET框架创建一个Blazor应用,并将其部署到Azure应用服务。首先,Blazor是一个使用C#而非JavaScript构建交互式Web UI的框架,支持共享服务器和客户端应用逻辑,以及与Docker和Azure集成。任务包括创建Blazor项目,配置Dockerfile为Linux容器,本地测试,发布到Azure Container Registry (ACR),然后在Azure App Service for Container上部署。在部署过程中,需确保Docker设置正确,开启ACR的Admin访问权限,并监控镜像拉取和容器启动日志。
694 0
|
Java 编译器 测试技术
全面理解Maven Compiler Plugin-Maven编译插件
【10月更文挑战第16天】
3159 1
|
开发框架 前端开发 JavaScript
前端框架Layui的使用讲解(Layui搭建登录注册页面)(一)
前端框架Layui的使用讲解(Layui搭建登录注册页面)
1081 0
|
SQL 存储 JSON
Pandas.read_csv()函数及全部参数使用方法一文详解+实例代码(上)
Pandas.read_csv()函数及全部参数使用方法一文详解+实例代码
2540 0
Pandas.read_csv()函数及全部参数使用方法一文详解+实例代码(上)
|
开发工具
阿里云的镜像服务(mirrors.aliyun.com)可以同步 Google Cloud SDK 的软件包
阿里云的镜像服务(mirrors.aliyun.com)可以同步 Google Cloud SDK 的软件包
4331 3
|
Java Windows
java语音播报案例
java语音播报案例