词干提取和词形还原 Python NLTK 示例

⚡ 智能摘要

词干提取和词形还原是文本规范化技术。 Python NLTK 将词形变化简化为共同词根,词干提取快速去除词缀而无需上下文,词形还原则使用含义返回真正的词典单词。

  • 🌱 抽干: PorterStemmer 会剔除后缀,以找到一个可能并非真正单词的词根。
  • 📚 合法化: WordNetLemmatizer 返回字典的基本形式,称为词元。
  • 区别: 词干提取速度更快,词形还原速度较慢但更准确且更能感知上下文。
  • 🔤 正常化: 两者都会降低词语密度,使机器将变体视为一个特征。
  • 🏷️ POS标签: 传递词性标签可以使词形还原器更加精确。
  • 🤖 人工智能的优势: 更清晰、规范化的文本能够产生更强大的机器学习特征和模型。

词干提取和词形还原 Python NLTK

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

词干和词形还原 in Python NLTK 是自然语言处理中的文本规范化技术。这些技术广泛应用于文本预处理。词干提取和词形还原的区别在于,词干提取速度更快,因为它无需了解上下文即可截断单词;而词形还原速度较慢,因为它在处理前需要了解单词的上下文。

什么是词干提取?

词干 是一种对词语进行规范化的方法 自然语言处理词干提取是一种将句子中的一组单词转换成序列以缩短查找时间的技术。在这种方法中,含义相同但根据上下文或句子有所不同的单词会被规范化。换句话说,一个词根可能只有一个,但它有很多变体。例如,词根是“eat”,它的变体有“eats”、“eating”、“eaten”等等。同样地,借助词干提取技术,我们可以对单词进行词形变化。 Python我们可以找到任何变体的词根。

例如:

He was riding.
He was taking the ride.

以上两句话意思相同,都是指过去的骑行活动。人很容易理解这两个意思相同。但对机器来说,这两句话是不同的。因此,很难将它们转换成同一条数据。如果我们不提供相同的数据集,机器就无法进行预测。所以,为了准备机器学习所需的数据集,必须区分每个词的含义。词干提取就是通过提取词根来对相同类型的数据进行分类。

让我们用以下方式来实现这一点: Python 程序。NLTK 有一个名为 波特·斯特默该算法接受分词后的单词列表,并将它们提取为词根。

理解词干分析的程序

from nltk.stem import PorterStemmer
e_words= ["wait", "waiting", "waited", "waits"]
ps =PorterStemmer()
for w in e_words:
    rootWord=ps.stem(w)
    print(rootWord)

输出:

wait
wait
wait
wait

Code 说明:

  • NLTK 中有一个词干提取模块,需要导入。如果导入整个模块,程序会变得非常庞大,因为它包含数千行代码。因此,我们只导入了“PorterStemmer”模块。
  • 我们准备了同一个单词的变体数据的虚拟列表。
  • 创建了一个属于 nltk.stem.porter.PorterStemmer 类的对象。
  • 我们使用“for”循环将列表逐个传递给PorterStemmer。最终,我们得到了列表中每个单词的词根。

综上所述,词干提取是一个重要的预处理步骤,因为它能去除冗余信息和同一词语的不同变体。这样一来,数据就得到了过滤,有助于更好地进行机器训练。现在,我们输入一个完整的句子并检查其输出结果。

from nltk.stem import PorterStemmer
from nltk.tokenize import sent_tokenize, word_tokenize
sentence="Hello Guru99, You have to build a very good site and I love visiting your site."
words = word_tokenize(sentence)
ps = PorterStemmer()
for w in words:
	rootWord=ps.stem(w)
	print(rootWord)

输出:

hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site

Code 说明:

  • PorterStemmer 包是从 stem 模块导入的。
  • 导入了用于句子和单词分词的软件包。
  • 写下一个句子,下一步将对其进行标记。
  • 这里创建了一个 PorterStemmer 的对象。
  • 运行一个循环,并使用第 5 行代码中创建的对象对每个单词进行词干提取。

简而言之,词干提取是一种数据预处理模块。英语中同一个词有很多变体,这会给机器学习的训练和预测带来歧义。为了构建一个成功的模型,至关重要的是使用词干提取将这些变体过滤到相同的序列数据中。这也被称为归一化。

什么是词形还原?

合法化 在 NLTK 中,词形还原是指根据词义和上下文查找词元的算法过程。词形还原通常指的是对单词进行形态分析,旨在去除词形变化。它有助于返回单词的基本形式或词典形式,即词元。NLTK 的词形还原方法基于 WordNet 的内置词形变化函数。文本预处理包括词干提取和词形还原。许多人觉得这两个术语容易混淆。有些人认为它们相同,但词干提取和词形还原之间存在区别。由于以下原因,词形还原优于词干提取。

为什么词形还原比词干提取更好?

