【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数据源插入合并域预览并生成合并文档 效果一览 效果前 效果后 场景及问题 在执行项目时的验收阶段,对于测试…...

SSIM、PSNR、LPIPS、MUSIQ、NRQM、NIQE 六个图像质量评估指标
评价指标 1. SSIM(Structural Similarity Index) 📌 定义 结构相似性指数(Structural Similarality Index)是一种衡量两幅图像相似性的指标,考虑了亮度、对比度和结构信息的相似性,比传统的 P…...

基于开源AI大模型与AI智能名片的S2B2C商城小程序源码优化:企业成本管理与获客留存的新范式
摘要:本文以企业成本管理的两大核心——外部成本与内部成本为切入点,结合开源AI大模型、AI智能名片及S2B2C商城小程序源码技术,构建了企业数字化转型的“技术-成本-运营”三维模型。研究结果表明,通过AI智能名片实现获客留存效率提…...
Ubuntu崩溃修复方案
当Ubuntu系统崩溃时,可依据崩溃类型(启动失败、运行时崩溃、完全无响应)选择以下修复方案。以下方法综合了官方推荐和社区实践,按操作风险由低到高排序: 一、恢复模式(Recovery Mode) 适用场景:系统启动卡顿、登录后黑屏、软件包损坏等。 操作步骤: …...
相机Camera日志分析之二十五:高通相机Camx 基于预览1帧的process_capture_request四级日志分析详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:相机Camera日志分析之二十四:高通相机Camx 基于预览1帧的process_capture_request三级日志分析详解 ok 这一篇我们开始讲: 相机Camera日志分析之二十五:高通相机Camx 基于预览1帧的process_capture_…...
Jenkins:自动化流水线的基石,开启 DevOps 新时代
从持续集成到持续交付的全流程自动化工具 一、什么是 Jenkins? Jenkins 是一款开源的 自动化服务器,专注于持续集成(CI)和持续交付(CD)。它通过插件化的架构支持几乎所有的开发、运维和测试工具ÿ…...
uniapp+vue3实现CK通信协议(基于jjc-tcpTools)
1. TCP 服务封装 (tcpService.js) export class TcpService {constructor() {this.connections uni.requireNativePlugin(jjc-tcpTools)this.clients new Map() // 存储客户端连接this.servers new Map() // 存储服务端实例}// 创建 TCP 服务端 (字符串模式)createStringSe…...
[论文阅读] 软件工程 | 如何挖掘可解释性需求?三种方法的深度对比研究
如何挖掘可解释性需求?三种方法的深度对比研究 研究背景:当软件变复杂,我们需要“说明书” 想象你买了一台智能家电,却发现它的运行逻辑完全看不懂,按钮按下后毫无反应,故障时也不提示原因——这就是现代…...
每日算法刷题Day23 6.5:leetcode二分答案3道题,用时1h40min(有点慢)
8. 3007.价值和小于等于K的最大数字(中等,学习,太难,先过) 3007. 价值和小于等于 K 的最大数字 - 力扣(LeetCode) 思想 1.给你一个整数 k 和一个整数 x 。整数 num 的价值是它的二进制表示中在 x,2x,3x …...

攻防世界-XCTF-Web安全最佳刷题路线
每次写序都是最烦恼的,都不知道写什么,CTF是团队竞赛,有很多分支(Web安全,密码学,杂项,Pwn,逆向,安卓),可以每个领域都涉猎,或许感觉那…...

rust或tauri项目执行命令的时候,cmd窗口也会弹出显示解决方法
阻止 Tauri 执行命令时弹出 CMD 窗口 当你在 Tauri 中使用 tokio::process::Command 执行命令时弹出 CMD 窗口,这是因为 Windows 默认会为控制台程序创建可见窗口。以下是几种解决方法: 1. 使用 Windows 特有的创建标志 (推荐) #[tauri::command] pub…...