当前位置: 首页 > article >正文

【Elasticsearch】词干提取(Stemming)

词干提取是将一个词还原为其词根形式的过程。这确保了在搜索过程中,一个词的不同变体能够匹配到彼此。

例如,`walking`(行走)和`walked`(走过)可以被还原到同一个词根`walk`(走)。一旦被还原,这两个词中的任何一个在搜索时都能匹配到对方。

词干提取是依赖语言的,但通常涉及从单词中移除前缀和后缀。

在某些情况下,一个词被还原后的词根形式可能并不是一个真实存在的词。例如,`jumping`(跳跃)和`jumpiness`(易跳性)都可以被还原为`jumpi`。尽管`jumpi`并不是一个真正的英语单词,但这并不影响搜索;只要一个词的所有变体都被还原为相同的词根形式,它们就能够正确匹配。

词干提取器分词过滤器

在Elasticsearch中,词干提取是由词干提取器分词过滤器来处理的。这些分词过滤器可以根据它们还原单词的方式被分类为:

• 基于算法的词干提取器,根据一组规则来还原单词。

• 基于词典的词干提取器,通过在词典中查找单词来还原它们。

由于词干提取会改变分词,我们建议在索引和搜索分析时使用相同的词干提取器分词过滤器。

基于算法的词干提取器会对每个单词应用一系列规则,将其还原为词根形式。例如,一个英语的基于算法的词干提取器可能会移除复数单词末尾的`-s`和`-es`后缀。

基于算法的词干提取器有以下一些优点:

• 它们几乎不需要设置,并且通常开箱即用。

• 它们占用的内存较少。

• 它们通常比基于词典的词干提取器更快。

然而,大多数基于算法的词干提取器只改变一个单词的现有文本。这意味着它们可能无法很好地处理那些不包含词根形式的不规则单词,例如:

• `be`(是)、`are`(是)和`am`(是)

• `mouse`(老鼠)和`mice`(老鼠)

• `foot`(脚)和`feet`(脚)

以下分词过滤器使用基于算法的词干提取:

• `stemmer`,为多种语言提供基于算法的词干提取,其中一些语言还有额外的变体。

• `kstem`,一个结合了基于算法的词干提取和内置词典的英语词干提取器。

• `porter_stem`,我们推荐的英语基于算法的词干提取器。

• `snowball`,使用基于Snowball的词干提取规则为多种语言提供词干提取。

基于词典的词干提取器会在提供的词典中查找单词,将未还原的单词变体替换为词典中的还原单词。

理论上,基于词典的词干提取器适用于:

• 还原不规则单词。

• 区分那些拼写相似但概念上不相关的单词,例如:

• `organ`(器官)和`organization`(组织)

• `broker`(经纪人)和`broken`(破碎的)

然而,在实践中,基于算法的词干提取器通常比基于词典的词干提取器表现更好。这是因为基于词典的词干提取器有以下缺点:

• 词典质量

一个基于词典的词干提取器的好坏取决于它的词典。为了能够很好地工作,这些词典必须包含大量的单词,定期更新,并且随着语言趋势的变化而变化。通常,当一个词典被制作出来时,它已经不完整了,并且其中的一些条目已经过时了。

• 大小和性能

基于词典的词干提取器必须将其词典中的所有单词、前缀和后缀加载到内存中。这可能会占用大量的RAM。低质量的词典在前缀和后缀移除方面也可能效率较低,这会显著减慢词干提取的过程。

你可以使用`hunspell`分词过滤器来执行基于词典的词干提取。

如果可用,我们建议在使用`hunspell`分词过滤器之前,先尝试使用你语言的基于算法的词干提取器。

有时,词干提取可能会产生拼写相似但概念上不相关的共享词根。例如,一个词干提取器可能会将`skies`(天空)和`skiing`(滑雪)都还原为相同的词根`ski`。

为了防止这种情况,并更好地控制词干提取,你可以使用以下分词过滤器:

• `stemmer_override`,它允许你为特定的分词定义词干提取规则。

• `keyword_marker`,它将指定的分词标记为关键字。被标记为关键字的分词不会被后续的词干提取器分词过滤器还原。

• `conditional`,它可以用来标记分词为关键字,类似于`keyword_marker`过滤器。

对于内置的语言分析器,你还可以使用`stem_exclusion`参数来指定一个不会被还原的单词列表。

 

