词形还原(Lemmatization)
词性还原,又称为Lemmatizetion
主要是把单词的词缀部分除去,从而得到单词的词干部分
词形还原(Lemmatization)与词干提取(stemming)的区别
词形还原是把单词还原成本身的形式:比如将‘cars’还原成car,把‘ate’还原成‘eat’,把‘handling’还原成‘handle’
词干提取则是提取单词的词干,比如将‘cars’提取出‘car’,将‘handling’提取出来‘handl’(单纯的去掉ing),对于‘ate’使用词干提取则不会有任何的效果。
使用NLTK库实现词形还原
实现词形还原的最简单的方法是利用NLTK库中提供的类,使用的方法如下:
#从nltk库中导入需要的类,并且进行实例化
from nltk.stem import WordNetLemmatizer
wnl = WordNetLemmatizer()
通过调用实例化对象wnl的lemmatize方法,传入需要进行词性还原的单词以及对应的词性,返回词性还原后的结果
#分别定义需要进行还原的单词与相对应的词性
words = ['cars','men','running','ate','saddest','fancier']
pos_tags = ['n','n','v','v','a','a']
for i in range(len(words)):
print(words[i]+'--'+pos_tags[i]+'-->'+wnl.lemmatize(words[i],pos_tags[i]))
cars--n-->car
men--n-->men
running--v-->run
ate--v-->eat
saddest--a-->sad
fancier--a-->fancy
注意,在使用词性进行还原的时候,一定要指明单词的词性!不然还原效果不好
使用NLTK库获取单词的词性,结合词形还原 来直接还原单词
"""
__author__:shuangrui Guo
__description__:
"""
from nltk import pos_tag
from nltk.stem import WordNetLemmatizer
from nltk.corpus import wordnet
wnl = WordNetLemmatizer()
# 获取单词的词性
def get_wordnet_pos(tag):
if tag.startswith('J'):
return wordnet.ADJ
elif tag.startswith('V'):
return wordnet.VERB
elif tag.startswith('N'):
return wordnet.NOUN
elif tag.startswith('R'):
return wordnet.ADV
else:
return None
#分别定义需要进行还原的单词与相对应的词性
words = ['cars','men','running','ate','saddest','fancier']
for i in range(len(words)):
print(words[i]+'--'+get_wordnet_pos(pos_tag([words[i]])[0][1])+'-->'+wnl.lemmatize(words[i],get_wordnet_pos(pos_tag([words[i]])[0][1])))