【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.总结

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

相关推荐
risc1234565 小时前
【Elasticsearch】分析器的构成
elasticsearch
远飞的梦6 小时前
es应用实现基本搜索
大数据·elasticsearch·搜索引擎
risc1234566 小时前
【Elasticsearch】match_bool_prefix查询
elasticsearch
java 凯11 小时前
Ubuntu 上安装 Elasticsearch 7.6.0
ubuntu·elasticsearch·jenkins
risc12345611 小时前
【Elasticsearch】intervals查询
elasticsearch
勿忘初心9112 小时前
Android车机DIY开发之软件篇(十二) AOSP12下载编译
android·大数据·arm开发·嵌入式硬件·elasticsearch
risc12345613 小时前
【Elasticsearch】文本分析Text analysis概述
elasticsearch
risc1234561 天前
【Elasticsearch】Bucket Selector Aggregation
elasticsearch
risc1234561 天前
【Elasticsearch】derivative聚合
elasticsearch