Natural Language Toolkit 简明教程
Stemming & Lemmatization
What is Stemming?
词干化是一种用于通过去除词缀来提取词根的技术。这就像把树枝砍到树干一样。例如,单词 eating, eats, eaten 的词干是 eat 。
搜索引擎使用词干化来对单词进行索引。这就是为什么搜索引擎不必存储某个单词的所有形式,而只需存储词干的原因。这样一来,词干化就减小了索引的大小并提高了检索精度。
Porter stemming algorithm
它是使用最广泛的词干化算法之一,它基本上是设计来去除和替换英语单词的众所周知的词缀的。
PorterStemmer class
NLTK 提供 PorterStemmer 类,借助它,我们可以轻松地为我们想要进行词干化的单词实现波特词干化器算法。此类知道若干规则词形和词缀,借助这些词形和词缀,它可以将输入词转换为最终词干。所得词干通常是具有相同词根意义的较短单词。让我们看一个示例 −
首先,我们需要导入自然语言工具包 (nltk)。
import nltk
现在,导入 PorterStemmer 类来实现波特词干化器算法。
from nltk.stem import PorterStemmer
然后,按以下步骤创建波特词干化器类的实例 −
word_stemmer = PorterStemmer()
现在,输入你想要进行词干化的单词。
word_stemmer.stem('writing')
Lancaster stemming algorithm
它是在兰卡斯特大学开发的,是另一种非常常用的词干化算法。
LancasterStemmer class
NLTK 提供 LancasterStemmer 类,借助它,我们可以轻松地为我们想要进行词干化的单词实现兰开斯特词干化器算法。让我们看一个示例 −
首先,我们需要导入自然语言工具包 (nltk)。
import nltk
现在,导入 LancasterStemmer 类来实现兰开斯特词干化器算法
from nltk.stem import LancasterStemmer
然后,按以下步骤创建 LancasterStemmer 类的实例 −
Lanc_stemmer = LancasterStemmer()
现在,输入你想要进行词干化的单词。
Lanc_stemmer.stem('eats')
Regular Expression stemming algorithm
借助这种词干化算法,我们可以构建我们自己的词干化器。
RegexpStemmer class
NLTK 提供 RegexpStemmer 类,借助它,我们可以轻松地实现正则表达式词干化器算法。它基本使用单个正则表达式,并删除与该表达式匹配的任何前缀或后缀。让我们看一个示例 −
首先,我们需要导入自然语言工具包 (nltk)。
import nltk
现在,导入 RegexpStemmer 类来实现正则表达式词干化器算法。
from nltk.stem import RegexpStemmer
然后,创建一个 RegexpStemmer 类的实例,并按以下方式提供要从单词中删除的后缀或前缀 −
Reg_stemmer = RegexpStemmer(‘ing’)
现在,输入你想要进行词干化的单词。
Reg_stemmer.stem('eating')
Snowball stemming algorithm
这是另一种非常有用的词干化算法。
SnowballStemmer class
NLTK 提供 SnowballStemmer 类,借助它,我们可以轻松地实现 Snowball 词干化器算法。它支持 15 种非英语语言。为了使用这个词干化类,我们需要创建一个使用我们使用的语言名称的实例,然后调用 stem() 方法。让我们看一个示例 −
首先,我们需要导入自然语言工具包 (nltk)。
import nltk
现在,导入 SnowballStemmer 类以实现 Snowball Stemmer 算法
from nltk.stem import SnowballStemmer
让我们看看它支持哪些语言 −
SnowballStemmer.languages
Output
(
'arabic',
'danish',
'dutch',
'english',
'finnish',
'french',
'german',
'hungarian',
'italian',
'norwegian',
'porter',
'portuguese',
'romanian',
'russian',
'spanish',
'swedish'
)
接下来,使用您想要使用的语言创建 SnowballStemmer 类的实例。在这里,我们正在为“法语”语言创建一个词干提取器。
French_stemmer = SnowballStemmer(‘french’)
现在,调用 stem() 方法并输入您想要进行词干提取的单词。
French_stemmer.stem (‘Bonjoura’)
What is Lemmatization?
词形还原技术就像词干提取一样。词形还原后我们得到的输出被称为“词干”,它是一个词根,而不是词干提取的输出,即词干。在词形还原之后,我们将会得到一个具有相同含义的有效单词。
NLTK 提供了 WordNetLemmatizer 类,它是 wordnet 语料库的简单封装。此类使用 morphy() 函数向 WordNet CorpusReader 类提供词干,以查找词条。让我们通过一个示例来理解它 −
Example
首先,我们需要导入自然语言工具包 (nltk)。
import nltk
现在,导入 WordNetLemmatizer 类来实现词形还原技术。
from nltk.stem import WordNetLemmatizer
接下来,创建 WordNetLemmatizer 类的实例。
lemmatizer = WordNetLemmatizer()
现在,调用 lemmatize() 方法并输入您想要查找词条的单词。
lemmatizer.lemmatize('eating')
Difference between Stemming & Lemmatization
让我们通过以下示例来理解词干提取和词形还原的区别 −
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('believes')