WordNet是面向语义的英语词典,与传统辞典类似,但结构更丰富。nltk中包括英语WordNet,共有155287个单词和117659个同义词。

1.寻找同义词

这里以motorcar为例,寻找它的同义词集。

  1. >>> from nltk.corpus import wordnet as wn
  2. >>> wn.synsets('motorcar') //找到同义词集
  3. [Synset('car.n.01')]
  4. >>> wn.synset('car.n.01').lemma_names
  5. <bound method Synset.lemma_names of Synset('car.n.01')>
  6. >>> wn.synset('car.n.01').lemma_names() //访问同义词集
  7. ['car', 'auto', 'automobile', 'machine', 'motorcar']
  8. >>>
  1. >>> wn.synset('car.n.01').definition() //获取该词在该词集的定义
  2. 'a motor vehicle with four wheels; usually propelled by an internal combustion engine'
  3. >>> wn.synset('car.n.01').examples() //获取该词在该词集下的例句
  4. ['he needs a car to get to work']
  5. >>> wn.synset('car.n.01').lemmas()
  6. [Lemma('car.n.01.car'), Lemma('car.n.01.auto'), Lemma('car.n.01.automobile'), Lemma('car.n.01.machine'), Lemma('car.n.01.motorcar')]
  7. >>> wn.lemma('car.n.01.automobile')
  8. Lemma('car.n.01.automobile')
  9. >>> wn.lemma('car.n.01.automobile').synset()
  10. Synset('car.n.01')
  11. >>> wn.lemma('car.n.01.automobile').name()
  12. 'automobile'
  13. >>> wn.synsets('car')
  14. [Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'), Synset('car.n.04'), Synset('cable_car.n.01')]
  15. >>> for synset in wn.synsets('car'):
  16. ... print (synset.lemma_names())
  17. ...
  18. ['car', 'auto', 'automobile', 'machine', 'motorcar']
  19. ['car', 'railcar', 'railway_car', 'railroad_car']
  20. ['car', 'gondola']
  21. ['car', 'elevator_car']
  22. ['cable_car', 'car']
  23. >>> wn.lemmas('car') //访问所有包含词car的词条
  24. [Lemma('car.n.01.car'), Lemma('car.n.02.car'), Lemma('car.n.03.car'), Lemma('car.n.04.car'), Lemma('cable_car.n.01.car')]
  25. >>>

2.WordNet的层次结构

WordNet的同义词集相当于抽象的概念,它们并不总是有对应的英语词汇。这些概念在层次结构中相互联系在一起。

如上图,是WordNet概念的层次片段。每个节点对应一个同义词集,边表示上位词/下位词关系,即上级概念与从属概念的关系。

  1. >>> motorcar=wn.synset('car.n.01')
  2. >>> types_of_motorcar=motorcar.hyponyms()
  3. >>> types_of_motorcar[26]
  4. Synset('stanley_steamer.n.01')
  5. >>> sorted(
  6. ... [lemma.name()
  7. ... for synset in types_of_motorcar
  8. ... for lemma in synset.lemmas()])
  9. ['Model_T', 'S.U.V.', 'SUV', 'Stanley_Steamer', 'ambulance', 'beach_waggon', 'beach_wagon', 'bus', 'cab', 'compact', 'compact_car', 'convert
  10. ible', 'coupe', 'cruiser', 'electric', 'electric_automobile', 'electric_car', 'estate_car', 'gas_guzzler', 'hack', 'hardtop', 'hatchback', '
  11. heap', 'horseless_carriage', 'hot-rod', 'hot_rod', 'jalopy', 'jeep', 'landrover', 'limo', 'limousine', 'loaner', 'minicar', 'minivan', 'pace
  12. _car', 'patrol_car', 'phaeton', 'police_car', 'police_cruiser', 'prowl_car', 'race_car', 'racer', 'racing_car', 'roadster', 'runabout', 'sal
  13. oon', 'secondhand_car', 'sedan', 'sport_car', 'sport_utility', 'sport_utility_vehicle', 'sports_car', 'squad_car', 'station_waggon', 'statio
  14. n_wagon', 'stock_car', 'subcompact', 'subcompact_car', 'taxi', 'taxicab', 'tourer', 'touring_car', 'two-seater', 'used-car', 'waggon', 'wago
  15. n']
  16. >>> motorcar.hypernyms()
  17. [Synset('motor_vehicle.n.01')]
  18. >>> paths=motorcar.hypernym_paths()
  19. >>> len(paths)
  20. 2
  21. >>> [synset.name for synset in paths[0]]
  22. [<bound method Synset.name of Synset('entity.n.01')>, <bound method Synset.name of Synset('physical_entity.n.01')>, <bound method Synset.nam
  23. e of Synset('object.n.01')>, <bound method Synset.name of Synset('whole.n.02')>, <bound method Synset.name of Synset('artifact.n.01')>, <bou
  24. nd method Synset.name of Synset('instrumentality.n.03')>, <bound method Synset.name of Synset('container.n.01')>, <bound method Synset.name
  25. of Synset('wheeled_vehicle.n.01')>, <bound method Synset.name of Synset('self-propelled_vehicle.n.01')>, <bound method Synset.name of Synset
  26. ('motor_vehicle.n.01')>, <bound method Synset.name of Synset('car.n.01')>]
  27. >>> [synset.name() for synset in paths[0]]
  28. ['entity.n.01', 'physical_entity.n.01', 'object.n.01', 'whole.n.02', 'artifact.n.01', 'instrumentality.n.03', 'container.n.01', 'wheeled_veh
  29. icle.n.01', 'self-propelled_vehicle.n.01', 'motor_vehicle.n.01', 'car.n.01']
  30. >>> [synset.name() for synset in paths[1]]
  31. ['entity.n.01', 'physical_entity.n.01', 'object.n.01', 'whole.n.02', 'artifact.n.01', 'instrumentality.n.03', 'conveyance.n.03', 'vehicle.n.
  32. 01', 'wheeled_vehicle.n.01', 'self-propelled_vehicle.n.01', 'motor_vehicle.n.01', 'car.n.01']
  33. >>> motorcar.root_hypernyms()
  34. [Synset('entity.n.01')]
  35. >>>

3.更多的词汇关系

上位词和下位词被称为词汇关系,因为它们是同义集之间的关系。这两者的关系为上下定位“is-a”层次。WordNet网络另一个重要的定位方式是从条目到它们的部件(部分)或到包含它们的东西(整体)。

1)部分-整体关系

  1. >>> wn.synset('tree.n.01').part_meronyms()
  2. [Synset('burl.n.02'), Synset('crown.n.07'), Synset('limb.n.02'), Synset('stump.n.01'), Synset('trunk.n.01')]
  3. >>> wn.synset('tree.n.01').substance_meronyms()
  4. [Synset('heartwood.n.01'), Synset('sapwood.n.01')]
  5. >>> wn.synset('tree.n.01').member_holonyms()
  6. [Synset('forest.n.01')]
  7. >>> for synset in wn.synsets('mint', wn.NOUN):
  8. ... print("%s : %s" % (synset.name(), synset.definition())
  9. ...
  10. ...
  11. ... )
  12. ...
  13. batch.n.02 : (often followed by `of') a large number or amount or extent
  14. mint.n.02 : any north temperate plant of the genus Mentha with aromatic leaves and small mauve flowers
  15. mint.n.03 : any member of the mint family of plants
  16. mint.n.04 : the leaves of a mint plant used fresh or candied
  17. mint.n.05 : a candy that is flavored with a mint oil
  18. mint.n.06 : a plant where money is coined by authority of the government
  19. >>> wn.synset('mint.n.04').part_holonyms()
  20. [Synset('mint.n.02')]
  21. >>> wn.synset('mint.n.04').substance_holonyms()
  22. [Synset('mint.n.05')]

2)蕴涵关系

  1. >>> wn.synset('walk.v.01').entailments()
  2. [Synset('step.v.01')]
  3. >>> wn.synset('eat.v.01').entailments()
  4. [Synset('chew.v.01'), Synset('swallow.v.01')]
  5. >>> wn.synset('tease.v.03').entailments()
  6. [Synset('arouse.v.07'), Synset('disappoint.v.01')]

3)反义词

  1. >>> wn.lemma('supply.n.02.supply').antonyms()
  2. [Lemma('demand.n.02.demand')]
  3. >>> wn.lemma('rush.v.01.rush').antonyms()
  4. [Lemma('linger.v.04.linger')]
  5. >>> wn.lemma('horizontal.a.01.horizontal').antonyms()
  6. [Lemma('inclined.a.02.inclined'), Lemma('vertical.a.01.vertical')]
  7. >>> wn.lemma('staccato.r.01.staccato').antonyms()
  8. [Lemma('legato.r.01.legato')]
  9. >>>

4. 语义相似度

同义词集是由复杂的词汇关系网络所连接起来的。给定一个同义词集,可以遍历WordNet网络来查找相关含义的同义词集。每个同义词集都有一个或多个上位词路径连接到一个根上位词。连接到同一个根的两个同义词集可能有一些共同的上位词。如果两个同义词集共用一个特定的上位词——在上位词层次结构中处于较底层——它们一定有密切的联系。

python 自然语言处理(五)____WordNet的更多相关文章

  1. 转-Python自然语言处理入门

      Python自然语言处理入门 原文链接:http://python.jobbole.com/85094/ 分享到:20 本文由 伯乐在线 - Ree Ray 翻译,renlytime 校稿.未经许 ...

  2. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  3. 《Python自然语言处理》中文版-纠错【更新中。。。】

    最近在看<Python自然语言处理>中文版这本书,可能由于是从py2.x到py3.x,加上nltk的更新的原因,或者作者的一些笔误,在书中很多代码都运行不能通过,下面我就整理一下一点有问题 ...

  4. 初学 Python(十五)——装饰器

    初学 Python(十五)--装饰器 初学 Python,主要整理一些学习到的知识点,这次是生成器. #-*- coding:utf-8 -*- import functools def curren ...

  5. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  6. python学习第五次笔记

    python学习第五次笔记 列表的缺点 1.列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢. 2.列表只能按照顺序存储,数据与数据之间关联性不强 数据类型划分 数据类型:可变数据 ...

  7. Python学习第五堂课

    Python学习第五堂课推荐电影:华尔街之狼 被拯救的姜哥 阿甘正传 辛德勒的名单 肖申克的救赎 上帝之城 焦土之城 绝美之城 #上节内容: 变量 if else 注释 # ""& ...

  8. Python 自然语言处理笔记(一)

    一. NLTK的几个常用函数 1. Concordance 实例如下: >>> text1.concordance("monstrous") Displaying ...

  9. 《Python自然语言处理》

    <Python自然语言处理> 基本信息 作者: (美)Steven Bird    Ewan Klein    Edward Loper 出版社:人民邮电出版社 ISBN:97871153 ...

  10. NLP1 —— Python自然语言处理环境搭建

    最近开始研究自然语言处理了,所以准备好好学习一下,就跟着<Python自然语言处理>这本书,边学边整理吧 安装 Mac里面自带了python2.7,所以直接安装nltk就可以了. 默认执行 ...

随机推荐

  1. django 消息框架 message

    在网页应用中,我们经常需要在处理完表单或其它类型的用户输入后,显示一个通知信息给用户. 对于这个需求,Django提供了基于Cookie或者会话的消息框架messages,无论是匿名用户还是认证的用户 ...

  2. 人脸识别最新开发经验demo分享

    本来打算做个C#版demo,但没用成功,基于虹软的免费人脸识别技术 过程如下: 1. 传入一张单人脸照片: 2.调用检测人脸函数ASFDetectFaces,成功返回人脸信息的指针: 3.使用 Mar ...

  3. Pandas存储为Excel格式:单个xlsx文件下多sheet存储方法

    Notes If passing an existing ExcelWriter object, then the sheet will be added to the existing workbo ...

  4. 第 4 章 容器 - 029 - 限制容器的 Block IO

    限制容器的 Block IO Block IO 是另一种可以限制容器使用的资源. Block IO 指的是磁盘的读写,docker 可通过设置权重.限制 bps 和 iops 的方式控制容器读写磁盘的 ...

  5. python中的面向对象学习以及类的封装(这篇文章初学者一定要好好看)

    这篇文章对于初学者可以很有效的理解面对过程.面对对象 一.首先介绍一下面向过程和面向对象的比较: 面向过程 VS 面向对象 编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何 ...

  6. vs2015多行注释与取消多行注释

    注释: 先CTRL+K,然后CTRL+C 取消注释: 先CTRL+K,然后CTRL+U

  7. Ubuntu自带截图工具screenshoot

  8. 再谈Lasso回归 | elastic net | Ridge Regression

    前文:Lasso linear model实例 | Proliferation index | 评估单细胞的增殖指数 参考:LASSO回歸在生物醫學資料中的簡單實例 - 生信技能树 Linear le ...

  9. java ----> 手动编译java项目

    环境: jdk1.8,cmd,notepad++ 创建java工程test,创建文件夹: src classes lib 说明: src 放置.java文件 classes 放置.class文件 li ...

  10. ssh登陆被拒?(云:使用云的网页版远程登陆) 不好用。

    设定的密