【发布时间】: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)
【问题讨论】:
-
为什么“长辈”最好? (即判断最佳的标准是什么,或者你用什么算法来决定这个?)(顺便说一句,我认为“老大哥”是“哥哥”的最佳同义词,但你甚至没有得到在您的列表中!)