Python使用wordnet提取同义词并合并为无重复单一列表问题
解决方案
你现有代码的问题主要出在结果存储的作用域错误、无全局汇总逻辑、缺少去重步骤三点:
result列表定义在单词遍历循环内部,每处理一个新单词就会清空之前的同义词结果- 每次遍历单个synset就执行打印,导致结果分批输出且重复多次
- 没有统一的去重逻辑,同一个同义词会被不同词义的synset多次加入列表
修正后可直接运行的代码
from nltk.corpus import wordnet str_1 = "Help, Describe, AI, biology, data, machine learning, country" # 用set存储自动去重,且保留大小写差异(符合你输出中同时存在AI、ai的要求) synonym_set = set() def process_genre(input_str): for genre in input_str.split(", "): for syn in wordnet.synsets(genre): for l in syn.lemmas(): synonym_set.add(l.name()) # 转成排序后的列表,和你期望的输出格式一致 return sorted(synonym_set) # 执行函数并打印结果 final_synonyms = process_genre(str_1) print(final_synonyms)
运行说明
- 首次运行如果提示wordnet不存在,先执行
nltk.download('wordnet')下载语料库即可 - 用set存储自动完成去重,不会合并大小写不同的同义词,完全符合你给出的期望输出格式
- 最终返回的是包含所有单词同义词的单一有序列表,可直接和初始词库合并用于后续NLP任务
注:原输入中的
machine learning在WordNet语料库中没有对应synset,所以不会返回同义词,属于正常情况。
内容的提问来源于stack exchange,提问作者Zion
相关产品推荐
相关产品推荐

