词形还原(Lemmatization)是文本预处理中的重要部分,与词干提取(stemming)很相似。

简单说来,词形还原就是去掉单词的词缀,提取单词的主干部分,通常提取后的单词会是字典中的单词,不同于词干提取(stemming),提取后的单词不一定会出现在单词中。比如,单词“cars”词形还原后的单词为“car”,单词“ate”词形还原后的单词为“eat”。

在Python的nltk模块中,使用WordNet为我们提供了稳健的词形还原的函数。如以下示例Python代码:

from nltk.stem import WordNetLemmatizerwnl = WordNetLemmatizer()#  lemmatize nouns
print(wnl.lemmatize('cars', 'n'))
print(wnl.lemmatize('men', 'n'))#  lemmatize verbs
print(wnl.lemmatize('running', 'v'))
print(wnl.lemmatize('ate', 'v'))#  lemmatize adjectives
print(wnl.lemmatize('saddest', 'a'))
print(wnl.lemmatize('fancier', 'a'))

运行结果:

car
men
run
eat
sad
fancy

在以上代码中,wnl.lemmatize()函数可以进行词形还原,第一个参数为单词,第二个参数为该单词的词性,如名词,动词,形容词等,返回的结果为输入单词的词形还原后的结果。

词形还原一般是简单的,但具体我们在使用时,指定单词的词性很重要,不然词形还原可能效果不好,如以下代码:

from nltk.stem import WordNetLemmatizerwnl = WordNetLemmatizer()
print(wnl.lemmatize('ate', 'n'))
print(wnl.lemmatize('fancier', 'v'))

输出结果如下:

那么,如何获取单词的词性呢?在NLP中,使用Parts of speech(POS)技术实现。在nltk中,可以使用nltk.pos_tag()获取单词在句子中的词性,如以下Python代码:

from nltk import word_tokenize
from nltk import pos_tagsentence = 'The brown fox is quick and he is jumping over the lazy dog'tokens = word_tokenize(sentence)
tagged_sent = pos_tag(tokens)print(tokens)
print(tagged_sent)

输出结果如下:

['The', 'brown', 'fox', 'is', 'quick', 'and', 'he', 'is', 'jumping', 'over', 'the', 'lazy', 'dog']
[('The', 'DT'), ('brown', 'JJ'), ('fox', 'NN'), ('is', 'VBZ'), ('quick', 'JJ'), ('and', 'CC'), ('he', 'PRP'), ('is', 'VBZ'), ('jumping', 'VBG'), ('over', 'IN'), ('the', 'DT'), ('lazy', 'JJ'), ('dog', 'NN')]

OK,知道了获取单词在句子中的词性,再结合词形还原,就能很好地完成词形还原功能。示例的Python代码如下:

from nltk import word_tokenize, pos_tag
from nltk.corpus import wordnet
from nltk.stem import WordNetLemmatizer#  获取单词的词性
def get_wordnet_pos(tag):if tag.startswith('J'):return wordnet.ADJelif tag.startswith('V'):return wordnet.VERBelif tag.startswith('N'):return wordnet.NOUNelif tag.startswith('R'):return wordnet.ADVelse:return Nonesentence = 'football is a family of team sports that involve, to varying degrees, kicking a ball to score a goal.'
print(sentence)
tokens = word_tokenize(sentence)  # 分词
tagged_sent = pos_tag(tokens)  # 获取单词的词性
print(tagged_sent)wnl = WordNetLemmatizer()
lemmas_sent = []for tag in tagged_sent:wordnet_pos = get_wordnet_pos(tag[1]) or wordnet.NOUNlemmas_sent.append(wnl.lemmatize(tag[0], pos=wordnet_pos))  # 词性还原print(lemmas_sent)

输出结果如下:

football is a family of team sports that involve, to varying degrees, kicking a ball to score a goal.
[('football', 'NN'), ('is', 'VBZ'), ('a', 'DT'), ('family', 'NN'), ('of', 'IN'), ('team', 'NN'), ('sports', 'NNS'), ('that', 'WDT'), ('involve', 'VBP'), (',', ','), ('to', 'TO'), ('varying', 'VBG'), ('degrees', 'NNS'), (',', ','), ('kicking', 'VBG'), ('a', 'DT'), ('ball', 'NN'), ('to', 'TO'), ('score', 'VB'), ('a', 'DT'), ('goal', 'NN'), ('.', '.')]
['football', 'be', 'a', 'family', 'of', 'team', 'sport', 'that', 'involve', ',', 'to', 'vary', 'degree', ',', 'kick', 'a', 'ball', 'to', 'score', 'a', 'goal', '.']

输出的结果就是对句子中的单词进行词形还原后的结果。

