如何在Python中开始使用nltk-wordnet

622 阅读5分钟

在Python中开始使用nltk-wordnet

WordNet英语词典是Python中自然语言工具箱(NLTK)的一部分。使用这套全面的工具,自然语言处理(NLP)变得简单而明了。

本教程将介绍使用这个工具可以进行的基本操作。

前提条件

为了更好地理解这篇文章,读者应该。

  • 具备python语言的基本知识。
  • 安装了[Python]。
  • 安装了[nltk]和它的[语料库]。

从同义词和合成词组开始

WordNet将英语单词分类为同义词,称为Synsets(同义词集合的简称)。每个Synsets都包含一个名称、一个语篇(名词、动词、副词和形容词)和一个数字。

同义词集是用来存储同义词的,其中同义词集中的每个词都有相同的含义。从本质上讲,每个Synset是一个同义词的集合。有些词只有一个Synset,而有些词则有多个Synset。每个Synset都有一个与之相关的定义。Synset使用户更容易在WordNet数据库中查找单词。

获取一个词的Synsets

一个词的Synsets是与所提供的词具有相同含义的其他词。为了获得所给单词的Synsets,我们使用函数wordnet.synsets('word') 。该函数返回一个数组,其中包含与作为参数传递的单词相关的所有Synsets。

import nltk
from nltk.corpus import wordnet as wn 
wn.synsets('book')

输出。

[Synset('book.n.01'),Synset('book.n.02'),Synset('record.n.05'),Synset('script.n.01'),Synset('ledger.n.01'),Synset('book.n.06'),Synset('book.n.07'),Synset('koran.n.01'),Synset('bible.n.01'),Synset('book.n.10'),Synset('book.n.11'),Synset('book.v.01'),Synset('reserve.v.04'),Synset('book.v.03'),Synset('book.v.04')]

该函数还允许你通过提供一个可选的位置参数来限制该词的语义部分--例如,如果我们想获得一个词的所有动词的合成集。

import nltk
from nltk.corpus import wordnet as wn
wn.synsets('book', pos=wn.VERB)

输出。

[Synset('book.v.01'),
 Synset('reserve.v.04'),
 Synset('book.v.03'),
 Synset('book.v.04')]

另一方面,如果我们想得到一个名词的所有synsets,我们在位置参数中也要指定。

import nltk
from nltk.corpus import wordnet as wn
wn.synsets('book', pos=wn.NOUN)

输出。

[Synset('book.n.01'),Synset('book.n.02'),Synset('record.n.05'),Synset('script.n.01'),Synset('ledger.n.01'),Synset('book.n.06'),Synset('book.n.07'),Synset('koran.n.01'),Synset('bible.n.01'),Synset('book.n.10'),Synset('book.n.11')]

获得一个Synset的定义

为了得到一个Synset的定义,你可以利用definition() 函数,它可以进一步分析Synset,以获得其所有词条的共同定义。

这个方法返回一个符合基本规范的字符串。有两种方法可以实现这一点。

例一:为了获得Synsets('word')提供的数组中的一个项目,我们可以这样做。

import nltk
from nltk.corpus import wordnet as wn
synset_array = wn.synsets('book')
synset_array[1].definition()

输出。

'physical objects consisting of a number of pages bound together

例二

import nltk
from nltk.corpus import wordnet as wn
synset_array = wn.synsets('book')
synset_array[3].definition()

输出。

'a written version of a play or other dramatic composition; used in preparing for a performance.'

使用synset() 函数可以获得名称、语篇以及一个Synset被定义了多少次。例如。

import nltk
from nltk.corpus import wordnet as wn
wordnet.synset('book.n.02').definition()

输出。

physical objects consisting of a number of pages bound together

例三

import nltk
from nltk.corpus import wordnet as wn
wordnet.synset('script.n.01').definition()

输出结果。

physical objects consisting of a number of pages bound together

如何获得一个词组的词条

词条是一个语系中的所有词汇。使用Lemma_names() 方法,用户可以得到指定Synset的所有词条。这个方法可以用两种不同的方式来获得所有词条名称的数组。

第一种方法

import nltk
from nltk.corpus import wordnet as wn
wn.synsets('book')
synset_array = wn.synsets('book')
print(synset_array[3].lemma_names())

输出。

['script', 'book', 'playscript']

第二种方法

import nltk
from nltk.corpus import wordnet as wn
wn.synsets('book')
print(wn.synset('book.n.07').lemma_names())

