最近看了WordNet,0基础入门,简单记下笔记。因为本身不是学自然语言处理的,好多名词不是特别清楚,现有的博客读的晕乎乎,所以重新写了这个,理清思路。除了行文中提到的链接,其他几个有用的参考链接如下:

wordnet的安装

wordnet的官网地址为:https://wordnet.princeton.edu/,可以在线使用和查询。此外,在python中wordnet是nltk的一个组件,安装方法如下:

  1. pip install nltk

在python中下载和import wordnet组件如下:

  1. >>> import nltk
  2. >>> nltk.download('wordnet')
  3. >>> from nltk.corpus import wordnet as wn

由于墙的问题,下载过程中可能会报错,可以从网盘(指路,这个博客有链接https://blog.csdn.net/RainyD4y/article/details/106970593)下载后放在相应位置。放在那个位置呢?你可以随便你运行一个wordnet命令,系统就会把路径print出来,随便选择一个把下载下来的nltk_data文件夹或wordnet.zip放在对应位置就好。

  1. >>> from nltk.corpus import wordnet as wn
  2. >>> ws.synsets('published')
  3. LookupError:
  4. **********************************************************************
  5. Resource wordnet not found.
  6. Please use the NLTK Downloader to obtain the resource:
  7. >>> nltk.download('wordnet')
    Attemp to load corpora/wordnet.zip/wordnet/
  8. Searched in:
  9. - 'C:\\Users\\...\\nltk_data'
  10. - 'C:\\nltk_data'
  11. - 'C:\\Users\\...\\Anaconda3\\nltk_data'
  12. - 'C:\\Users\\...\\Anaconda3\\lib\\nltk_data'
  13. - 'C:\\Users\\...\\AppData\\Roaming\\nltk_data'
  14. **********************************************************************

单词和词集

由于一个单词(lemma如,‘dog’,或者叫词条)可以有很多个含义(synset,如‘dog.n.01’,或者叫词集),wordnet中某一单词的具体含义表示方法为:单词.词性.词义序号

  • 词性:包含NOUN,VERB,ADJ,ADV等,实际使用一个小写字母表示:n, v, a
  • 词义序号:一个单词在同一个词性下也可能有多种含义,为每一个含义都分配一个序号

词集是单词的一个含义(一个含义可能由很多单词表示),我们用synsets质量查看dog的所有同义词集(pos值可以为——NOUN,VERB,ADJ,ADV…)

  1. >>> wn.synsets("car"pos=wn.NOUN)
  2. [Synset( "car.n.01" ), Synset("car.n.02"), Synset("car.n.03"), Synset("car.n.04"), Synset ("cable_car.n.01")]

其中,"car.n.01"表示car在名词中的第一个含义。每个意思的具体含义可以按如下方法查看

  1. >>> for synset in wn.synsets("car"):
  2. ... print(synset.definition())

同时,一个含义可能对应了多个多个单词(lemma),可以用以下方法查询词集对应的多有单词(同义词)

  1. >>> wn.synset('dog.n.01').lemma_names( )
  2. ['dog', 'domestic_dog', 'Canis_familiaris']
  3. >>> wn.synset('dog.n.01').lemmas( )
  4. [Lemma('dog.n.01.dog'),
  5. Lemma('dog.n.01.domestic_dog'),
  6. Lemma('dog.n.01.Canis_familiaris')]

词集(synset)之间的关系

对于名词,WordNet认为词集(含义)之间呈树形结构,因而词集有上位词与下位词,查看方法为

  1. >>> dog = wn.synset('dog.n.01') # 创建词集对象
  2. >>> dog.hypernyms() # 上位词集(父类)
  3. [Synset('canine.n.02'), Synset('domestic_animal.n.01')]
  4. >>> dog.hyponyms() # 下位词集(子类)
  5. [Synset('basenji.n.01'), Synset('corgi.n.01'), ...]

WordNet提供了两个词集之间的相似度(0~1,越大相似度越高)

  1. >>> dog = wn.synset('dog.n.01')
  2. >>> cat = wn.synset('cat.n.01')
  3. >>> dog.path_similarity(cat)
  4. 0.2

由于是树状结构可以查看他们的最低共同祖先

  1. >>> dog.lowest_common_hypernyms(cat)
  2. [Synset('carnivore.n.01')]

对于动词,词之间的关系主要表现为蕴含关系,例如:

  1. >>> wn.synset('walk.v.01').entailments()#走路蕴含着抬脚
  2. [Synset('step.v.01')]

对于形容词和副词,他们没有被组织成分类体系,也不能用path_distance查看相似度。形容词和副词最有用的关系是similar to。

  1. >>> beau.similar_tos()
  2. [Synset('beauteous.s.01'), Synset('bonny.s.01'), Synset('dishy.s.01'), Synset('exquisite.s.04'), Synset('fine-looking.s.01'), Synset('glorious.s.03'), Synset('
    gorgeous.s.01'), Synset('lovely.s.01'), Synset('picturesque.s.01'), Synset('pretty-pretty.s.01'), Synset('pretty.s.01'), Synset('pulchritudinous.s.01'), Synset('ravishing.s.01'), Synset('scenic.s.01'), Synset('stunning.s.04')]

其他词集之间的关系还有,部分、实质、集合等关系,示例如下。由于这些关系不是(NLP门外汉)最常用的,也不太好理解,不展开描述,具体关系的含义可以参考:https://blog.csdn.net/sinat_22581761/article/details/78577618

  1. >>> wn.synset('tree.n.01').part_meronyms() #tree的部件(条目-部件)
  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()  #tree的实质(条目-实质)
  4. [Synset('heartwood.n.01'), Synset('sapwood.n.01')]
  5. >>> wn.synset('tree.n.01').member_holonyms()    #tree集合是森林
  6. [Synset('forest.n.01')]
  7. >>> wn.synset('burl.n.02').part_holonyms()     #由上边第一行代码的输出结果可知'burl.n.02'是'tree.n.01'的一个部件,因此burl的整体是tree无疑
  8. [Synset('tree.n.01')]
  9. >>> wn.synset('heartwood.n.01').substance_holonyms()#同理,heartwoodtree的一个实质,其整体也是tree无疑
  10. [Synset('tree.n.01')]

单词(lemma)之间的关系

单词之间的关系即同义词/反义词,同义词查询上文已经介绍过,反义词查询方法为

  1. >>> wn.lemma('hot.a.01.hot').antonyms()
  2. [Lemma('cold.a.01.cold')]

介绍完啦,撒花!就这么简单!

手把手教你NLTK WordNet使用方法的更多相关文章

  1. 《手把手教你》系列基础篇(九十七)-java+ selenium自动化测试-框架设计篇-Selenium方法的二次封装和页面基类(详解教程)

    1.简介 上一篇宏哥介绍了如何设计支持不同浏览器测试,宏哥的方法就是通过来切换配置文件设置的浏览器名称的值,来确定启动什么浏览器进行脚本测试.宏哥将这个叫做浏览器引擎类.这个类负责获取浏览器类型和启动 ...

  2. 手把手教你做个人 app

    我们都知道,开发一个app很大程度依赖服务端:服务端提供接口数据,然后我们展示:另外,开发一个app,还需要美工协助切图.没了接口,没了美工,app似乎只能做成单机版或工具类app,真的是这样的吗?先 ...

  3. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)

    前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...

  4. 推荐!手把手教你使用Git

    推荐!手把手教你使用Git 原文出处: 涂根华的博客   http://blog.jobbole.com/78960/ 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与 ...

  5. 手把手教你写Sublime中的Snippet

    手把手教你写Sublime中的Snippet Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效 关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜 ...

  6. 30分钟手把手教你学webpack实战

    30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...

  7. 【转】手把手教你把Vim改装成一个IDE编程环境(图文)

    手把手教你把Vim改装成一个IDE编程环境(图文) By: 吴垠 Date: 2007-09-07 Version: 0.5 Email: lazy.fox.wu#gmail.com Homepage ...

  8. 手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)

    转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...

  9. 手把手教你用动软.NET代码生成器实例教程

    动软实战攻略 手把手教你用动软 文档编号:20110421 版权所有 © 2004-2011 动软 在线帮助:http://help.maticsoft.com 目录   一.        产品介绍 ...

随机推荐

  1. 用Vue实现一个简单的图片轮播

    本文已收录至https://github.com/likekk/studyBlog欢迎大家star,共同学习,共同进步.如果文章有错误的地方,欢迎大家指出.后期将在将GitHub上规划前端学习的路线和 ...

  2. Python Ethical Hacking - TROJANS Analysis(2)

    DOWNLOAD & EXECUTE PAYLOAD A generic executable that downloads & executes files. Disadvantag ...

  3. 一次HTTP请求服务的完整过程-请求处理过程

    0.DNS域名解析:递归查询.迭代查询 递归查询:客户端向第一个服务器查询,给最终结果 迭代查询:第一个服务器向根查询 1 .建立连接:接收或拒绝连接请求:三次握手的过程 提高HTTP 连接性能: 并 ...

  4. 微信小程序开发部署

    一.开发准备 1,想要开发微信小程序,必须要有一个AppId,如果没有可以去注册一个.   https://mp.weixin.qq.com/进入注册页面,点击上方注册.   2,点击选择“小程序”出 ...

  5. p73_万维网和HTTP协议

    一.URL形式 URL不区分大小写 <协议>://<主机>:<端口>/<路径> 二.HTTP协议 HTTP协议定义了浏览器(万维网客户进程)怎样向万维网 ...

  6. NIO入门之多路复用选择器Selector

    简介 Selector 是 java.nio.channels 包下的重要组件,阅读本文可以带你了解常用的 API.本文中把 Channel 翻译成信道,按照个人习惯也可以称作是通道.管道. Sele ...

  7. js获得url传过来的参数

     function  getParam(url) {                  var arr = url.split('?');   //取?以后                 var a ...

  8. ajax工作原理/实例

    ajax是什么? 是一种创建交互式网页应用的一种网页技术.简单来说,就是向服务器发起请求,获得数据使交互性和用户体验更好. ajax不是一种新的技术,是一些技术的集合体.有 1.XHTML和CSS 2 ...

  9. thymeleaf js绑定多个变量参数

    写法一: <img th:src="@{/css/bianji.png}" th:onclick="|viewById('${user.id}','${user.i ...

  10. clion更改大括号的位置

    进入setting 搜索code style 如果是c++ /c 选择这个选项点开 wrapping and brace 里面 有brace placement 选择你想要的方式