0

假设我有两个小字典

posList=['有趣','小说','创意','state-of-the-art']

negList=['过时','直截了当','琐碎']

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

开始输入可能是这样的:

从 nltk.corpus 导入 wordnet 创新 = wordnet.synsets('innovative')

对于创新的同义词集:

print synset

print synset.lemmas

它产生这样的输出

Synset('advanced.s.03') [引理('advanced.s.03.advanced'), 引理('advanced.s.03.forward-looking'), 引理('advanced.s.03.innovative' ), 引理('advanced.s.03.modern')] Synset('innovative.s.02') [引理('innovative.s.02.innovative'), 引理('innovative.s.02.innovational' ), 引理('innovative.s.02.grounddriving')]

显然,新词包括“先进”、“前瞻性”、“现代”、“创新”、“开创性”是新词,不在我的字典里,所以现在我应该用这些词作为开始再次调用同义词函数,直到没有新的引理词出现。任何人都可以给我一个演示代码,如何从 Synset 中提取这些引理词并将它们保存在一个集合中?

我认为它涉及处理 Python 中的 re 模块,但我对 Python 还是很陌生。我需要解决的另一点是我只需要形容词,所以引理中只有's'和'a'符号('advanced.s.03.modern'),而不是'v'(动词)或'n '(名词)。

稍后我会尝试计算一个新单词与任何字典单词的相似度分数,我需要定义度量。这个问题很困难,因为根据我的知识,形容词不是按层次结构排列的,也没有可用的度量。任何人都可以建议?

4

1 回答 1

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 中缺少很多同义词。

于 2013-02-25T13:50:38.890 回答