WordNet介绍和使用

Wordnet是一个词典。每个词语(word)可能有多个不同的语义,对应不同的sense。而每个不同的语义(sense)又可能对应多个词,如topicsubject在某些情况下是同义的,一个sense中的多个消除了多义性的词语叫做lemma。例如,“publish”是一个word,它可能有多个sense

1. (39) print, publish -- (put into print; "The newspaper published the news of the royal couple's divorce"; "These news should not be printed")

2. (14) publish, bring out, put out, issue, release -- (prepare and issue for public distribution or sale; "publish a magazine or newspaper")

3. (4) publish, write -- (have (one's written work) issued for publication; "How many books did Georges Simenon write?"; "She published 25 books during her long career")

 

在第一个sense中,printpublish都是lemmaSense 1括号内的数字39表示publishsense 1在某外部语料中出现的次数。显然,publish大多数时候以sense 1出现,很少以sense 3出现。

 

WordNet的具体用法

NLTKpython的一个自然语言处理工具,其中提供了访问wordnet各种功能的函数。下面简单列举一些常用功能:

 

得到wordnet本身:

from nltk.corpus import wordnet

 

获得一个词的所有sense,包括词语的各种变形的sense

wordnet.synsets('published')

[Synset('print.v.01'),

 Synset('publish.v.02'),

 Synset('publish.v.03'),

 Synset('published.a.01'),

 Synset('promulgated.s.01')]

 

得到synset的词性:

>>> related.pos

's'

 

得到一个sense的所有lemma

>>> wordnet.synsets('publish')[0].lemmas

[Lemma('print.v.01.print'), Lemma('print.v.01.publish')]

 

得到Lemma出现的次数:

>>> wordnet.synsets('publish')[0].lemmas[1].count()

39

 

wordnet中,名词和动词被组织成了完整的层次式分类体系,因此可以通过计算两个sense在分类树中的距离,这个距离反应了它们的语义相似度:

>>> x = wordnet.synsets('recommended')[-1]

>>> y = wordnet.synsets('suggested')[-1]

>>> x.shortest_path_distance(y)

0

 

形容词和副词的相似度计算方法:

形容词和副词没有被组织成分类体系,所以不能用path_distance

>>> a = wordnet.synsets('beautiful')[0]

>>> b = wordnet.synsets('good')[0]

>>> a.shortest_path_distance(b)

-1

形容词和副词最有用的关系是similar to

>>> a = wordnet.synsets('glorious')[0]

>>> a.similar_tos()

[Synset('incandescent.s.02'),

 Synset('divine.s.06'),

……]

 

 

03-21
### WordNet 的基本介绍及其在自然语言处理中的使用 WordNet 是一种基于认知语言学的英语词典,由 Princeton 大学的心理学家、语言学家计算机工程师联合设计[^1]。它不仅按字母顺序排列单词,还根据单词的意义构建了一个“单词的网络”。因此,WordNet 可以看作是一个语义数据库,其中包含了大量关于词语关系的信息。 #### 使用 NLTK 库访问 WordNet Python 中常用的自然语言处理工具包 `NLTK` 提供了对 WordNet 的便捷接口。以下是使用 WordNet 进行同义词查询、反义词查询以及词性标注的一些基础方法: ```python from nltk.corpus import wordnet as wn # 查询某个单词的同义词集(Synset) synsets = wn.synsets('beautiful') print(f"Beautiful 的 Synsets: {synsets}") # 获取特定 Synset 的定义 definition = synsets[0].definition() print(f"Definition of 'beautiful': {definition} [{synsets[0]}]") # 查找同义词 lemmas = synsets[0].lemmas() synonyms = [lemma.name() for lemma in lemmas] print(f"Synonyms of 'beautiful': {synonyms}") # 查找反义词 antonyms = [] for lemma in lemmas: antonym_lemmas = lemma.antonyms() antonyms.extend([antonym.name() for antonym in antonym_lemmas]) print(f"Antonyms of 'beautiful': {list(set(antonyms))}") ``` 上述代码展示了如何利用 WordNet 来获取单词的 **同义词** **反义词**。通过 `wn.synsets()` 方法可以找到与目标单词相关的所有意义集合 (Synsets),而每个 Synset 都可以通过 `.lemmas()` 获得其对应的词形变体[^3]。 #### 解决独热编码的数据稀疏问题 在自然语言处理中,传统的独热编码方式存在严重的数据稀疏问题,即即使两个词具有相似含义,但由于它们被表示为完全不同且独立的向量,计算得到的相似度可能接近于零[^4]。为此,研究人员提出了多种改进方案,其中包括引入像 WordNet 这样的外部资源来增强模型对语义的理解能力。例如,通过对同义词或近义词赋予相同的上下文特征权重,可以在一定程度上缓解这一问题。 --- ### 示例应用场景 假设我们正在开发一个情感分析系统,并希望扩展词汇表以覆盖更多的正面情绪描述词,则可以借助 WordNet 找到已知种子词 ("happy", "joyful") 的相关联项并加入训练集中。这种方法能够有效提升系统的泛化性能。 ```python def expand_vocabulary(seed_words): expanded_set = set(seed_words) for word in seed_words: for synset in wn.synsets(word): for lemma in synset.lemmas(): expanded_set.add(lemma.name()) return list(expanded_set) positive_seeds = ['happy', 'joyful'] expanded_positive_vocab = expand_vocabulary(positive_seeds) print(f"Expanded Positive Vocabulary: {expanded_positive_vocab}") ``` 此脚本会递归遍历给定初始列表内的每一个词条所关联的所有其他潜在候选者,最终返回扩充后的完整字汇清单。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值