使用 Python 的词干提取

在下面的教程中,我们将了解使用 Python 编程语言中的 NLTK(自然语言工具包)包来词干的过程。

词干学导论

词干是自然语言处理流水线过程的重要组成部分。词干是生成词根/基本词的形态修改的过程。词干程序通常被认为是词干算法或词干分析器。词干算法将“检索”、“检索”、“检索”等词简化为词根词,将“检索”和“虫火谷”、“巧克力”、“巧克力”等词简化为词干“巧克力”。词干分析器的输入是分词的单词。但是这些符号化的单词从何而来呢?分词包括将文档分解成不同的单词。要了解更多关于分词的知识,可以参考关于“Python 中的分词”的教程。

现在让我们理解词干中的错误。

理解词干中的错误

词干错误主要分为两类:

  1. 过词干:当两个词来源于不同词干的同一个词根时,就会出现这个错误。过度堵塞也可以被视为误报。
  2. 词干不足:当两个单词来自同一个词根而不是不同的词干时,会出现此错误。词干不足也可以被认为是假阴性。

现在让我们看看词干的一些应用。

理解词干的应用

词干的一些应用如下:

  1. 我们可以在信息恢复系统中使用词干作为搜索引擎。
  2. 我们也可以使用词干来确定领域分析中的领域词汇。
  3. 一个有趣的事实是,谷歌搜索在 2003 年采用了词干。以前搜索“鱼”不会返回“鱼”或“捕鱼”。

理解词干算法

一些词干算法如下:

  1. 波特的斯特梅尔算法
  2. 爱之声
  3. 道森准下士同意
  4. krovetz stemmer 先生
  5. 施乐之声
  6. N-Gram Voices
  7. 雪球斯特梅尔
  8. 兰开斯特 投票

现在让我们简单讨论一下这些词干算法。

波特的斯特梅尔算法

波特的斯特梅尔算法是 1980 年提出的著名词干方法之一。这个概念是基于这样一个原则,即英语中的后缀是由更小更简单的后缀组合而成的。这种词干分析器因其速度快和简单而受欢迎。波特·斯特梅尔的主要应用包括数据挖掘和数据恢复。然而,这些应用仅限于英语单词。而且,词干组映射到同一个词干上,输出的词干不一定是有意义的词。这些算法相当长,被称为最古老的词干分析器。

假设 EED -> EE 的意思是“如果这个单词至少有一个元音和辅音加上 EED 结尾,把结尾改成 EE”,因为‘同意’变成了‘同意’。

优势:与其他词干分析器相比,它产生的输出最好,错误率更低。

限制:产生的形态修饰并不总是真实的单词。

爱之声

它是由 Lovins 在 1968 年提出的,从一个单词中删除最长的后缀,然后记录这个单词,以便将这个词干转换成有效的单词。

例如,坐着->坐着->坐着

优势:洛文斯斯特梅尔速度快,管理不规则复数。比如‘牙’和‘牙’等。

限制:这个过程很耗时,经常无法从词干中形成单词。

道森准下士同意

它是 Lovins 词干分析器的一个扩展,其中后缀按照长度和最后一个字母的反向顺序进行索引。

优势:道森斯特梅尔的处决速度快,覆盖面更足。

限制:实现非常复杂。

krovetz stemmer 先生

罗伯特·克罗威茨于 1993 年提出了克罗威茨·斯特梅尔。该词干算法遵循如下所示的一些步骤:

  1. 将单词的复数形式转换为单数形式。
  2. 把一个单词的过去时转换成现在时,去掉后缀“ing”。

例如,“儿童”->“儿童”

优势: Krovetz 斯特梅尔比较轻,我们可以把它作为其他词干器的前置词干器。

限制:这种词干算法在大文档的情况下效率很低。

施乐之声

施乐斯特梅尔能够管理大数据,并能生成有效的单词。然而,过度词干是很高的,因为它对词汇的依赖使它依赖于语言。因此,这种词干算法的主要限制是它是特定于语言的。

例如:

孩子->孩子

理解->理解

谁->谁

最佳->好

N-Gram Voices

N-Gram 是从一个单词中提取的n个连续字符的集合,其中相似的单词通常具有高比例的 N-Gram。

例如,n = 2 的“INTRODUCTIONS”变为:I、IN、NT、TR、RO、OD、DU、UC、CT、TI、IO、ON、NS、S

优势:该词干算法基于字符串比较,并且依赖于语言。

限制:创建和索引 n 克需要空间,时间效率不高。

雪球斯特梅尔

与波特·斯特梅尔不同,雪球斯特梅尔也能映射非英语单词。由于这个词干算法支持多种语言,我们可以称雪球斯特梅尔为多语言词干。雪球茎干器也是从 NLTK 包中导入的。这种算法基于一种被称为“雪球”的编程语言,该语言处理小字符串,是斯特梅尔使用最广泛的语言。这个词干算法比波特斯特梅尔更激进,也被认为是波特 2 斯特梅尔。由于与波特斯特梅尔相比有所改进,雪球茎干分析器的计算速度非常快。

兰开斯特 投票

与其他两种算法相比,兰开斯特词干分析器更具攻击性和动态性。该词干算法速度快;然而,它在处理小词时令人困惑。然而,没有像雪球茎干一样高效。兰卡斯特词干分析器从外部保存规则,并从根本上利用迭代算法。

现在,让我们看看使用 Python 编程语言中的 NLTK 包来实现词干。

Python 中词干的实现

让我们考虑下面的例子,用 Python 中的 NLTK 包演示词干的实现。

示例:


# importing the required modules
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize

# creating an object of the PorterStemmer class
pStemmer = PorterStemmer()

# selecting some words to be stemmed
list_of_words = ["consult", "consultant", "consulting", "consultantative", "consultants", "consulting"]

for words in list_of_words:
    print(words + ": " + pStemmer.stem(words))

输出:

consult: consult
consultant: consult
consulting: consult
consultantative: consult
consultants: consult
consulting: consult

说明:

在上面的代码片段中,我们已经导入了所需的模块。然后我们创建了一个 NLTK 包的 PorterStemmer 类的对象。然后,我们创建了一个需要词干的单词列表。最后,我们使用循环的来遍历列表中的单词,并使用词干()函数对它们进行词干处理。

我们可以观察到,在上面的例子中,我们没有使用 word_tokenize() 函数。让我们考虑另一个使用 word_tokenize() 函数演示词干的例子。

示例:


# importing the required modules
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize

# creating an object of the PorterStemmer class
pStemmer = PorterStemmer()

# given sentence
sentence = "People comes to consultants office to consult the consultant"
# tokenizing the sentence
list_of_words = word_tokenize(sentence)

for words in list_of_words:
    print(words, " : ", pStemmer.stem(words))

输出:

People  :  peopl
comes  :  come
to  :  to
consultants  :  consult
office  :  offic
to  :  to
consult  :  consult
the  :  the
consultant  :  consult

说明:

在上面的代码片段中,我们已经导入了所需的模块,并创建了一个 PorterStemmer 类的对象。然后,我们定义了一个必须进行词干处理的字符串。然后,我们使用了 word_tokenize() 函数来标记句子。最后,我们使用循环的来遍历单词列表,并使用词干()函数来词干。


原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/301662.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-30 16:09
下一篇 2024-12-30 16:09

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python编程二级证书考试相关现已可以上网购买

    计算机二级Python考试是一项重要的国家级认证考试,也是Python编程的入门考试。与其他考试一样,Python编程二级证书的考生需要进入正式考试,而为了备考,这篇文章将详细介绍…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29

发表回复

登录后才能评论