来自NLTK的新单词的递归提取同义词

时间:2013-02-14 18:50:37

标签: python module nltk

假设我有两个小词典

posList = [ '有趣', '新颖', '广告素材', '状态的最先进的']

negList = [ '过时的', '直接的', '琐碎']

我有一个新词,说“创新”,这是我所不知道的,我试图通过NLTK函数找出它的同义词来弄清楚它的情绪,如果同义词掉出我的小词典,那么我递归调用NLTK函数来查找上次的同义词的同义词

开始输入可能是这样的:

来自nltk.corpus导入wordnet innov = wordnet.synsets('innovative')

创新中的synset:

print synset

print synset.lemmas

它产生这样的输出

同义词集( 'advanced.s.03') [引理('advanced.s.03.advanced'),引理('advanced.s.03.forward-looking'),引理('advanced.s.03.innovative'),引理('advanced.s.03 。现代')] 同义词集( 'innovative.s.02') [Lemma('innovative.s.02.innovative'),Lemma('innovative.s.02.innovational'),Lemma('innovative.s.02.sgroundbreaking')]

显然,新词包括'高级','前瞻性','现代','创新','开创性'是新词而不在我的词典中,所以现在我应该用这些词作为开始调用synsets再次起作用直到没有新的引理词出现。 任何人都可以给我一个演示代码如何从Synset中提取这些引理词并将它们保存在一个strcutre中?

它涉及在Python中处理re模块我想但我对Python很新。我需要解决的另一点是,我只需要获得形容词,因此引理中只有's'和'a'符号('advanced.s.03.modern'),而不是'v'(动词)或'n '(名词)。

稍后我会尝试使用任何字典单词计算新单词的相似性得分,我需要定义该度量。这个问题很难,因为根据我的知识,不是按层次方式排列的,而是没有可用的措施。有人可以提供建议吗?

1 个答案:

答案 0 :(得分:0)

您可以按如下方式获取同义词的同义词。 (请注意,代码使用NodeBox Linguistics库的WordNet功能,因为它可以更轻松地访问WordNet)。

def get_remote_synonyms(s, pos):

    if pos == 'a':
        syns = en.adjective.senses(s)
        if syns:
            allsyns = sum(syns, [])
            # if there are multiple senses, take only the most frequent two 
            if len(syns) >= 2:
                syns = syns[0] + syns[1]
            else:
                syns = syns[0]
        else:
            return [] 

        remote = []
        for syn in syns: 
            newsyns = en.adjective.senses(syn)
            remote.extend([r for r in newsyns[0] if r not in allsyns])

    return [unicode(i) for i in list(set(remote))]

据我所知,NLTK的所有语义测量功能都是基于上位词/下位词层次结构,因此它们不能应用于形容词。此外,如果你把它的结果与像thesaurus.com.

这样的同义词库的结果进行比较,我发现WordNet中有很多同义词需要丢失。