词干(Stem)是语言学中的一个重要概念,指的是一个单词在去除词缀(前缀、后缀或中缀)之后的最核心部分。它是单词的“根”,通过在词干上添加不同的词缀,可以派生出不同形式或意义的单词。词干提取(Stemming)和词形还原(Lemmatization)是自然语言处理中与词干相关的两个重要过程,它们的目的是将单词的不同变体还原为一个统一的形式,以便于文本分析和信息检索。

1.词干的定义

词干是单词的核心部分,通常包含单词的基本意义。例如:

• 单词:`running`(跑步)

• 词干:`run`(跑)

• 单词:`unhappiness`(不快乐)

• 词干:`happi`(快乐)

在某些情况下,词干可能并不是一个完整的单词,但它仍然是单词的核心部分。

2.词干提取(Stemming)

词干提取是一种将单词还原为其词干形式的过程。它主要用于信息检索和文本分析中,确保不同形式的单词能够在搜索时被视为同一个词。例如:

• `running`、`runs`、`ran`都可以还原为词干`run`。

• `happiness`、`happy`、`happiest`都可以还原为词干`happi`。

词干提取的方法

• 基于规则的词干提取器(Algorithmic Stemmers):

• 使用一组预定义的规则来还原单词。例如,移除常见的后缀(如`-s`、`-es`、`-ing`)。

• 优点:简单、快速、内存占用少。

• 缺点:可能无法处理不规则单词(如`be`、`are`、`am`)。

• 常见的基于规则的词干提取器包括:

• Porter Stemmer:经典的英语词干提取器。

• Snowball Stemmer:支持多种语言的词干提取。

• 基于词典的词干提取器(Dictionary Stemmers):

• 使用一个词典来查找单词的词干形式。

• 优点:能够更好地处理不规则单词和拼写相似但意义不同的单词。

• 缺点:需要高质量的词典,内存占用大,速度较慢。

• 常见的基于词典的词干提取器包括:

• Hunspell:支持多种语言的词典词干提取。

3.词形还原(Lemmatization)

词形还原是将单词还原为其词典形式(词元,Lemma)的过程。与词干提取不同,词形还原通常需要考虑单词的词性(名词、动词、形容词等),因此结果更接近真实的单词形式。例如:

• 单词:`running`(跑步)

• 词干提取结果:`run`

• 词形还原结果:`run`(动词原形)

• 单词:`happiness`(快乐)

• 词干提取结果:`happi`

• 词形还原结果:`happy`(形容词原形)

词形还原的方法

• 基于规则的词形还原:

• 使用一组规则来还原单词。

• 基于词典的词形还原:

• 使用词典来查找单词的词元形式。

• 基于机器学习的词形还原:

• 使用机器学习模型来预测单词的词元形式。

4.词干提取与词形还原的区别

• 词干提取:

• 目标是将单词还原为一个统一的形式,但结果可能不是真实的单词。

• 速度快,适合大规模文本处理。

• 词形还原:

• 目标是将单词还原为其词典形式,结果通常是真实的单词。

• 需要考虑词性,速度较慢,但结果更准确。

5.应用场景

• 搜索引擎:通过词干提取或词形还原,确保用户输入的关键词能够匹配到文档中不同形式的单词。

• 文本挖掘:在分析文本数据时,将单词还原为统一的形式,便于统计和分析。

• 自然语言处理:在机器翻译、情感分析等任务中,词干提取和词形还原可以帮助更好地理解文本的语义。

6.总结

词干是单词的核心部分,通过词干提取和词形还原,可以将单词的不同变体还原为一个统一的形式,从而提高文本处理的效率和准确性。选择哪种方法取决于具体的应用场景和需求。

相关文章:

【Elasticsearch】词干提取(Stemming)

词干提取是将一个词还原为其词根形式的过程。这确保了在搜索过程中,一个词的不同变体能够匹配到彼此。 例如,walking(行走)和walked(走过)可以被还原到同一个词根walk(走)。一旦被还…...

Rander压力测试监测,更改服务端资源node

测试策略 压力测试, 目前是本地VM的资源不够,导致压力瓶颈,目前本地的VM,CPU是6个,可以增加到8个,服务端目前资源利用率没有达到最高点 we are now using 3 nodes with 3 pods, therefore, we need the …...

Go语言实现十大排序算法超细节图片讲解

基础排序 冒泡排序 将序列中的元素进行两两比较,将大的元素移动到序列的末尾。 平均时间复杂度是O(n^2),最坏时间复杂度是O(n^2),最好时间复杂度是O(n),排序结果具有稳定性,空间复杂度是O(1)。 这里所说的稳定性是针对…...

linux-centos等测试环境做压力测试

