Skip to content

Latest commit

 

History

History
158 lines (117 loc) · 6.94 KB

natural-language-processing-ea960ba12d42.md

File metadata and controls

158 lines (117 loc) · 6.94 KB

用 Python 实现自然语言处理中的词干化和词汇化

原文:https://pub.towardsai.net/natural-language-processing-ea960ba12d42?source=collection_archive---------2-----------------------

自然语言处理中分析文本的技术

米卡·博斯韦尔Unsplash 上拍摄的照片

在本文中,我们将研究自然语言处理技术中的词干化和词汇化。这两个主题对于文本数据的预处理和细化分析都非常重要。

  • **词干化:**是将带后缀的词还原为其词根的过程。这是自然语言处理中一个重要的流水线过程。像‘快乐’、‘最快乐’、‘更快乐’这样的词属于词根,即‘快乐’。
  • **词汇化:**这也是一个将单词还原到其本义的过程,但具有附加功能,如添加词性(POS)。

这两种技术都用在文本挖掘过程中,以便从文本中提取最佳信息。

词干提取过程简单快捷,主要依赖于基于模式的方法。而在词汇化中,它被用来从文本中获取更详细的信息。

用于 NLP 任务的 python 用户友好库是 Spacy、NLTK、TextBlob。

这个空间不包括词干提取过程,所以我们为这个过程选择了其他库。对于这两种方法,我们将尝试使用其他库。

stemming 提供了两个主要的库,第一个是 porter stemmer,第二个是 snowball stemmer。雪球词干分析器是波特词干分析器的一个更好的版本,可以获得更精确的词干词根。

让我们看看使用 NLTK 库进行词干提取和词汇化的 python 示例。

词干

在这种方法中,我们将讨论波特词干。首先,我们需要导入 NLTk 库,下载“punkt ”,即句子分词器。然后导入 porter 词干分析器来处理句子的词干。词干化是在保持词义不变的情况下改变词的变化的过程。

import nltk
nltk.download('punkt')
from nltk.stem.porter import PorterStemmer
porter_stemmer = PorterStemmer()

现在,我们将以句子为例进行词干分析。

text = "Fruits are one of the essential crops among all, which have all nutrients"# Grab the tokens from the sentence
tokens = nltk.word_tokenize(text)#To do stemming on these tokens
for w in tokens:
    print ("Actual: %s ---- Stem: %s"  % (w,porter_stemmer.stem(w)))

这部分代码将对 tokens 变量中的所有标记进行词干分析。

**#output:**
Actual: Fruits ---- Stem: fruit
Actual: are ---- Stem: are
Actual: one ---- Stem: one
Actual: of ---- Stem: of
Actual: the ---- Stem: the
Actual: essential ---- Stem: essenti
Actual: crops ---- Stem: crop
Actual: among ---- Stem: among
Actual: all ---- Stem: all
Actual: , ---- Stem: ,
Actual: which ---- Stem: which
Actual: have ---- Stem: have
Actual: all ---- Stem: all
Actual: nutrients ---- Stem: nutrient

波特词干分析器的另一个例子如下所示:

from nltk.stem import PorterStemmer
words= ["rest", "resting", "rests", "restful"]
ps =PorterStemmer()
for w in words:
    rootWord=ps.stem(w)
    print(rootWord)**#output:**
rest
rest
rest
rest

词汇化

对于同一个文本示例,我们将进行引理化,并注意两种方法的区别。

nltk.download('wordnet')
from nltk.stem import WordNetLemmatizer
lemma = WordNetLemmatizer()text = "Fruits are one of the essential crops among all, which have all nutrients"tokens = nltk.word_tokenize(text)
for w in tokens:
    print ("Actual: %s  Lemma: %s"  % (w,lemma.lemmatize(w)))

术语化的输出如下所示:

**#output:**
Actual: Fruits --- Lemma: **Fruits**
Actual: are --- Lemma: are
Actual: one --- Lemma: one
Actual: of --- Lemma: of
Actual: the --- Lemma: the
Actual: essential --- Lemma: **essential**
Actual: crops --- Lemma: crop
Actual: among --- Lemma: among
Actual: all --- Lemma: all
Actual: , --- Lemma: ,
Actual: which --- Lemma: which
Actual: have --- Lemma: have
Actual: all --- Lemma: all
Actual: nutrients --- Lemma: nutrient

如果我们比较这两个的结果,那么我们会清楚地看到,引理化给出了上面输出中加粗的两个不同的引理。

在业务领域中,词汇化更受欢迎,因为它比词干化更可靠、更先进。

from nltk.stem import WordNetLemmatizer

lem = WordNetLemmatizer()

print("days :", lem.lemmatize("days"))
print("bottles :", lem.lemmatize("bottles"))

# The pos parameter have 'a' means adjective
print("happier :", lem.lemmatize("happier", pos ="a"))**#output:**
days : day
bottles : bottle
happier : happy

[## NLP——使用 Python 从零到英雄

学习自然语言处理基本概念的手册

pub.towardsai.net](/nlp-zero-to-hero-with-python-2df6fcebff6e)

结论

本文给出了自然语言处理中这两种方法的基本思想。NLTK 库是一个用文本数据进行分析的极好的库。

我希望你喜欢这篇文章。通过我的 LinkedIntwitter 联系我。

推荐文章

  1. Python:零到英雄配实例 2。 Python 数据结构数据类型和对象3 .Python 中的异常处理概念 4。在熊猫 5 中读取 CSV()、Excel()、JSON()和 HTML()文件格式。神经网络:递归神经网络的兴起 6。用 Python 7 全面讲解了线性回归。用 Python 充分解释了 Logistic 回归 8。concat()、merge()和 join()与 Python 的区别 9。套索(l1)和脊(l2)正则化技术 10。机器学习中的混淆矩阵