从NLTK中递归提取新词的同义词



假设我有两个小字典

posList=['感兴趣','新','创造性','最新']

negList=["过期","直接向前","私人"]

我有一个新词,说"创新",这是我所不知道的,我正试图通过NLTK函数找出它的同义词来了解它的情感,如果同义词从我的小词典中掉了出来,那么我递归地调用NLTK函数来找出上次中同义词的同义词

启动输入可以是这样的:

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

用于synset的创新:

print synset
print synset.lemmas

它产生类似的输出

Synset('advanced.s.03')[引理(‘advanced.s.03.advanced’)、引理(’advanced.s.03.prospective’Synset('novative.s.02')引理

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

我认为这涉及到处理Python中的重新模块,但我对Python还很陌生。我需要指出的另一点是,我只需要得到形容词,所以在引理中只有"s"one_answers"a"符号("advanced.s.03.modern"),而不是"v"(动词)或"n"(名词)。

后来我会尝试计算一个新词与任何词典单词的相似性得分,我需要定义度量。这个问题很难解决,因为根据我的知识,形容词没有按层次排列,也没有可用的衡量标准。有人可以建议吗?

您可以获得同义词的同义词,如下所示。(请注意,该代码使用NodeBox语言学库的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的所有语义测量功能都是基于上假名/下假名层次结构的,因此它们不能应用于形容词。此外,如果你将WordNet的结果与同义词库(如同义词库)的结果进行比较,我发现WordNet中缺少很多同义词。

最新更新