📅  最后修改于: 2020-10-14 09:12:49             🧑  作者: Mango
词干法是一种通过删除词缀来提取词的基本形式的技术。就像砍掉树枝到其茎上一样。例如,吃,吃,吃就是吃这句话。
搜索引擎使用词干为单词建立索引。这就是为什么搜索引擎只能存储词干而不是存储所有形式的单词。这样,词干可以减小索引的大小并提高检索精度。
在NLTK中,具有stem()方法的stemmerI ,接口具有我们接下来要介绍的所有词干。让我们用下图来了解它
它是最常见的词干提取算法之一,其基本目的是删除和替换众所周知的英语单词后缀。
NLTK具有PorterStemmer类,借助该类,我们可以轻松地为想要词干的单词实现Porter Stemmer算法。此类知道几种常规的单词形式和后缀,借助它们可以将输入单词转换为最终词干。结果词干通常是具有相同词根含义的较短单词。让我们看一个例子-
首先,我们需要导入自然语言工具包(nltk)。
import nltk
现在,导入PorterStemmer类以实现Porter Stemmer算法。
from nltk.stem import PorterStemmer
接下来,如下创建Porter Stemmer类的实例-
word_stemmer = PorterStemmer()
现在,输入您要阻止的单词。
word_stemmer.stem('writing')
'write'
word_stemmer.stem('eating')
'eat'
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('writing')
'write'
它是由兰开斯特大学(Lancaster University)开发的,是另一种非常常见的词干算法。
NLTK具有LancasterStemmer类,借助该类,我们可以轻松地为想要词干的单词实现Lancaster Stemmer算法。让我们看一个例子-
首先,我们需要导入自然语言工具包(nltk)。
import nltk
现在,导入LancasterStemmer类以实现Lancaster Stemmer算法
from nltk.stem import LancasterStemmer
接下来,如下创建LancasterStemmer类的实例-
Lanc_stemmer = LancasterStemmer()
现在,输入您要阻止的单词。
Lanc_stemmer.stem('eats')
'eat'
import nltk
from nltk.stem import LancatserStemmer
Lanc_stemmer = LancasterStemmer()
Lanc_stemmer.stem('eats')
'eat'
借助这种词干算法,我们可以构建自己的词干搜索器。
NLTK具有RegexpStemmer类,借助它可以轻松实现正则表达式词干算法。它基本上采用单个正则表达式,并删除与该表达式匹配的任何前缀或后缀。让我们看一个例子-
首先,我们需要导入自然语言工具包(nltk)。
import nltk
现在,导入RegexpStemmer类以实现正则表达式Stemmer算法。
from nltk.stem import RegexpStemmer
接下来,创建RegexpStemmer类的实例,并提供您要从单词中删除的后缀或前缀,如下所示:
Reg_stemmer = RegexpStemmer(‘ing’)
现在,输入您要阻止的单词。
Reg_stemmer.stem('eating')
'eat'
Reg_stemmer.stem('ingeat')
'eat'
Reg_stemmer.stem('eats')
'eat'
import nltk
from nltk.stem import RegexpStemmer
Reg_stemmer = RegexpStemmer()
Reg_stemmer.stem('ingeat')
'eat'
这是另一个非常有用的词干算法。
NLTK拥有SnowballStemmer类,借助该类,我们可以轻松实现Snowball Stemmer算法。它支持15种非英语语言。为了使用此流化类,我们需要使用我们使用的语言名称创建一个实例,然后调用stem()方法。让我们看一个例子-
首先,我们需要导入自然语言工具包(nltk)。
import nltk
现在,导入SnowballStemmer类以实现Snowball Stemmer算法
from nltk.stem import SnowballStemmer
让我们看看它支持的语言-
SnowballStemmer.languages
(
'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’)
'bonjour'
import nltk
from nltk.stem import SnowballStemmer
French_stemmer = SnowballStemmer(‘french’)
French_stemmer.stem (‘Bonjoura’)
'bonjour'
拔胶技术就像茎秆一样。词条定理后得到的输出称为“词条”,它是词根而不是词根,即词干的输出。进行定形后,我们将得到一个表示相同意思的有效单词。
NLTK提供了WordNetLemmatizer类,它是围绕wordnet语料库的薄包装。此类对WordNet CorpusReader类使用morphy()函数来查找引理。让我们通过一个例子来理解它-
首先,我们需要导入自然语言工具包(nltk)。
import nltk
现在,导入WordNetLemmatizer类以实现lemmatization技术。
from nltk.stem import WordNetLemmatizer
接下来,创建WordNetLemmatizer类的实例。
lemmatizer = WordNetLemmatizer()
现在,调用lemmatize()方法并输入要查找引理的单词。
lemmatizer.lemmatize('eating')
'eating'
lemmatizer.lemmatize('books')
'book'
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('books')
'book'
通过以下示例,让我们了解词干和词法化之间的区别-
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('believes')
believ
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize(' believes ')
believ
这两个程序的输出说明了词干和词根化之间的主要区别。 PorterStemmer类从单词中剔除“ es”。另一方面, WordNetLemmatizer类可找到有效单词。用简单的词来说,词干法只看单词的形式,而词干化技术则看词的含义。这意味着在应用完词后,我们将始终得到一个有效的单词。