词干提取算法通过从单词中删除词缀来工作。更广义地说,它删除的是单词的开头或结尾。相比之下,词形还原是一种更强大的操作,它会考虑单词的形态分析。它返回词元,即所有屈折变化形式的原始形式。创建词典和查找单词的正确形式需要深入的语言学知识。词干提取是一种通用操作,而词形还原是一种智能操作,它会在词典中查找单词的正确形式。因此,词形还原有助于形成更好的词典。 机器学习 功能。

Code 区分词形还原和词干提取

词干 Code:

import nltk
from nltk.stem.porter import PorterStemmer
porter_stemmer  = PorterStemmer()
text = "studies studying cries cry"
tokenization = nltk.word_tokenize(text)
for w in tokenization:
print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))

输出:

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

合法化 Code:

import nltk
	from nltk.stem import 	WordNetLemmatizer
	wordnet_lemmatizer = WordNetLemmatizer()
	text = "studies studying cries cry"
	tokenization = nltk.word_tokenize(text)
	 for w in tokenization:
		print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))

输出:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

产出讨论

如果比较 studies 和 studying 的词干提取结果,输出结果相同(studi),但 NLTK 词形还原器对这两个词分别生成不同的词元:study 对应 studies,study 对应 studying。因此,当我们需要构建特征集来训练机器时,词形还原是更理想的选择。

Lemmatizer 用例

词形还原器可以最大限度地减少文本歧义。像 bicycle 或 bicycles 这样的词会被转换成基本词 bicycle。它会将所有含义相同但形式不同的词都转换成其基本形式,从而降低词密度并有助于理解文本。ping 准备用于训练机器的精确特征。数据越干净,机器学习模型就越准确。NLTK 词形还原器还能节省内存和计算成本。

实时示例展示了 WordNet 词形还原和词性标注在以下方面的应用 Python:

from nltk.corpus import wordnet as wn
	from nltk.stem.wordnet import WordNetLemmatizer
	from nltk import word_tokenize, pos_tag
	from collections import defaultdict
	tag_map = defaultdict(lambda : wn.NOUN)
	tag_map['J'] = wn.ADJ
	tag_map['V'] = wn.VERB
	tag_map['R'] = wn.ADV
	text = "guru99 is a totally new kind of learning experience."
	tokens = word_tokenize(text)
	lemma_function = WordNetLemmatizer()
	for token, tag in pos_tag(tokens):
		lemma = lemma_function.lemmatize(token, tag_map[tag[0]])
		print(token, "=>", lemma)

输出:

guru99 => guru99
is => be
totally => totally
new => new
kind => kind
of => of
learning => learn
experience => experience
. => .

Code 说明:

  • 导入了语料库读取器 wordnet,并从 wordnet 导入了 WordNetLemmatizer。
  • 词元化和词性标注是从 nltk 导入的,默认词典是从 collections 导入的。
  • 创建一个字典,其中 pos_tag 的首字母作为键,映射到 wordnet 字典中的值。
  • 文本已编写并分词,并创建了对象 lemma_function 以供循环内使用。
  • 循环运行,词形还原函数接受两个参数:词元和一个映射。ping pos_tag 与 wordnet 值。

Python 词形还原与以下方面密切相关: WordNet词典因此,接下来必须研究这个课题。

常见问题

Porter 词干提取器是 NLTK 的 PorterStemmer 类。它会去除词尾后缀。ping 根据 Martin Porter 1980 年的算法规则,可以将英语单词简化为词干,因此“waiting”、“waited”和“waits”都变成了“wait”。

当速度和简洁性比可读性更重要时,例如搜索索引、大规模情感分析或特征缩减,请使用词干提取。当输出必须是有效且人类可读的单词时,请选择词形还原。

文本规范化将单词的不同形式转换为一种通用表示形式。词干提取和词形还原是两种规范化技术,它们降低词密度,使模型能够将“study”和“studies”等变体视为单个特征。

NLTK 提供 PorterStemmer(以及其他词干提取器,例如 Snowball)用于词干提取,并提供 WordNetLemmatizer 用于词形还原。词形还原器依赖于 WordNet 词典来返回每个单词的正确词根形式。

它们去除冗余的词语变体,使机器学习模型能够获得更清晰、维度更低的特征。重复词元越少,训练过程中的歧义就越小,对未见过的文本的预测也就越准确。

现代人工智能模型可以自动推断上下文,但 NLTK 的 WordNetLemmatizer 需要词性标签来消除歧义。提供该标签可以让它选择正确的词元,例如,当“learning”被标记为动词时,将其转换为“learn”。

一个词可以是名词也可以是动词,词根可能不同。如果没有词性标注,WordNetLemmatizer 会默认它是名词。如果传入正确的词性标注,例如动词或形容词,则会给出正确的词根形式。

不。词干提取只会去除后缀,所以“studies”会变成“studi”,“cries”会变成“cri”,这些都不是有效的单词。相比之下,词形还原总是会返回一个像“study”这样的真实字典单词。

总结一下这篇文章: