如何将主题、词汇、得分输出保存为三列结构的DataFrame
实现方法
你拿到的主题模型输出不管是结构化的接口返回对象,还是控制台打印的文本,都可以通过打平嵌套结构的方式快速转成要求的三列DataFrame,具体操作如下:
场景1:原始输出是结构化的字典/列表格式(直接调用模型接口返回的结果)
这类结果一般是「主题编号: [(词汇1, 得分1), (词汇2, 得分2)...]」的嵌套结构,直接遍历打平即可:
import pandas as pd # 替换成你自己的主题输出结果 topic_result = { 0: [("算法", 0.045), ("模型", 0.032), ("训练", 0.028), ("数据", 0.021)], 1: [("产品", 0.039), ("用户", 0.034), ("需求", 0.026), ("运营", 0.022)], 2: [("性能", 0.041), ("功耗", 0.030), ("散热", 0.025), ("配置", 0.019)] } data_list = [] for topic_id, word_score_pairs in topic_result.items(): # 主题名可以按需调整命名规则,这里默认按「主题+序号」生成 topic_name = f"主题{topic_id + 1}" for word, score in word_score_pairs: data_list.append({ "a列:主题名": topic_name, "b列:词汇": word, "c列:得分": score }) df = pd.DataFrame(data_list)
场景2:原始输出是控制台打印的文本格式(和参考示例的打印样式一致)
如果是复制的控制台打印结果,用正则提取对应字段即可,不需要手动整理:
import pandas as pd import re # 替换成你复制的原始打印文本 raw_print_text = """ 0 0.032*"订单" + 0.028*"配送" + 0.021*"客服" + 0.019*"物流" 1 0.041*"价格" + 0.035*"优惠" + 0.027*"性价比" + 0.022*"活动" 2 0.038*"质量" + 0.029*"做工" + 0.024*"材质" + 0.018*"瑕疵" """ data_list = [] for line in raw_print_text.strip().split("\n"): if not line: continue # 拆分主题编号和后续词汇得分段 topic_id, content_part = line.split(maxsplit=1) topic_name = f"主题{int(topic_id) + 1}" # 正则匹配所有「得分*"词汇"」格式的片段 match_pairs = re.findall(r'(\d+\.\d+)\*"([^"]+)"', content_part) for score, word in match_pairs: data_list.append({ "a列:主题名": topic_name, "b列:词汇": word, "c列:得分": float(score) }) df = pd.DataFrame(data_list)
- 生成的
df直接满足三列要求,每一行对应单个主题下的一个词汇及其权重,后续排序、筛选、导出都可以直接基于这个DataFrame操作。 - 如果主题名需要自定义命名,只要把代码里生成
topic_name的部分替换成你自己的命名映射规则就行。
内容的提问来源于stack exchange,提问作者Noob Coder
相关产品推荐
相关产品推荐

