词干提取和词形还原 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词典因此,接下来必须研究这个课题。
