【问题标题】:Get best synonym for words in sentences using wordnet使用 wordnet 获得句子中单词的最佳同义词
【发布时间】:2017-05-25 19:00:11
【问题描述】:

我已经完成了从 wordnet 获取同义词的代码,它为每个单词提供了完整的同义词列表。 所以,我希望我的代码根据句子从同义词列表中选择适当的同义词。

例如: 句子是:“我是他的哥哥”,我要根据这句话找出每个词的最佳同义词。

让我们选择“老”。 Wordnet 会给出“older”的同义词列表:

['elder', 'onetime', 'former', 'sr.', 'one-time', 'erstwhile', '诚实的上帝', '老', '老', 'previous', '当然', 'older', 'senior', 'old', 'sometime', 'honest-to-goodness', 'quondam', 'elderly']

从基于这句话的列表中最好的同义词是'elder',所以应该选择它。

我该怎么做?

获取同义词的代码:

from nltk.tokenize import word_tokenize
from nltk.tag import pos_tag
from nltk.corpus import wordnet as wn

def tag(sentence):
 words = word_tokenize(sentence)
 words = pos_tag(words)
 return words

def paraphraseable(tag):
 return tag.startswith('NN') or tag == 'VB' or tag.startswith('JJ')

def pos(tag):
 if tag.startswith('NN'):
  return wn.NOUN
 elif tag.startswith('V'):
  return wn.VERB

def synonyms(word, tag):
    lemma_lists = [ss.lemmas() for ss in wn.synsets(word, pos(tag))]
    lemmas = [lemma.name() for lemma in sum(lemma_lists, [])]
    return set(lemmas)

def synonymIfExists(sentence):
 for (word, t) in tag(sentence):
   if paraphraseable(t):
    syns = synonyms(word, t)
    if syns:
     if len(syns) > 1:
      yield [word, list(syns)]
      continue
   yield [word, []]

def paraphrase(sentence):
 return [x for x in synonymIfExists(sentence)]
get=[]
get=paraphrase("I am his older brother")
print("paraphrase",get)

【问题讨论】:

  • 为什么“长辈”最好? (即判断最佳的标准是什么,或者你用什么算法来决定这个?)(顺便说一句,我认为“老大哥”是“哥哥”的最佳同义词,但你甚至没有得到在您的列表中!)

标签: python nlp nltk wordnet


【解决方案1】:

无论它们在自然语言和给定上下文中出现的频率如何,都会列出同义词集中的同义词。 为了进一步探索这两个缺失的区域,我会使用双元词预测模型并检查同义词集中的哪些单词出现在您想要替换的话语的左侧上下文旁边。同样,您可以探索右侧上下文为良好和/或更长的上下文。

另一种(更简单)的方法是根据来自足够大的语料库的词频向 WordNet 引入频率顺序。假设语料库中出现的频率是感知同义词适用性的正确提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多