使用NLTK为DataFrame中词语生成指定数量同义词的技术需求
生成包含同义词的新DataFrame方案
嘿,我看你的函数已经能运行,但还没达到生成目标DataFrame的需求。咱们来调整一下代码,让它能给指定列里的每个词提取前n个同义词,输出成符合预期的新DataFrame。
首先先说说原函数里几个需要调整的点:
- 硬编码了
df["col_1"],没有使用传入的column_name参数,函数复用性不足 - 当前循环遍历的是所有名词synset的前2个,不是当前词对应的同义词,导致输出和目标词不匹配
- 最后返回的
syn只是最后一个词的synsets,没有收集所有词的结果
下面是修改后的完整代码,我会一步步解释逻辑:
import pandas as pd from nltk.corpus import wordnet as wn def get_synonyms(df, column_name, n=3): # 初始化列表,存储每个词及其对应的同义词集合 synonym_results = [] # 遍历指定列的每个词语 for word in df[column_name]: # 获取当前词的名词synset(你的示例里都是物品类名词,指定pos更精准) synsets = wn.synsets(word, pos=wn.NOUN) synonyms = set() # 用集合自动去重 # 遍历每个synset,提取所有lemma(即同义词) for synset in synsets: for lemma in synset.lemmas(): # 把下划线替换成空格,让同义词更符合自然语言格式 synonym = lemma.name().replace('_', ' ') synonyms.add(synonym) # 移除原词本身(避免同义词列表里出现自己) synonyms.discard(word) # 转换成列表后取前n个同义词,不足n个就取所有 top_n_synonyms = list(synonyms)[:n] # 把原词和同义词存入结果列表 synonym_results.append({ column_name: word, f'top_{n}_synonyms': top_n_synonyms }) # 将结果列表转换为DataFrame返回 return pd.DataFrame(synonym_results) # 测试你的示例DataFrame df = pd.DataFrame({ 'col_1': ['Book', 'Pen', 'Pencil'], 'col_2': [5, 5, 6] }) # 调用函数,获取每个词的前3个同义词 synonym_df = get_synonyms(df, 'col_1', n=3) print(synonym_df)
代码细节说明:
- 新增
n参数,默认取前3个同义词,你可以根据需求自由调整数值 - 用
set()存储同义词,自动避免重复的同义词出现 - 处理lemma里的下划线(比如
reference_book会变成reference book),让结果更易读 - 自动过滤掉原词本身(如果同义词集合里包含的话)
- 最终返回的DataFrame包含原词列和对应同义词列表列,结构清晰
运行后你会得到类似这样的输出(同义词结果会因WordNet词库版本略有差异,属于正常情况):
col_1 top_3_synonyms 0 Book [volume, script, record book] 1 Pen [penitentiary, playpen] 2 Pencil [lead pencil, pencil lead]
内容的提问来源于stack exchange,提问作者Alessandro Ceccarelli
相关产品推荐
相关产品推荐