一, jmeter环境安装 1, jdk下载安装 因为jmeter使用Java写的测试工具,应用需要jdk环境支持. yum -y install java-1.8.0-openjdk* 注意:【jdk和*通配符之间不能敲空格,有空格不能匹配所有的子文件】【安装过程中需要等待它执行完成,不要中…...

Django中实现可靠的定时任务调度系统

在许多Web应用程序中,定时任务是一个常见的需求。无论是数据同步、报告生成还是定期维护,都需要一个可靠的调度系统。本文将介绍如何在Django项目中实现一个强大的定时任务调度系统,该系统不仅能够按时执行任务,还能处理分布式环境中的并发问题。 1. 概述 我们将使用以下…...

【鸿蒙Next】写入沙箱的日志文件如何查看

demo案例:https://gitee.com/pengyoucongcode/TxtEdit 文章参考:https://blog.csdn.net/qq_42896653/article/details/144782468...

网页五子棋——通用模块

目录 项目创建 通用功能模块 错误码 自定义异常类 CommonResult jackson 加密工具 项目创建 使用 idea 创建 SpringBoot 项目,并引入相关依赖: 配置 MyBatis: 编辑 application.yml: spring:datasource: # 数据库连接配…...

第6章 6.2使用ASP.NET Core 开发WebAPI ASP.NET Core Web API

6.2.1 Web API项目的搭建 进入VS,【创建新项目】,选择【ASP.NET Core Web API】模板,【下一步】,编辑项目名称及项目位置,【下一步】,选择框架,其他选项默认即可,【创建】。 进入项…...

[MFC] 使用控件

