检查两个单词集之间是否有任何同义词

时间:2017-02-24 19:12:00

标签: python nltk

我需要从句子中找到给定单词的同义词。例如

list1 = ['happy']
list2 = ['It', 'is', 'so', 'funny']

在这里,我需要找到是否有任何同义词' happy' list2中的单词并打印出来。我是Python的新手。我是通过以下代码尝试的。

from nltk.corpus import wordnet
list1 = ['happy']
list2 = ['It', 'is', 'so', 'funny']
list = []

for word1 in list1:
 for word2 in list2:
    wordFromList1 = wordnet.synsets(word1)
    wordFromList2 = wordnet.synsets(word2)
    if wordFromList1 and wordFromList2:
       s = wordFromList1[0].word1.lemmas(wordFromList2[0])
       s = wordFromList1[0].word2.lemmas(wordFromList2[0])
    list.append(s)

    print((list))

但它不起作用。请帮帮我。

1 个答案:

答案 0 :(得分:1)

当您使用wordnet.synsets("happy")时,它会返回包含部分语音信息和ID的synset条目(例如Synset('happy.a.01'))。您需要在此使用lemma_names()来获取实际的单词表单。试试这个:

from nltk.corpus import wordnet

def get_word_synonyms_from_sent(word, sent):
    word_synonyms = []
    for synset in wordnet.synsets(word):
        for lemma in synset.lemma_names():
            if lemma in sent and lemma != word:
                word_synonyms.append(lemma)
    return word_synonyms

word = "happy"
sent = ['I', 'am', 'glad', 'it', 'was', 'felicitous', '.']
word_synonyms = get_word_synonyms_from_sent(word, sent)
print ("WORD:", word)
print ("SENTENCE:", sent)
print ("SYNONYMS FOR '" + word.upper() + "' FOUND IN THE SENTENCE: " + ", ".join(word_synonyms))

# OUTPUT
# >>> WORD: happy
# >>> SENTENCE: ['I', 'am', 'glad', 'it', 'was', 'felicitous', '.']
# >>> SYNONYMS FOR 'HAPPY' FOUND IN THE SENTENCE: felicitous, glad