我已经完成了从wordnet获取同义词的代码,它提供了每个单词的同义词的完整列表。 所以,我希望我的代码根据句子从同义词列表中选择适当的同义词。
例如: 句子是:“我是他的哥哥”,我必须根据这句话找出每个单词的最佳同义词。
让我们选择“较旧”。 Wordnet将为“较旧”提供同义词列表:
['elder','onetime','former','sr。','one-time','erstwhile','honest-to-god','old','Old', '以前','肯定够','老','高级','老','有时','诚实到善','quondam','老人']
从列表中,基于这句话的最佳同义词是'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)
答案 0 :(得分:2)
列出了synsets中的同义词,无论它们在自然语言和给定上下文中的出现频率如何。 为了更好地探索这两个缺失区域,我会选择双向预测模型,并检查synset中的哪些单词出现在您想要替换它的话语左侧上下文旁边。同样,您可以探索正确的上下文好的和/或更长的背景。
另一种(更简单的)方法是基于来自足够大的语料库的词频将频率顺序引入WordNet。假设语料库中出现的频率是对同义词的感知适用性的正确暗示。