nltk词性标注与词形还原中的词性类型匹配

1 篇文章 0 订阅
1 篇文章 0 订阅

一、两函数词性不匹配问题:

nltk中词性标注函数nltk.pos_tag([])得到的结果:NN,NNP,VB

nltk中词形还原函数nltk.stem.WordNetLemmatizer().lemmatize('word')要求的参数是:a,n,v

二、一种解决方案

两种词性类型的对照表如下:

——————————————————————————————————————

a(形容词)——JJ,JJR,JJS(形容词,比较级,最高级)

r(副词)——RB,RBR,RBS(副词,比较级,最高级)

v(动词)——VB,VBD,VBG,VBN,VBP,VBZ(动词,过去式,动名词,过去分词,非三单,三单)

n(名词)——NN,NNS,NNP,NNPS(NN表示常用名词,NNP表示专有名词,S表示单复数)

——————左边是词形还原要用到的类型,右边是词性标注得到的类型——————

代码实现上可以检查词性标注结果前面的部分:可以从上面观察到形容词都是JJ开头的,同时不存在其他J开头的词性,因此可以检查是否是J开头来判断词性。注意:R开头的还有一个RP(Particle 小品词)。

a——JJ(或者J)

r——RB

v——VB(或者V)

n——NN(或者N)

——————————————————————————————————————

三、代码

import nltk
aft_tk=['word','better','had'] #分词后的列表
nltk_pos_tagged = nltk.pos_tag(aft_tk)
wnl = nltk.stem.WordNetLemmatizer()
aft_lem = [] #词形还原后的列表
for pstg in nltk_pos_tagged:
    word,tag = pstg
    if tag.startswith('NN'):
        aft_lem.append(wnl.lemmatize(word,'n'))
    elif tag.startswith('JJ'):
        aft_lem.append(wnl.lemmatize(word,'a'))
    elif tag.startswith('VB'):
        aft_lem.append(wnl.lemmatize(word,'v'))
    elif tag.startswith('RB'):
        aft_lem.append(wnl.lemmatize(word,'r'))
    else :
        aft_lem.append(word)
print(aft_lem)

out:

['work','well','have']

四、附录

词性标注得到词性类型表:(27条消息) NLTK的词性_一只鸟的天空的博客-CSDN博客_nltk 词性icon-default.png?t=M85Bhttps://blog.csdn.net/heyongluoyao8/article/details/43731743

词形还原需要词性类型表:利用如下指令查看:

help(nltk.stem.WordNetLemmatizer())

得到结果如下:

The Part Of Speech tag. Valid options are `"n"` for nouns,
 |          `"v"` for verbs, `"a"` for adjectives, `"r"` for adverbs and `"s"`
 |          for satellite adjectives.

Δ:这个satellite adjectives也不知道是什么东西

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值