NLTK库WordNet的使用方法实例
1、在代码中引入wordnet包
>>>from nltk.corpus import wordnet as wn
2、查询一个词所在的所有词集(synsets)
>>>wn.synsets('dog')
[Synset('dog.n.01'), Synset('frump.n.01'),
Synset('frank.n.02'), Synset('pawl.n.01'),
Synset('andiron.n.01'), Synset('chase.v.01')]
3、查询一个同义词集的定义
>>> wn.synset('apple.n.01').definition()
'fruit with red or yellow or green skin and sweet to tart crisp whitish flesh'
4、查询词语一个词义的例子
>>> wn.synset('dog.n.01').examples()
['the dog barked all night']
5、查询词语某种词性所在的同义词集合
>>> wn.synsets('dog',pos=wn.NOUN)
[Synset('dog.n.01'), Synset('frump.n.01'),
Synset('dog.n.03'), Synset('cad.n.01'),
Synset('frank.n.02'), Synset('pawl.n.01'),
Synset('andiron.n.01')]
注:pos值可以为——NOUN,VERB,ADJ,ADV…
6、查询一个同义词集中的所有词
>>> wn.synset('dog.n.01').lemma_names( )
['dog', 'domestic_dog', 'Canis_familiaris']
7、输出词集和词的配对——词条(lemma)
>>> wn.synset('dog.n.01').lemmas( )
[Lemma('dog.n.01.dog'),
Lemma('dog.n.01.domestic_dog'),
Lemma('dog.n.01.Canis_familiaris')]
8、利用词条查询反义词
>>> good = wn.synset('good.a.01')
>>> good.lemmas()[0].antonyms()
[Lemma('bad.a.01.bad')]
9、查询两个词之间的语义相似度
path_similarity函数,值从0-1,越大表示相似度越高
>>> dog = wn.synset('dog.n.01')
>>> cat = wn.synset('cat.n.01')
>>> dog.path_similarity(cat)
0.2
值得注意的是,名词和动词被组织成了完整的层次式分类体系,形容词和副词没有被组织成分类体系,所以不能用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')]
附:
10. 其他词汇关系:蕴含、反义词
蕴含:entailments()
以上的分析多是针对名词,对于动词,也存在关系。这里只有列出了一种蕴含的关系:
entailments()方法,同样由一个词集调用:
>>> wn.synset('walk.v.01').entailments()#走路蕴含着抬脚
[Synset('step.v.01')]
反义词:antonyms()
由一个词条调用:wn.lemma(‘supply.n.02.supply’)
>>> wn.lemma('supply.n.02.supply').antonyms()
[Lemma('demand.n.02.demand')]
>>>
注意所用词语的词性,笔者试着对形容词取反义词:
>>> wn.lemma('hot.a.01.hot').antonyms()#hot对cold,中间的词性标记为a,而不是n或v
[Lemma('cold.a.01.cold')]
>>>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」