假设我有单词A和单词B,其中B作为暗示,用来表明A的含义。例如,A = bass(鲈鱼/低音),B = music(音乐),给定这个词对,作为人类我们可以立即知道单词A的意思。
我知道有很多算法适用于句子。我想知道是否有专门为词对进行词义消歧的算法开发出来。
回答:
词义消歧(WSD)是根据给定的上下文句子/文档来消除单词歧义的任务。在两个词的短语的情况下,上下文基本上就是另一个词。
你可以尝试不同的WSD软件,这里有一个列表:有人知道一些好的词义消歧软件吗?
我将使用pywsd
给你举个例子(https://github.com/alvations/pywsd):
$ wget https://github.com/alvations/pywsd/archive/master.zip$ unzip master.zip$ cd pywsd-master$ pythonPython 2.7.5+ (default, Feb 27 2014, 19:37:08) [GCC 4.8.1] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> from lesk import simple_lesk# 给定上下文'bass music'消歧单词'bass'>>> 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 leskdisambiguated = lesk(context_sentence="bass music", ambiguous_word="bass")print disambiguated.definition()
(免责声明:我编写了pywsd
和NLTK
中的lesk
模块)