词形还原(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])))

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