zoukankan      html  css  js  c++  java
  • 手把手教你NLTK WordNet使用方法

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

    wordnet的安装

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

    pip install nltk

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

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

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

    >>> from nltk.corpus import wordnet as wn
    >>> ws.synsets('published')
    LookupError:
    **********************************************************************
     Resource wordnet not found.
     Please use the NLTK Downloader to obtain the resource:
     >>> nltk.download('wordnet')
    Attemp to load corpora/wordnet.zip/wordnet/ Searched
    in: - 'C:\Users\...\nltk_data' - 'C:\nltk_data' - 'C:\Users\...\Anaconda3\nltk_data' - 'C:\Users\...\Anaconda3\lib\nltk_data' - 'C:\Users\...\AppData\Roaming\nltk_data' **********************************************************************

    单词、词集和词条

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

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

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

    >>> wn.synsets("car",pos=wn.NOUN)
    [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在名词中的第一个含义。每个意思的具体含义可以按如下方法查看

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

    同时,一个含义可能对应了多个单词,因而可以找到含义对应的多个词条(lemma,某含义所对应的具体一个单词),可以用以下方法查询词集对应的多个词条(同义词)

    >>> wn.synset('dog.n.01').lemma_names( )
    ['dog', 'domestic_dog', 'Canis_familiaris']
    >>> wn.synset('dog.n.01').lemmas( )
    [Lemma('dog.n.01.dog'),
     Lemma('dog.n.01.domestic_dog'), 
     Lemma('dog.n.01.Canis_familiaris')]

    词集(synset)之间的关系

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

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

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

    >>> dog = wn.synset('dog.n.01')
    >>> cat = wn.synset('cat.n.01')
    >>> dog.path_similarity(cat)
    0.2

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

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

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

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

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

    >>> beau.similar_tos()
    [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

    >>> wn.synset('tree.n.01').part_meronyms()        #tree的部件(条目-部件)
    [Synset('burl.n.02'), Synset('crown.n.07'), Synset('limb.n.02'), Synset('stump.n.01'), Synset('trunk.n.01')]
    >>> wn.synset('tree.n.01').substance_meronyms()  #tree的实质(条目-实质)
    [Synset('heartwood.n.01'), Synset('sapwood.n.01')]
    >>> wn.synset('tree.n.01').member_holonyms()    #tree集合是森林
    [Synset('forest.n.01')]
    >>> wn.synset('burl.n.02').part_holonyms()     #由上边第一行代码的输出结果可知'burl.n.02'是'tree.n.01'的一个部件,因此burl的整体是tree无疑
    [Synset('tree.n.01')]
    >>> wn.synset('heartwood.n.01').substance_holonyms()#同理,heartwood是tree的一个实质,其整体也是tree无疑
    [Synset('tree.n.01')]    

    词条(lemma)之间的关系

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

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

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

  • 相关阅读:
    Android CTS 测试
    Cygwin 不兼容Win7 64
    真滴有太多不懂的的东西,有点扛不住了。
    ffmpeg yasm not found, use disableyasm for a crippled build
    手机搜索不到 Connectify
    Android ICS 横竖屏切换时不销毁Activity
    MinGw\bin\ar.exe: libavcodec/: Permission denied
    Cannot complete the install because one or more required items could not be found.
    Eclipse 启动时报错 JVM terminated. Exit code=1
    【Java 从入坑到放弃】No 5. 控制流程
  • 原文地址:https://www.cnblogs.com/Xiaoyan-Li/p/13477253.html
Copyright © 2011-2022 走看看