AI智能 分词、词干提取和词形还原的概念
在本节中,我们将理解什么是分词、词干提取和词形还原。
分词(Tokenization)
它可以被定义为将给定文本(即字符序列)分解成称为词元(tokens)的较小单元的过程。词元可以是单词、数字或标点符号。它也被称为单词分割(word segmentation)。以下是分词的简单示例:
输入 – Mango, banana, pineapple and apple all are fruits.(芒果、香蕉、菠萝和苹果都是水果。)
输出 –
分词过程可以通过定位单词边界来完成。一个单词的结尾和新单词的开始称为单词边界。单词的书写系统和排版结构会影响这些边界。
在 Python NLTK 模块中,我们有与分词相关的不同包,我们可以使用它们根据需求将文本分成词元。其中一些包如下:
sent_tokenize 包
顾名思义,这个包将把输入文本分成句子。我们可以使用以下 Python 代码导入这个包:
from nltk.tokenize import sent_tokenize
word_tokenize 包
这个包将输入文本分成单词。我们可以使用以下 Python 代码导入这个包:
from nltk.tokenize import word_tokenize
WordPunctTokenizer 包
这个包将输入文本分成单词以及标点符号。我们可以使用以下 Python 代码导入这个包:
from nltk.tokenize import WordPuncttokenizer
词干提取(Stemming)
在处理单词时,由于语法原因,我们会遇到很多变体。这里的变体概念意味着我们必须处理同一单词的不同形式,如 democracy(民主)、democratic(民主的)、democratization(民主化)。对于机器学习项目来说,机器理解这些不同单词具有相同的基本形式是非常重要的。这样,在分析文本时提取单词的基本形式将会非常有用。
我们可以通过词干提取来实现这一点。通过这种方式,我们可以说词干提取是一种启发式过程,通过切掉单词的末尾来提取单词的基本形式。
在 Python NLTK 模块中,我们有与词干提取相关的不同包。这些包可以用来获取单词的基本形式。这些包使用算法。其中一些包如下:
PorterStemmer 包
这个 Python 包使用 Porter 算法来提取基本形式。我们可以使用以下 Python 代码导入这个包:
from nltk.stem.porter import PorterStemmer
例如,如果我们向这个词干提取器输入单词 'writing'(写),经过词干提取后我们将得到单词 'write'。
LancasterStemmer 包
这个 Python 包将使用 Lancaster 算法来提取基本形式。我们可以使用以下 Python 代码导入这个包:
from nltk.stem.lancaster import LancasterStemmer
例如,如果我们向这个词干提取器输入单词 'writing'(写),经过词干提取后我们将得到单词 'writ'。
SnowballStemmer 包
这个 Python 包将使用 Snowball 算法来提取基本形式。我们可以使用以下 Python 代码导入这个包:
from nltk.stem.snowball import SnowballStemmer
例如,如果我们向这个词干提取器输入单词 'writing'(写),经过词干提取后我们将得到单词 'write'。
所有这些算法都有不同的严格程度。如果我们比较这三个词干提取器,Porter 词干提取器是最不严格的,Lancaster 是最严格的。Snowball 词干提取器在速度和严格程度方面都是不错的选择。
词形还原(Lemmatization)
我们也可以通过词形还原来提取单词的基本形式。它基本上是通过使用词汇表和形态分析来完成这项任务的,通常旨在只去除屈折词尾。任何单词的这种基本形式称为词元(lemma)。
词干提取和词形还原的主要区别在于词汇表和形态分析的使用。另一个区别是,词干提取通常会将派生相关的单词合并,而词形还原通常只合并一个词元的不同屈折形式。例如,如果我们提供单词 saw 作为输入单词,词干提取可能会返回单词 's',但词形还原会根据该词元是用作动词还是名词,尝试返回单词 see 或 saw。
在 Python NLTK 模块中,我们有以下与词形还原过程相关的包,我们可以使用它来获取单词的基本形式:
WordNetLemmatizer 包
这个 Python 包将根据单词是用作名词还是动词来提取单词的基本形式。我们可以使用以下 Python 代码导入这个包:
from nltk.stem import WordNetLemmatizer