基于Pandas与Top2Vec构建主题聚类DataFrame的技术实现及代码修正
修正后的主题聚类结果DataFrame实现方案
常见错误修正点
- 维度不匹配:确保每个主题的信息列表长度统一(3个词汇+3个文档+3个得分=9个元素),避免DataFrame转换时报错
- 索引逻辑错误:提取TopN相似项时,需对排序结果逆序,保证首位是最相似的内容
- 列名对应错误:列名数量要与每行数据元素数完全一致,避免列名缺失或多余
模拟数据快速实现代码
如果已有预计算好的主题相似数据,可直接构建二维列表转换为DataFrame:
import pandas as pd # 模拟每个主题的Top3词汇、文档及相似度得分 # 每行结构:[Top1词, Top2词, Top3词, Top1文档, Top2文档, Top3文档, 得分1, 得分2, 得分3] topic_data = [ ["机器学习", "深度学习", "神经网络", "文档A:AI算法综述", "文档B:CNN实践", "文档C:Transformer原理", 0.92, 0.88, 0.85], ["自然语言处理", "分词", "命名实体识别", "文档D:NLP入门指南", "文档E:中文分词实践", "文档F:NER模型对比", 0.90, 0.87, 0.83], ["计算机视觉", "图像分类", "目标检测", "文档G:CV基础教程", "文档H:ResNet详解", "文档I:YOLO实战", 0.95, 0.91, 0.89] ] # 定义列名 columns = [ "Top1词汇", "Top2词汇", "Top3词汇", "Top1文档", "Top2文档", "Top3文档", "Top1相似度", "Top2相似度", "Top3相似度" ] # 转换为DataFrame topic_df = pd.DataFrame(topic_data, columns=columns) # 查看结果 print(topic_df)
基于LDA聚类模型的实战代码
如果需要从聚类模型(如LDA)中自动提取相似项,修正后的可运行代码如下:
from sklearn.decomposition import LatentDirichletAllocation from sklearn.feature_extraction.text import CountVectorizer import numpy as np import pandas as pd # 模拟文档数据集 docs = [ "机器学习 深度学习 神经网络 AI算法", "深度学习 神经网络 CNN实践", "Transformer原理 深度学习", "自然语言处理 分词 命名实体识别", "中文分词实践 自然语言处理", "NER模型对比 命名实体识别", "计算机视觉 图像分类 目标检测", "ResNet详解 图像分类", "YOLO实战 目标检测" ] # 文本向量化处理 vectorizer = CountVectorizer() doc_term_matrix = vectorizer.fit_transform(docs) # 训练LDA聚类模型(3个主题) lda = LatentDirichletAllocation(n_components=3, random_state=42) lda.fit(doc_term_matrix) # 获取词汇表 feature_names = vectorizer.get_feature_names_out() # 构建主题数据二维列表 topic_data = [] for topic_idx, topic in enumerate(lda.components_): # 提取当前主题Top3相似词汇 top_word_indices = topic.argsort()[-3:][::-1] # 逆序取最大的3个索引 top_words = [feature_names[idx] for idx in top_word_indices] # 计算每个文档与当前主题的相似度(余弦相似度简化计算) doc_topic_sim = np.dot(doc_term_matrix.toarray(), topic) # 提取Top3相似文档及对应得分 top_doc_indices = doc_topic_sim.argsort()[-3:][::-1] top_docs = [docs[idx] for idx in top_doc_indices] top_scores = [round(doc_topic_sim[idx], 2) for idx in top_doc_indices] # 拼接当前主题的所有信息,加入列表 topic_row = top_words + top_docs + top_scores topic_data.append(topic_row) # 定义列名 columns = [ "Top1词汇", "Top2词汇", "Top3词汇", "Top1文档", "Top2文档", "Top3文档", "Top1相似度", "Top2相似度", "Top3相似度" ] # 转换为DataFrame topic_df = pd.DataFrame(topic_data, columns=columns) print(topic_df)
内容的提问来源于stack exchange,提问作者Альона Асєєва
相关产品推荐
相关产品推荐

