2013-02-14 48 views
0

一个新词假设我有两个小词典递归提取同义词从NLTK

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

negList = [''过时','简单','平凡']

我有一个新词,说“创新”,这是我的知识,我试图找出它的情绪,通过找出它同义词通过NLTK函数,如果同义词掉出我的小字典,那么我递归地调用NLTK函数从上次查找同义词的同义词

起始输入可以是这样的:

从nltk.corpus进口的WordNet 创新= wordnet.synsets( '创新')

为同义词集创新:

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') [引理('innovation.s.02.innovative'),引理('创新。 '创新','开创性','创新','创新','创新'),引理('innovation.s.02.groundbreaking')]

明显的新词包括'advanced','forward-looking'是新词,而不是在我的词典中,所以现在我应该使用这些词作为开始再次调用synsets函数,直到没有新的词条词出现。 任何人都可以给我一个演示代码,如何从Synset中提取这些词条单词,并将它们保存在设置的strcutre中?

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

后来我会尝试使用任何字典词计算新单词的相似度分数,我需要定义该度量。这个问题是困难的,因为形容词没有按照我的知识排列,没有可用的措施。任何人都可以建议?

回答

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的所有语义测量功能是基于上位词/下义词的层次结构,使它们不能被应用到的形容词。此外,如果您将结果与类似词库的结果进行比较,我发现WordNet中缺少许多同义词,如thesaurus.com.