如何使用NLTK获取多个单词的同义词?

时间:2019-03-23 02:10:08

标签: python python-3.x nlp nltk

我搜索了所有问题,仅提供了一个单词的同义词的方法,但是当我尝试使用for循环来获取多个单词的同义词时,它不起作用。

这是我的代码,但是无法正常工作。

str = "Action, Adventure, Drama"

def process_genre(str):
    for genre in str.split(","):
        result = []
        for syn in wordnet.synsets(genre):
            for l in syn.lemmas():
                result.append(l.name())
        print(result)
process_genre(str)

这是输出

['action', 'action', 'activity', 'activeness', 'military_action', 'action', 'natural_process', 'natural_action', 'action', 'activity', 'action', 'action', 'action', 'action_mechanism', 'legal_action', 'action', 'action_at_law', 'action', 'action', 'action', 'sue', 'litigate', 'process', 'carry_through', 'accomplish', 'execute', 'carry_out', 'action', 'fulfill', 'fulfil']
[]
[]

AdventureDrama的列表显示为空,应该具有其同义词。

有人可以向我解释为什么吗?有没有办法重置它?还是...?

1 个答案:

答案 0 :(得分:0)

我认为问题在于您的输入。 ,之后有多余的空格,因此当您在,上拆分时,您的单词会变成["Action", " Adventure"," Drama"]

在wordnet中,没有AdventureDrama这样的单词(请注意单词开头的空格)。这就是为什么您没有获得第二个和第三个单词的输出的原因。

解决您的输入问题

分割为", "而不是","

str = "Action, Adventure, Drama"

def process_genre(str):
    for genre in str.split(", "):
        result = []
        for syn in wordnet.synsets(genre):
            for l in syn.lemmas():
                result.append(l.name())
        print(result)
process_genre(str)

输出:

['action', 'action', 'activity', 'activeness', 'military_action', 'action', 'natural_process', 'natural_action', 'action', 'activity', 'action', 'action', 'action', 'action_mechanism', 'legal_action', 'action', 'action_at_law', 'action', 'action', 'action', 'sue', 'litigate', 'process', 'carry_through', 'accomplish', 'execute', 'carry_out', 'action', 'fulfill', 'fulfil']
['adventure', 'escapade', 'risky_venture', 'dangerous_undertaking', 'gamble', 'chance', 'risk', 'hazard', 'take_chances', 'adventure', 'run_a_risk', 'take_a_chance', 'venture', 'hazard', 'adventure', 'stake', 'jeopardize']
['play', 'drama', 'dramatic_play', 'drama', 'dramatic_event', 'drama', 'drama']