【Elasticsearch】词干提取(Stemming)

devtools/2025/2/13 19:57:24/

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

例如,`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.总结

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


http://www.ppmy.cn/devtools/158573.html

相关文章

vue基础(八)

在 Vue 中&#xff0c;组件之间的传值方式主要包括以下几种情况&#xff1a; 1. 父组件向子组件传值&#xff08;props&#xff09; 父组件通过 props 传递数据给子组件&#xff1a; <!-- Parent.vue --> <template><ChildComponent :msg"message"…

arcgis for js实现平移立体效果

在web&#xff08;GIS&#xff09;开发中&#xff0c;利用 ArcGIS API for JavaScript 实现各种炫酷的地图效果是很常见的需求。本文将介绍如何使用 ArcGIS API for JavaScript 实现平移立体效果&#xff0c;通过加载边界线&#xff0c;根据边界线平移生成新的面&#xff0c;再…

Spring MVC 拦截器(Interceptor)与过滤器(Filter)的区别?

1、两者概述 拦截器&#xff08;Interceptor&#xff09;&#xff1a; 只会拦截那些被 Controller 或 RestController 标注的类中的方法处理的请求&#xff0c;也就是那些由 Spring MVC 调度的请求。过滤器&#xff08;Filter&#xff09;&#xff1a; 会拦截所有类型的 HTTP …

redis复制

文章目录 复制功能的实现 部分冲同步实现复制偏移量复制积压缓冲区复制积压缓冲区的大小能否调整&#xff1f;&#xff1f;&#xff1f; 服务器运行ID PSYNC命令的实现复制的实现心跳检测检测主从服务器的网络连接状态辅助实现&#xff01;min-slaves配置选项检测命令去失 总结…

AF3 superimpose函数解读

AlphaFold3 superimpose函数通过使用SVD最小化RMSD&#xff0c;将坐标叠加到参考上&#xff0c;在蛋白质结构预测中用于比较预测结构与真实结构的相似性。 源代码&#xff1a; from src.utils.geometry.alignment import weighted_rigid_align from src.utils.geometry.vect…

React 第二十五节 <Fragment></Fragment> 的用途以及使用注意事项详解

文章如果错误偏差&#xff0c;烦请及时批评指正 一、为什么要使用 <Fragment>&#xff1f; 因为在 React 中&#xff0c;组件必须返回单个根元素。当我们尝试直接返回相邻的 JSX 元素时&#xff1a; function BrokenComponent() {return (<h1>标题</h1><…

在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.20.2

文章目录 1. 安装 nvm&#xff08;如果还没有安装的话&#xff09;2. 加载 nvm 配置3. 列出特定系列的 Node.js 版本&#xff08;远程&#xff09;&#xff1a;4. 安装 Node.js 16.20.25. 使用指定版本的 Node.js6. 验证安装 在 Mac ARM 架构上使用 nvm 安装 Node.js 版本 16.…

anolis os 8.9-jenkins2.492.1-role-base

一、插件安装 二、新建用户 三、manage roles 3.1 manage role 配置 3.2 Assign Roles