【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(走)。一旦被还…...

【AI论文】10亿参数大语言模型能超越405亿参数大语言模型吗?重新思考测试时计算最优缩放
摘要:测试时缩放(Test-Time Scaling,TTS)是一种通过在推理阶段使用额外计算来提高大语言模型(LLMs)性能的重要方法。然而,目前的研究并未系统地分析策略模型、过程奖励模型(Process …...

【设计模式】【行为型模式】状态模式(State)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 📫 欢迎V: flzjcsg2,我们共同讨论Java深渊的奥秘 …...
PostgreSQL错误: 编码“UTF8“的字符0x0xe9 0x94 0x99在编码“WIN1252“没有相对应值
错误介绍 今天遇到一个错误,记录一下 2025-02-10 17:04:35.264 HKT [28816] 错误: 编码"WIN1252"的字符0x0x81在编码"UTF8"没有相对应值 2025-02-10 17:04:35.264 HKT [28816] 错误: 编码"UTF8"的字符0x0xe9 0x94 0x99在编码&quo…...

Mac ARM 架构的命令行(终端)中,删除整行的快捷键是:Ctrl + U
在 Mac ARM 架构的命令行(终端)中,删除整行的快捷键是: Ctrl U这个快捷键会删除光标所在位置到行首之间的所有内容。如果你想删除光标后面的所有内容,可以使用: Ctrl K这两个快捷键可以帮助你快速清除当…...
Vue2下判断有新消息来时以站内信方式在页面右下角弹出
以下是完整的Vue2全局通知组件实现方案,包含自动挂载和全局调用方法: 第一步:创建通知组件 <!-- src/components/Notification/index.vue --> <template><div class"notification-container"><transition-g…...

AI语言模型的技术之争:DeepSeek与ChatGPT的架构与训练揭秘
云边有个稻草人-CSDN博客 目录 第一章:DeepSeek与ChatGPT的基础概述 1.1 DeepSeek简介 1.2 ChatGPT简介 第二章:模型架构对比 2.1 Transformer架构:核心相似性 2.2 模型规模与参数 第三章:训练方法与技术 3.1 预训练与微调…...

网络安全中的account和audit区别
一、AWD介绍 AWD:Attack With Defence,即攻防对抗,比赛中每个队伍维护多台服务器(一般两三台,视小组参赛人数而定),服务器中存在多个漏洞(web层、系统层、中间件层等)&a…...

Visual Studio 使用 “Ctrl + /”键设置注释和取消注释
问题:在默认的Visual Studio中,选择单行代码后,按下Ctrl /键会将代码注释掉,但再次按下Ctrl /键时,会进行双重注释,这不是我们想要的。 实现效果:当按下Ctrl /键会将代码注释掉,…...
【密评】 | 商用密码应用安全性评估从业人员考核题库(23)
在GM/T0048《智能密码钥匙密码检测规范》中,产品的对称算法性能应满足哪个标准中的要求()。 A.GM/T 0016《智能密码钥匙密码应用接口规范》 B.GM/T 0017《智能密码钥匙密码应用接口数据格式规范》 C.GM/T 0027《智能密码钥匙技术规范》 D.GM/T 0028《密码模块安全技术要求》…...

【MySQL】幻读 案例分析
目录 假设1:只在 id5 这一行加锁,其他行不加锁? 幻读的定义 幻读的场景 假设1 产生的问题:语义被破坏 假设1 产生的问题:数据一致性 结论: 假设1不成立 假设2:扫描过程中每一行都加上写锁…...
10bit VS 8bit 视频:色彩深度的较量,谁才是视觉盛宴的王者?
10bit 和 8bit 视频 10bit 视频和 8bit 视频的主要区别在于色彩深度和细节表现能力。10bit 视频具有更高的色彩深度和更丰富的细节表现,能够提供更平滑的色彩过渡和更真实的图像质量,但需要更多的存储空间和带宽。8bit 视频则在存储和传输方面更加高效,适合于对存储空间和带…...
讲解下MySql的外连接查询在SpringBoot中的使用情况
在Spring Boot中使用MySQL的外连接查询时,通常通过JPA、MyBatis或JDBC等持久层框架来实现。外连接查询主要用于从多个表中获取数据,即使某些表中没有匹配的记录。外连接分为左外连接(LEFT JOIN)、右外连接(RIGHT JOIN&…...
蓝桥杯试题:归并排序
一、问题描述 在一个神秘的岛屿上,有一支探险队发现了一批宝藏,这批宝藏是以整数数组的形式存在的。每个宝藏上都标有一个数字,代表了其珍贵程度。然而,由于某种神奇的力量,这批宝藏的顺序被打乱了,探险队…...
物联网(IoT)如何与人工智能(AI)的结合
物联网(IoT)与人工智能(AI)的结合是当前技术发展的重要趋势,通常被称为 AIoT(人工智能物联网)。这种结合通过将AI的计算能力和数据分析能力与物联网的海量设备连接能力相结合,实现了…...

一致性Hash算法延伸至Redis分片扩容使Lua脚本失效如何解决
文章部分内容来源:小林coding 问题场景:我们需要用Lua脚本,并且这个Lua脚本需要用到两个Key,但这两个Key必须命中同一台机器才可以,不然Lua脚本就会执行失败。如果集群扩容可能会导致两个Key落到不同的节点上导致Lua脚…...
Idea 插件 Quickly-Code-Toolkit
使用说明 (一)全局设置 Paging Wrapper Setting(分页设置) 功能:主要用于在方法写入时,为返回参数提供分页包装类。设置方式:需准确填写分页包装类的全限定名,例如:com…...
先进制造aps专题二十九 基于ai智能体的生产排程和工厂生产仿真引擎的设计
上文中,我们说,通常的做法是,可以先通过排产仿真引擎产生生产计划,再在工厂仿真引擎里仿真执行,这样可以预先分析计划和执行的差异情况并进行调整优化 这里的产生生产计划,仿真生产执行和数据分析都是人工…...

【Cocos TypeScript 零基础 15.1】
目录 见缝插针UI脚本针脚本球脚本心得_旋转心得_更改父节点心得_缓动动画成品展示图 见缝插针 本人只是看了老师的大纲,中途不明白不会的时候再去看的视频 所以代码可能与老师代码有出入 SIKI_学院_点击跳转 UI脚本 import { _decorator, Camera, color, Component, directo…...

利用邮件合并将Excel的信息转为Word(单个测试用例转Word)
利用邮件合并将Excel的信息转为Word 效果一览效果前效果后 场景及问题解决方案 一、准备工作准备Excel数据源准备Word模板 二、邮件合并操作步骤连接Excel数据源插入合并域预览并生成合并文档 效果一览 效果前 效果后 场景及问题 在执行项目时的验收阶段,对于测试…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...