java lucene词干提取_一文看懂词干提取和词形还原(概念、异同、算法)

2023-11-22 05:40

本文主要是介绍java lucene词干提取_一文看懂词干提取和词形还原(概念、异同、算法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文首发自 easyAI - 产品经理的 AI 知识库

56e62a6fe004

一文看懂词干提取、词形还原

词干提取和词形还原是英文语料预处理中的重要环节。虽然他们的目的一致,但是两者还是存在一些差异。

本文将介绍他们的概念、异同、实现算法等。

词干提取和词形还原在 NLP 中在什么位置?

词干提取是英文语料预处理的一个步骤(中文并不需要),而语料预处理是 NLP 的第一步,下面这张图将让大家知道词干提取在这个知识结构中的位置。

56e62a6fe004

词干提取和词形还原在 NLP 中在什么位置

什么是词干提取和词形还原?

词干提取 - Stemming

词干提取是去除单词的前后缀得到词根的过程。

大家常见的前后词缀有「名词的复数」、「进行式」、「过去分词」...

56e62a6fe004

词干提取

词形还原 - Lemmatisation

词形还原是基于词典,将单词的复杂形态转变成最基础的形态。

词形还原不是简单地将前后缀去掉,而是会根据词典将单词进行转换。比如「drove」会转换为「drive」。

56e62a6fe004

词形还原

为什么要做词干提取和词形还原?

比如当我搜索「play basketball」时,Bob is playing basketball 也符合我的要求,,但是 play 和 playing 对于计算机来说是 2 种完全不同的东西,所以我们需要将 playing 转换成 play。

词干提取和词形还原的目的就是将长相不同,但是含义相同的词统一起来,这样方便后续的处理和分析。

词干提取和词形还原的 4 个相似点

56e62a6fe004

词干提取和词形还原的 4 个相似点

目标一致。词干提取和词形还原的目标均为将词的屈折形态或派生形态简化或归并为词干(stem)或原形的基础形式,都是一种对词的不同形态的统一归并的过程。

结果部分交叉。词干提取和词形还原不是互斥关系,其结果是有部分交叉的。一部分词利用这两类方法都能达到相同的词形转换效果。如“dogs”的词干为“dog”,其原形也为“dog”。

主流实现方法类似。目前实现词干提取和词形还原的主流实现方法均是利用语言中存在的规则或利用词典映射提取词干或获得词的原形。

应用领域相似。主要应用于信息检索和文本、自然语言处理等方面,二者均是这些应用的基本步骤。

词干提取和词形还原的 5 个不同点

56e62a6fe004

词干提取和词形还原的 5 个不同点

在原理上,词干提取主要是采用“缩减”的方法,将词转换为词干,如将“cats”处理为“cat”,将“effective”处理为“effect”。而词形还原主要采用“转变”的方法,将词转变为其原形,如将“drove”处理为“drive”,将“driving”处理为“drive”。

在复杂性上,词干提取方法相对简单,词形还原则需要返回词的原形,需要对词形进行分析,不仅要进行词缀的转化,还要进行词性识别,区分相同词形但原形不同的词的差别。词性标注的准确率也直接影响词形还原的准确率,因此,词形还原更为复杂。

在实现方法上,虽然词干提取和词形还原实现的主流方法类似,但二者在具体实现上各有侧重。词干提取的实现方法主要利用规则变化进行词缀的去除和缩减,从而达到词的简化效果。词形还原则相对较复杂,有复杂的形态变化,单纯依据规则无法很好地完成。其更依赖于词典,进行词形变化和原形的映射,生成词典中的有效词。

在结果上,词干提取和词形还原也有部分区别。词干提取的结果可能并不是完整的、具有意义的词,而只是词的一部分,如“revival”词干提取的结果为“reviv”,“ailiner”词干提取的结果为“airlin”。而经词形还原处理后获得的结果是具有一定意义的、完整的词,一般为词典中的有效词。

在应用领域上,同样各有侧重。虽然二者均被应用于信息检索和文本处理中,但侧重不同。词干提取更多被应用于信息检索领域,如Solr、Lucene等,用于扩展检索,粒度较粗。词形还原更主要被应用于文本挖掘、自然语言处理,用于更细粒度、更为准确的文本分析和表达

3 种主流的词干提取算法

56e62a6fe004

3 种主流的词干提取算法

Porter

这种词干算法比较旧。它是从20世纪80年代开始的,其主要关注点是删除单词的共同结尾,以便将它们解析为通用形式。它不是太复杂,它的开发停止了。

通常情况下,它是一个很好的起始基本词干分析器,但并不建议将它用于复杂的应用。相反,它在研究中作为一种很好的基本词干算法,可以保证重复性。与其他算法相比,它也是一种非常温和的词干算法。

「推荐」Snowball

种算法也称为 Porter2 词干算法。它几乎被普遍认为比 Porter 更好,甚至发明 Porter 的开发者也这么认为。Snowball 在 Porter 的基础上加了很多优化。Snowball 与 Porter 相比差异约为5%。

Lancaster

Lancaster 的算法比较激进,有时候会处理成一些比较奇怪的单词。如果在 NLTK 中使用词干分析器,则可以非常轻松地将自己的自定义规则添加到此算法中。

词形还原的实践方法

词形还原是基于词典的,每种语言都需要经过语义分析、词性标注来建立完整的词库,目前英文词库是很完善的。

Python 中的 NLTK 库包含英语单词的词汇数据库。这些单词基于它们的语义关系链接在一起。链接取决于单词的含义。特别是,我们可以利用 WordNet。

import nltk

from nltk.stem import WordNetLemmatizer

lemmatizer = WordNetLemmatizer()

print(lemmatizer.lemmatize("blogs"))

#Returns blog

总结

词干提取和词形还原都是将长相不同,但是含义相同的词统一起来,这样方便后续的处理和分析。

他们是英文语料预处理中的一个环节。

词干提取和词形还原的 4 个相似点:

目标一致

部分结果一致

主流实现方式类似

应用领域相似

词干提取和词形还原的 5 个不同点:

原理上不同

词形还原更加复杂

具体实现方式的侧重点不同

呈现结果有区别

应用领域上,侧重点不完全一致

3 种词干提取的主流算法:

Porter

Snowball

Lancaster

英文的词形还原可以直接使用 Python 中的 NLTK 库,它包含英语单词的词汇数据库。

这篇关于java lucene词干提取_一文看懂词干提取和词形还原(概念、异同、算法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/407912

相关文章

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows