假设我有一个单词 A 和一个单词 B,其中我使用 B 作为暗示,暗示 A 的含义。例如,A = bass,B = music,给定这个词对,作为人类我们可以立即知道什么A这个词是什么意思。
我知道有很多算法适用于句子。我想知道是否已经开发了仅针对一对单词进行 WSD 的算法。
假设我有一个单词 A 和一个单词 B,其中我使用 B 作为暗示,暗示 A 的含义。例如,A = bass,B = music,给定这个词对,作为人类我们可以立即知道什么A这个词是什么意思。
我知道有很多算法适用于句子。我想知道是否已经开发了仅针对一对单词进行 WSD 的算法。
Word Sense Disambiguation (WSD) 是在给定上下文句子/文档的情况下消除单词歧义的任务。在这种情况下,对于两个标记短语,上下文基本上是另一个标记。
您可以尝试不同的 WSD 软件,这里有一个列表:有人知道一些好的词义消歧软件吗?
我会给你一个使用pywsd
(https://github.com/alvations/pywsd)的例子:
$ wget https://github.com/alvations/pywsd/archive/master.zip
$ unzip master.zip
$ cd pywsd-master
$ python
Python 2.7.5+ (default, Feb 27 2014, 19:37:08)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from lesk import simple_lesk
# disambiguating the word 'bass' given the context 'bass music'
>>> simple_lesk('bass music', 'bass')
Synset('bass.n.07')
>>> disambiguated = simple_lesk('bass music', 'bass')
>>> disambiguated.definition
<bound method Synset.definition of Synset('bass.n.07')>
>>> disambiguated.definition()
u'the member with the lowest range of a family of musical instruments
NLTK
或者,您可以在( https://github.com/nltk/nltk/blob/develop/nltk/wsd.py )中使用新模块,前提是您拥有最先进的版本:
from nltk.wsd import lesk
disambiguated = lesk(context_sentence="bass music", ambiguous_word="bass")
print disambiguated.definition()
(免责声明:我写了两个pywsd
和lesk
模块NLTK
)