You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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,提问作者Альона Асєєва

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:36:02