介绍如何使用控件,以及如何获取控件中的数值 check Box 添加点击事件,即选中和取消选中触发的事件 第一种方式是按照如下方式第二种方式是直接双击点击进去 void CMFCApplication1Dlg::OnBnClickedCheckSun() {// TODO: 在此添加控件通知处理程序代…...

景联文科技:以精准标注赋能AI未来,打造高质量数据基石

在人工智能蓬勃发展的时代,数据已成为驱动技术革新的核心燃料,而高质量的数据标注则是让AI模型从“感知”走向“认知”的关键桥梁。作为深耕数据服务领域的创新者,景联文科技始终以“精准、高效、安全”为核心理念,为全球AI企业提…...

2月14(信息差)

🌍杭州:全球数贸港核心区建设方案拟出台 争取国家支持杭州在网络游戏管理给予更多权限 🎄Kimi深夜炸场:满血版多模态o1级推理模型!OpenAI外全球首次!Jim Fan:同天两款国产o1绝对不是巧合&#x…...

UE_C++ —— Metadata Specifiers

声明UClasses、UFunctions、UProperties、UEnums和UInterfaces时使用的元数据关键词,表示其与引擎和关卡编辑器诸多方面的互动方式; 当声明classe、interfaces、structs、enums、enum values、functions、or propertie时,可添加 Metadata Spe…...

C++ 常用的设计模式

1:单例模式:首先能想到的,最为重要的一个设计模式。确保一个类仅有一个实例,提供一个 全局访问点,惯用做法是屏蔽构造数访问(设为private),通过static 权限达到间接访问调用的目的…...

web集群(LVS-DR)

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项 目,它的官方站点是 www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在 Linux2.4内核以前,使用LVS时必须要重新编…...

Instagram与小红书的自动化运营

Instagram与小红书的自动化运营 引言 在这个信息爆炸的时代,社交媒体成为了与世界互动的重要平台。在这样的背景下,如何高效地运营你的Instagram或小红书账户,成为众多内容创作者和品牌的重要课题。那么,自动化运营究竟是什么&a…...

从二维到三维3D工业相机如何改变机器视觉检测

从二维到三维,3D工业相机在机器视觉检测中带来了显著变革,主要体现在以下几个方面: 深度信息获取 二维相机:只能提供平面信息,无法获取物体的深度。 三维相机:通过深度信息,能够更精确地测量物…...

多媒体软件安全与授权新范例,用 CodeMeter 实现安全、高效的软件许可管理

背景概述 Reason Studios 成立于 1994 年,总部位于瑞典斯德哥尔摩,是全球领先的音乐制作软件开发商。凭借创新的软件产品和行业标准技术,如 ReWire 和 REX 文件格式,Reason Studios 为全球专业音乐人和业余爱好者提供了一系列高质…...

DeePseek结合PS!批量处理图片的方法教程

​ ​ 今天我们来聊聊如何利用deepseek和Photoshop(PS)实现图片的批量处理。 传统上,批量修改图片尺寸、分辨率等任务往往需要编写脚本或手动处理,而现在有了AI的辅助,我们可以轻松生成PS脚本,实现自动化处…...

2.14寒假作业

web:[SWPUCTF 2021 新生赛]PseudoProtocols 打开环境给了提示要我们找 hint.php url是给了后缀的,不单纯是地址,直接用为协议看一下目标文件,得到base64加密的文字 解密,提示我们访问一个文件 跟着思路走访问文件之后…...

【鱼眼镜头12】Scaramuzza的鱼眼相机模型实操,不依赖于具体的相机几何结构,直接从图像数据出发,因此更具灵活性。

文章目录 Scaramuzza相机模型标定效果2、原理和代码代码1、 2D映射到3D,函数输入为2D点坐标OCAM参数代码功能详解2、3D --> 2D 3、总结Scaramuzza 模型的核心思想Scaramuzza 模型的核心思想与 Kannala-Brandt 模型的对比Scaramuzza 模型的独特之处Scaramuzza 的意…...

(Windows | Linux)ssh访问服务器报错:no matching key exchange method found

问题现象 ssh user1192.168.1X.XX Unable to negotiate with 192.168.1X.XX port 22: no matching key exchange method found. Their offer: gss-group1-sha1-toWM5Slw5Ew8Mqkayal2g,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-…...

达梦分布式集群DPC_架构详解_yxy

达梦分布式集群DPC_架构详解 1 DPC核心架构介绍1.1 架构图1.2 DPC核心架构组件 2 多副本2.1 多副本架构图2.2 多副本示例2.3 RAFT组概念2.4 表空间与RAFT组的关系 1 DPC核心架构介绍 1.1 架构图 1.2 DPC核心架构组件 DMDPC 架构由三部分组成 SP(SQL Processor&…...

51单片机独立按键的扩展应用

提示: 按键S7和S6为选择键,确定控制键控制那组LED指示灯。按键S5和S4为控制键,按键该键点亮指定的LED指示灯,松开后熄灭。按下S7点亮L1指示灯,L1点亮后,S6不响应操作,S5控制L3,S4控…...

浅识MQ的 Kafka、ActiveMQ、RabbitMQ、RocketMQ区别

DeepSeek回复: 以下是主流消息队列(MQ)的对比分析,结合核心特性、适用场景和实际案例说明: 一、主流MQ对比分析 维度 Kafka RabbitMQ RocketMQ ActiveMQ所属公司Apache(LinkedIn开源)…...

模型报错infeasible,如何查看冲突约束

在使用Gurobi求解模型时,如果模型不可行(infeasible),可以通过以下步骤来查看冲突的约束或变量,帮助诊断问题: 1. 使用 computeIIS() 方法 Gurobi 提供了 computeIIS() 方法,用于计算不可行模…...

Golang GORM系列:GORM事务及错误处理

在数据库管理领域,确保数据完整性至关重要。GORM是健壮的Go对象关系映射库,它为开发人员提供了维护数据一致性和优雅地处理错误的基本工具。本文是掌握GORM事务和错误处理的全面指南。我们将深入研究如何使用事务来保证原子性,并探索有效处理…...

如何实现对 ELK 各组件的监控?试试 Metricbea

上一章基于 Filebeat 的日志收集使用Filebeat收集文件中的日志,而Metricbeat则是收集服务器存活性监测和系统指标的指标。 1. Filebeat和Metricbeat的区别 特性FilebeatHeartbeat作用收集和转发日志监测服务可用性数据来源服务器上的日志文件远程主机、API、服务主…...

图像处理篇---基本Python图像处理

文章目录 前言1. 图像灰度化原理Python 实现 2. 图像二值化原理:Python 实现 3. 图像掩膜(Mask)原理Python 实现 4. 腐蚀(Erosion)和膨胀(Dilation)原理Python 实现 5. 其他常用图像操作(1) 图像…...

使用PHP爬虫获取1688商品分类:实战案例指南

在电商领域,商品分类信息是商家进行市场调研、选品分析和竞争情报收集的重要基础。1688作为国内领先的B2B电商平台,提供了丰富且详细的商品分类数据。通过PHP爬虫技术,我们可以高效地获取这些分类信息,为商业决策提供有力支持。 …...

【微服务学习二】nacos服务发现与负载均衡

nacos服务发现 想要开启服务发现,需要在main函数上添加 EnableDiscoveryClient 注解 然后我们编写一个controller类来查询nacos中注册的所有微服务以及对应的ip端口号 Controller public class DiscoveryController {AutowiredDiscoveryClient discoveryClient;//…...