自然语言处理(NLP)之英文单词词性还原相关推荐

  1. 自然语言处理(NLP)之用深度学习实现命名实体识别(NER)

    几乎所有的NLP都依赖一个强大的语料库,本项目实现NER的语料库如下(文件名为train.txt,一共42000行,这里只展示前15行,可以在文章最后的Github地址下载该语料库): played ...

  2. [深度学习] 自然语言处理 --- NLP入门指南

    NLP的全称是Natuarl Language Processing,中文意思是自然语言处理,是人工智能领域的一个重要方向 自然语言处理(NLP)的一个最伟大的方面是跨越多个领域的计算研究,从人工智能 ...

  3. java自然语言处理包_Java自然语言处理NLP工具包

    自然语言处理 1. Java自然语言处理 LingPipe LingPipe是一个自然语言处理的Java开源工具包.LingPipe目前已有很丰富的功能,包括主题分类(Top Classificati ...

  4. 自然语言处理(NLP)入门

    本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库.NLTK是Python的自然语言处理工具包,在NLP领域中,最常使用的一个Python库. 什么是NLP? 简单来说,自然 ...

  5. StanfordCoreNLP: 英文句子词性还原、词干标注工具包简单使用(Java)

    一.说明 StanfordCoreNLP是Stanford开发的关于自然语言处理的工具包,其包括分词.词性还原以及词性标注等很多功能.具体可参考官网:https://stanfordnlp.githu ...

  6. java 分词获取词性,英文分词的关键:词性还原和词干提取

    人工智能时代,能让计算机自动化进行文字语义理解非常重要,因此,进行语义理解的第一步--如何正确地根据语义完成词语切分(即分词)就是一个非常具有挑战性的任务,一旦切词发生失误,会导致后续的文本处理产生连 ...

  7. 中文自然语言处理(NLP)(三)运用python jieba模块计算知识点当中关键词的词频

    前两次链接:中文自然语言处理(NLP)(一)python jieba模块的初步使用       中文自然语言处理(NLP)(二)python jieba模块的进一步学习和xlrd模块 续上次的随笔之后 ...

  8. 自然语言处理NLP中文分词,词性标注,关键词提取和文本摘要

    NLP相关工具包的介绍 1.1 jieba "结巴"中文分词,理念是做最好的 Python 中文分词组件. 支持三种分词模式: (1)精确模式,试图将句子最精确地切开,适合文本分析 ...

  9. 自然语言处理NLP(11)——篇章分析与指代消解

    在上一部分中,我们介绍了语义分析的基本内容(自然语言处理NLP(10)--语义分析),重点介绍了格文法和语义角色标注(SRL). 在这一部分中,我们将介绍篇章分析相关内容. 在介绍具体内容之前,我们首 ...

最新文章

  1. 【Linux环境部署】最新版 elasticsearch + kibana(7.15.0)安装、配置、启动(多个问题处理 + kibana仪表盘使用)
  2. 01_MUI之Boilerplate中:HTML5示例,动态组件,自定义字体示例,自定义字体示例,图标字体示例
  3. zookeeper 3.4.6安装
  4. 检验开发团队好不好的12个问题
  5. oci mysql_Oracle常用的OCI函数
  6. 2019 年度程序员吸金榜:你排第几?
  7. python的网络编程学什么_【Python学习】网络编程
  8. 研究生马上要毕业了,可是完全写不出论文,该退学吗?
  9. Java 类和Static关键字
  10. 用python编制一个的类_python之面向对象编制之封装
  11. LaTeX及TeXstudio下载地址
  12. WiFi钥匙管家-免费上网神器
  13. 使用screw一键生成数据库文档
  14. 磁共振线圈分类_MRI技师必须知道的磁共振软硬件知识
  15. ESP32 驱动WS2812B 灯条
  16. python 围棋按照坐标查找棋子_python 实现围棋游戏(纯tkinter gui)
  17. 简单地人物介绍页面设计
  18. 学 Python 都用来干嘛的?
  19. Top Rock Bands
  20. 什么是商业模式(Business Model)?

热门文章

  1. 特斯拉遇上 CPU:程序员的心思你别猜
  2. 论推荐系统与精细化运营
  3. 赠书 | 熵的实际应用,赌场和金融圈最著名的一个数学公式
  4. 如何用Neo4j和Scikit-Learn做机器学习任务?| 附超详细分步教程
  5. 我发现了一个非常酷的软件,用自然语言编程!
  6. NLP最新资源:论文、代码、博客、视频一应俱全
  7. 滴滴裁员2000多人,去年亏损超百亿
  8. 又一届Google Cloud Next,李飞飞发布TPU 3.0,两大AutoML新品
  9. 城市追风口,车企“缉拿”路测牌照
  10. 课程 | 想成为高薪、抢手又能改变世界的机器学习工程师?