输出。

['book', 'rule_book']

了解NLTK超文本和同义词

超义词是一种为特定目的而修改的Synset,而不是通用Synset。在继承方面,它类似于 "子类 "的概念。

同义词是一个返回数组的函数,其中包含构成作为参数传递给函数的Synset的所有Synsets的外来语。

超义词有几种形状和大小,但Synset是最流行的。次义词和超义词这两个术语是相对的。一个Synset的超词以数字数组的形式返回。

例如,"香蕉 "和 "芒果 "是 "水果 "这个词的外来语。在这种情况下,它们是 "水果 "这个词的更具体的概念。此外,"水果 "一词是 "香蕉 "和 "芒果 "的超义词,因为它指的是水果的一般概念。

例子。

import nltk
from nltk.corpus import wordnet as wn
wn.synsets('eclipse')

输出。

[Synset('eclipse.n.01'), Synset('overshadow.v.01'), Synset('eclipse.v.02')]

要得到超义词。

import nltk
from nltk.corpus import wordnet as wn
print(wn.synset('eclipse.n.01').hyponyms())

输出。

[Synset('lunar_eclipse.n.01'), Synset('partial_eclipse.n.01'), Synset('solar_eclipse.n.01'), Synset('total_eclipse.n.01')]

得到超义词。

import nltk
from nltk.corpus import wordnet as wn
print(wn.synset('partial_eclipse.n.01').hypernyms())

输出:获得超义词。

[Synset('eclipse.n.01')]

审视综合地名和整体地名

综合地名和整体地名建立了一个部分与整体的关系。

合义词代表一半,而整体词代表整体。正如你所看到的,合并词和整体词都是指同一事物,但方式不同。

例如,"卧室 "这个词是家庭的同义词。这是因为卧室被认为是房子的一个组成部分。同样,鼻子、眼睛和嘴也是脸的同义词。

例子。

import nltk
from nltk.corpus import wordnet as wn
wn.synsets('face') 

输出。

[Synset('face.n.01'),Synset('expression.n.01'),Synset('face.n.03'), Synset('face.n.04'), Synset('face.n.05'),Synset('side.n.04'),Synset('face.n.07'),Synset('face.n.08'),Synset('grimace.n.01'),Synset('font.n.01'),Synset('face.n.11'),Synset('boldness.n.02'),Synset('face.n.13'), Synset('confront.v.02'),Synset('confront.v.01'),Synset('front.v.01'),Synset('face.v.04'),Synset('face.v.05'),Synset('confront.v.03'),Synset('face.v.07'),Synset('face.v.08'),Synset('face.v.09')]

整体词的例子。

import nltk
from nltk.corpus import wordnet as wn
wn.synset('face.n.01').part_holonyms() 

输出。

[Synset('head.n.01'), Synset('homo.n.02')]

同义词的例子

import nltk
from nltk.corpus import wordnet as wn
wn.synset('face.n.01').part_meronyms()  

输出。

[Synset('beard.n.01'),Synset('brow.n.01'),Synset('cheek.n.01'),Synset('chin.n.01'),Synset('eye.n.01'),Synset('eyebrow.n.01'),Synset('facial.n.01'),Synset('facial_muscle.n.01'),Synset('facial_vein.n.01'),Synset('feature.n.02'),Synset('jaw.n.02'),Synset('jowl.n.02'),Synset('mouth.n.02'),Synset('nose.n.01')]

理解NLTK的尾数

连带关系类似于暗示,是一种只能从某一事物中推导出来的结论,尽管它并没有被具体表达。

比如说

import nltk
from nltk.corpus import wordnet as wn
wn.synsets('eat')

输出。

[Synset('eat.v.01'),
 Synset('eat.v.02'),
 Synset('feed.v.06'),
 Synset('eat.v.04'),
 Synset('consume.v.05'),
 Synset('corrode.v.01')]

附带条件的例子

import nltk
from nltk.corpus import wordnet as wn
wn.synset('eat.v.01').entailments()

输出。

[Synset('chew.v.01'), Synset('swallow.v.01')]

结论

在这篇文章中,我们已经研究了在python中使用nltk词网的不同概念。

我们从理解同义词和合成词组开始,讨论了如何使用不同的方法来获得合成词组,定义,以及合成词组的所有词条。

然后,我们还研究了超义词和假名。最后,我们讨论了合并词、整体词和尾词。