• 主题聚类模型


    因为需要对文件的主题,做聚类分析,得到本体或者文件所属类别,尝试了现有的两种非常常用的聚类手段,K-means均值聚类和LDA主题聚类模型(主题-词语,文件-主题分布)
    可参考资料:
    LDA模型:https://blog.csdn.net/baidu_15113429/article/details/79959261
    (https://blog.csdn.net/accumulate_zhang/article/details/62453672)

    实现效果

    文件总数量为26
    数据格式为:data_set=[[],[],[]],类似于如下(二元列表,每个子列表存放每个文件分词后得到的列表)

    data_set [['载人', '航天', '工程', '专项', '标准', '载人', '航天', '工程', '有效载荷', '生物', '通用', '发布', '实施', '中国', '载人', '航天', '工程', '办公室', '批准', '前言', '标准', '附录', '资料性', '附录', '标准'], ['中国', '载人', '航天', '工程', '办公室', '提出', '标准', '载人', '航天', '工程', '标准化', '管理', '咨询中心', '归口', '标准', '起草', '单位',  '飞行', '动物', '植物', '实验', '样品', '飞行', '确认', '实验', '样品', '包含', '生物', '危害', '凡不注', '日期', '版次', '引用', '文件', '最新', '版本', '于本', '标准', '工作', '场所', '物理', '因素', '测量', '紫外', '辐射'],[ '声学', '测量', '常用', '频率', '声学', '倍频程', '分数',  '安装', '到位', '测量', '接地', '电阻', '满足要求', '设备', '自带', '接地', '螺钉', '涂胶', '拧紧', '设备', '优先', '安装', '面来', '接地', '电阻', '满足要求', '轻微', '打磨', '设备', '支架', '安装', '方法', '加以解决', '搭接', '设备', '舱体', '安装', '打磨', '安装', '安装', '后应', '实测']]
    
    • 1

    K-means

    在这里插入图片描述
    在这里插入图片描述

    LDA聚类

    在这里插入图片描述

    每个主题输出15个单词
    [(0, ‘0.026*“标准” + 0.021*“测量” + 0.021*“偏差” + 0.017*“测试” + 0.013*“磁带” + 0.013*“螺旋线” + 0.013*“借用” + 0.012*“样板” + 0.012*“单位” + 0.011*“弹簧” + 0.011*“记录” + 0.011*“渐开线” + 0.009*“校准” + 0.008*“仪器” + 0.007*“工作”’), (1, ‘0.011*“测试” + 0.009*“润滑” + 0.006*“磁带” + 0.006*“记录” + 0.006*“附录” + 0.005*“试验” + 0.005*“项目” + 0.005*“软件” + 0.005*“设计” + 0.005*“工作” + 0.005*“标准” + 0.004*“固体” + 0.004*“文件” + 0.004*“方法” + 0.004*“输出”’), (2, ‘0.038*“软件” + 0.022*“测试” + 0.016*“文件” + 0.015*“计划” + 0.014*“保证” + 0.014*“标准” + 0.011*“设计” + 0.011*“评审” + 0.008*“程序” + 0.007*“验证” + 0.007*“包括” + 0.007*“活动” + 0.007*“方法” + 0.007*“代码” + 0.006*“质量保证”’), (3, ‘0.029*“软件” + 0.029*“项目” + 0.017*“仿真” + 0.014*“工作” + 0.013*“活动” + 0.012*“飞行器” + 0.011*“阶段” + 0.011*“参数” + 0.011*“报告” + 0.011*“过程” + 0.011*“系统” + 0.010*“方法” + 0.009*“试验” + 0.009*“计划” + 0.009*“一个”’), (4, ‘0.030*“软件” + 0.021*“测试” + 0.015*“项目” + 0.014*“附录” + 0.014*“设计” + 0.012*“标准” + 0.010*“需求” + 0.009*“内容” + 0.009*“列出” + 0.009*“说明书” + 0.009*“编写” + 0.009*“包括” + 0.008*“描述” + 0.008*“单位” + 0.008*“格式”’), (5, ‘0.038*“文件” + 0.020*“试验” + 0.019*“标准” + 0.012*“编号” + 0.010*“标准化” + 0.010*“内容” + 0.009*“示例” + 0.009*“设备” + 0.009*“引用” + 0.009*“要素” + 0.009*“温度” + 0.009*“产品” + 0.008*“工作” + 0.008*“附录” + 0.006*“等级”’), (6, ‘0.044*“试验” + 0.027*“锂电池” + 0.016*“试样” + 0.015*“陀螺” + 0.014*“规范” + 0.014*“符合” + 0.013*“方法” + 0.010*“相关” + 0.010*“附录” + 0.009*“详细” + 0.008*“检验” + 0.007*“工作” + 0.007*“单体” + 0.007*“速率” + 0.006*“温度”’), (7, ‘0.013*“公差” + 0.011*“尺寸” + 0.010*“样品” + 0.010*“检验” + 0.010*“材料” + 0.010*“未注” + 0.009*“测试” + 0.008*“标准” + 0.007*“有效载荷” + 0.007*“生物” + 0.007*“方法” + 0.007*“天线” + 0.007*“附录” + 0.007*“文件” + 0.006*“玻璃纤维”’), (8, ‘0.026*“文件” + 0.015*“润滑” + 0.011*“标准” + 0.010*“试验” + 0.008*“轴承” + 0.007*“单位” + 0.006*“测量” + 0.006*“内容” + 0.005*“设计” + 0.005*“技术” + 0.005*“要素” + 0.004*“标准化” + 0.004*“附录” + 0.004*“定义” + 0.004*“符合”’), (9, ‘0.013*“避雷器” + 0.009*“标准” + 0.008*“软件” + 0.007*“检验” + 0.005*“项目” + 0.005*“文件” + 0.005*“产品” + 0.004*“方法” + 0.004*“偏差” + 0.004*“工作” + 0.004*“试验” + 0.004*“单位” + 0.004*“测试” + 0.004*“附录” + 0.003*“电压”’)]
    [(0, ‘0.013*“文件” + 0.013*“试验” + 0.012*“软件” + 0.011*“标准” + 0.009*“项目” + 0.008*“测试” + 0.007*“工作” + 0.007*“方法” + 0.006*“附录” + 0.005*“产品”’)]
    -0.47413810004798995
    [(0, ‘0.014*“软件” + 0.013*“标准” + 0.012*“项目” + 0.010*“工作” + 0.010*“试验” + 0.009*“测试” + 0.007*“产品” + 0.007*“方法” + 0.007*“活动” + 0.006*“测量”’), (1, ‘0.021*“文件” + 0.015*“试验” + 0.010*“标准” + 0.010*“软件” + 0.009*“附录” + 0.007*“仿真” + 0.007*“测试” + 0.007*“内容” + 0.007*“方法” + 0.006*“项目”’)]
    -1.073599939236346
    [(0, ‘0.018*“标准” + 0.017*“试验” + 0.011*“测量” + 0.009*“偏差” + 0.009*“测试” + 0.008*“工作” + 0.008*“产品” + 0.007*“温度” + 0.007*“公差” + 0.006*“单位”’), (1, ‘0.019*“试验” + 0.011*“锂电池” + 0.011*“附录” + 0.008*“规范” + 0.007*“试样” + 0.007*“润滑” + 0.007*“方法” + 0.006*“设计” + 0.006*“测试” + 0.006*“材料”’), (2, ‘0.023*“文件” + 0.022*“软件” + 0.015*“项目” + 0.011*“标准” + 0.009*“测试” + 0.008*“工作” + 0.008*“仿真” + 0.008*“方法” + 0.007*“活动” + 0.007*“试验”’)]
    -1.3309857061994574
    [(0, ‘0.019*“标准” + 0.015*“试验” + 0.013*“测量” + 0.011*“偏差” + 0.008*“工作” + 0.008*“公差” + 0.008*“温度” + 0.007*“尺寸” + 0.007*“产品” + 0.007*“单位”’), (1, ‘0.019*“试验” + 0.011*“测试” + 0.011*“锂电池” + 0.010*“附录” + 0.009*“规范” + 0.007*“润滑” + 0.007*“设备” + 0.007*“方法” + 0.007*“符合” + 0.007*“试样”’), (2, ‘0.033*“文件” + 0.019*“软件” + 0.016*“标准” + 0.012*“测试” + 0.010*“内容” + 0.009*“编号” + 0.007*“保证” + 0.007*“标准化” + 0.007*“附录” + 0.007*“示例”’), (3, ‘0.026*“项目” + 0.020*“软件” + 0.016*“试验” + 0.016*“仿真” + 0.013*“工作” + 0.011*“飞行器” + 0.010*“方法” + 0.010*“参数” + 0.009*“报告” + 0.009*“阶段”’)]
    -2.0152637536605935
    [(0, ‘0.019*“标准” + 0.014*“试验” + 0.013*“测量” + 0.010*“偏差” + 0.008*“工作” + 0.008*“设备” + 0.008*“公差” + 0.008*“温度” + 0.008*“样品” + 0.008*“产品”’), (1, ‘0.014*“润滑” + 0.013*“试验” + 0.012*“规范” + 0.012*“检验” + 0.009*“陀螺” + 0.009*“符合” + 0.008*“附录” + 0.007*“轴承” + 0.007*“材料” + 0.007*“方法”’), (2, ‘0.032*“文件” + 0.017*“软件” + 0.015*“标准” + 0.015*“测试” + 0.008*“内容” + 0.008*“编号” + 0.008*“保证” + 0.007*“标准化” + 0.007*“示例” + 0.007*“要素”’), (3, ‘0.028*“项目” + 0.020*“软件” + 0.017*“仿真” + 0.014*“工作” + 0.014*“试验” + 0.012*“飞行器” + 0.011*“方法” + 0.011*“参数” + 0.010*“报告” + 0.009*“阶段”’), (4, ‘0.024*“试验” + 0.017*“锂电池” + 0.016*“软件” + 0.012*“附录” + 0.011*“测试” + 0.010*“试样” + 0.010*“标准” + 0.009*“设计” + 0.009*“项目” + 0.008*“文件”’)]
    -2.3854563881012996
    [(0, ‘0.022*“标准” + 0.021*“测量” + 0.016*“偏差” + 0.010*“螺旋线” + 0.009*“试验” + 0.009*“借用” + 0.009*“单位” + 0.009*“样板” + 0.008*“产品” + 0.008*“渐开线”’), (1, ‘0.015*“润滑” + 0.012*“材料” + 0.010*“样品” + 0.009*“检验” + 0.009*“附录” + 0.008*“规范” + 0.008*“试验” + 0.008*“轴承” + 0.007*“实验” + 0.007*“玻璃纤维”’), (2, ‘0.027*“软件” + 0.024*“测试” + 0.012*“保证” + 0.011*“标准” + 0.009*“试验” + 0.009*“文件” + 0.009*“方法” + 0.009*“活动” + 0.008*“陀螺” + 0.008*“计划”’), (3, ‘0.029*“项目” + 0.022*“软件” + 0.019*“仿真” + 0.015*“工作” + 0.013*“飞行器” + 0.013*“参数” + 0.011*“试验” + 0.011*“方法” + 0.011*“报告” + 0.010*“阶段”’), (4, ‘0.022*“试验” + 0.020*“锂电池” + 0.018*“软件” + 0.014*“附录” + 0.012*“测试” + 0.012*“试样” + 0.010*“设计” + 0.010*“项目” + 0.010*“标准” + 0.006*“内容”’), (5, ‘0.036*“文件” + 0.017*“标准” + 0.015*“试验” + 0.009*“编号” + 0.009*“标准化” + 0.009*“内容” + 0.009*“要素” + 0.008*“示例” + 0.008*“公差” + 0.008*“引用”’)]
    -2.889954019253702
    [(0, ‘0.023*“标准” + 0.021*“测量” + 0.017*“偏差” + 0.010*“螺旋线” + 0.010*“单位” + 0.010*“借用” + 0.009*“样板” + 0.008*“渐开线” + 0.008*“弹簧” + 0.008*“生物”’), (1, ‘0.018*“润滑” + 0.012*“材料” + 0.011*“样品” + 0.010*“检验” + 0.009*“附录” + 0.009*“轴承” + 0.009*“玻璃纤维” + 0.009*“规范” + 0.007*“高强” + 0.007*“单位”’), (2, ‘0.031*“软件” + 0.028*“测试” + 0.014*“保证” + 0.013*“标准” + 0.010*“活动” + 0.009*“文件” + 0.009*“计划” + 0.008*“记录” + 0.008*“磁带” + 0.008*“设计”’), (3, ‘0.038*“项目” + 0.022*“软件” + 0.020*“工作” + 0.014*“方法” + 0.014*“报告” + 0.012*“阶段” + 0.012*“活动” + 0.011*“过程” + 0.010*“计划” + 0.010*“估算”’), (4, ‘0.025*“仿真” + 0.024*“软件” + 0.017*“飞行器” + 0.017*“参数” + 0.017*“试验” + 0.012*“测试” + 0.011*“轨道” + 0.010*“追踪” + 0.010*“系统” + 0.009*“项目”’), (5, ‘0.036*“文件” + 0.017*“标准” + 0.015*“试验” + 0.010*“编号” + 0.009*“标准化” + 0.009*“要素” + 0.009*“内容” + 0.008*“示例” + 0.008*“公差” + 0.008*“引用”’), (6, ‘0.040*“试验” + 0.024*“锂电池” + 0.014*“试样” + 0.013*“规范” + 0.013*“陀螺” + 0.012*“符合” + 0.011*“方法” + 0.009*“附录” + 0.009*“相关” + 0.008*“检验”’)]
    -2.199977485584666
    [(0, ‘0.027*“标准” + 0.026*“测量” + 0.025*“偏差” + 0.015*“螺旋线” + 0.014*“借用” + 0.014*“样板” + 0.013*“单位” + 0.012*“弹簧” + 0.012*“渐开线” + 0.009*“仪器”’), (1, ‘0.023*“润滑” + 0.023*“测试” + 0.017*“磁带” + 0.014*“记录” + 0.012*“轴承” + 0.008*“电平” + 0.007*“信号” + 0.007*“设计” + 0.007*“固体” + 0.006*“标准”’), (2, ‘0.043*“软件” + 0.019*“保证” + 0.018*“测试” + 0.014*“活动” + 0.012*“计划” + 0.012*“文件” + 0.012*“标准” + 0.010*“设计” + 0.010*“评审” + 0.010*“项目”’), (3, ‘0.040*“项目” + 0.022*“软件” + 0.021*“工作” + 0.015*“方法” + 0.015*“报告” + 0.013*“阶段” + 0.012*“活动” + 0.011*“估算” + 0.011*“计划” + 0.011*“过程”’), (4, ‘0.026*“仿真” + 0.025*“软件” + 0.018*“飞行器” + 0.018*“参数” + 0.017*“试验” + 0.013*“测试” + 0.011*“轨道” + 0.010*“追踪” + 0.010*“系统” + 0.009*“项目”’), (5, ‘0.041*“文件” + 0.018*“标准” + 0.018*“试验” + 0.011*“编号” + 0.010*“标准化” + 0.010*“内容” + 0.010*“示例” + 0.009*“要素” + 0.009*“引用” + 0.008*“产品”’), (6, ‘0.040*“试验” + 0.024*“锂电池” + 0.014*“试样” + 0.013*“陀螺” + 0.013*“符合” + 0.013*“规范” + 0.012*“方法” + 0.009*“相关” + 0.009*“附录” + 0.009*“检验”’), (7, ‘0.012*“公差” + 0.010*“尺寸” + 0.009*“检验” + 0.009*“样品” + 0.009*“测试” + 0.009*“材料” + 0.009*“未注” + 0.008*“标准” + 0.007*“文件” + 0.007*“有效载荷”’)]
    -2.2382554931156475
    [(0, ‘0.026*“标准” + 0.024*“偏差” + 0.023*“测量” + 0.015*“螺旋线” + 0.014*“单位” + 0.014*“借用” + 0.014*“样板” + 0.013*“弹簧” + 0.012*“渐开线” + 0.009*“仪器”’), (1, ‘0.007*“项目” + 0.007*“软件” + 0.006*“测试” + 0.006*“试验” + 0.006*“附录” + 0.005*“工作” + 0.005*“标准” + 0.005*“文件” + 0.005*“方法” + 0.004*“设计”’), (2, ‘0.038*“软件” + 0.028*“测试” + 0.017*“保证” + 0.012*“标准” + 0.012*“活动” + 0.011*“磁带” + 0.011*“计划” + 0.011*“记录” + 0.009*“文件” + 0.009*“设计”’), (3, ‘0.039*“项目” + 0.022*“软件” + 0.021*“工作” + 0.015*“方法” + 0.014*“报告” + 0.013*“阶段” + 0.012*“活动” + 0.011*“计划” + 0.011*“估算” + 0.011*“过程”’), (4, ‘0.028*“软件” + 0.026*“仿真” + 0.018*“飞行器” + 0.017*“参数” + 0.015*“测试” + 0.013*“试验” + 0.011*“轨道” + 0.010*“追踪” + 0.010*“项目” + 0.010*“附录”’), (5, ‘0.035*“试验” + 0.018*“标准” + 0.016*“温度” + 0.016*“设备” + 0.014*“文件” + 0.013*“工作” + 0.011*“等级” + 0.010*“产品” + 0.009*“条件” + 0.009*“接地”’), (6, ‘0.044*“试验” + 0.027*“锂电池” + 0.016*“试样” + 0.015*“陀螺” + 0.014*“规范” + 0.013*“符合” + 0.012*“方法” + 0.010*“相关” + 0.010*“附录” + 0.009*“详细”’), (7, ‘0.013*“公差” + 0.011*“尺寸” + 0.010*“检验” + 0.010*“样品” + 0.010*“材料” + 0.009*“未注” + 0.009*“测试” + 0.008*“标准” + 0.007*“有效载荷” + 0.007*“生物”’), (8, ‘0.042*“文件” + 0.015*“标准” + 0.010*“编号” + 0.010*“内容” + 0.010*“标准化” + 0.009*“示例” + 0.009*“要素” + 0.008*“润滑” + 0.008*“引用” + 0.007*“附录”’)]
    -2.2975736425099287
    [(0, ‘0.026*“标准” + 0.021*“测量” + 0.021*“偏差” + 0.017*“测试” + 0.013*“磁带” + 0.013*“螺旋线” + 0.013*“借用” + 0.012*“样板” + 0.012*“单位” + 0.011*“弹簧”’), (1, ‘0.011*“测试” + 0.009*“润滑” + 0.006*“磁带” + 0.006*“记录” + 0.006*“附录” + 0.005*“试验” + 0.005*“项目” + 0.005*“软件” + 0.005*“设计” + 0.005*“工作”’), (2, ‘0.038*“软件” + 0.022*“测试” + 0.016*“文件” + 0.015*“计划” + 0.014*“保证” + 0.014*“标准” + 0.011*“设计” + 0.011*“评审” + 0.008*“程序” + 0.007*“验证”’), (3, ‘0.029*“软件” + 0.029*“项目” + 0.017*“仿真” + 0.014*“工作” + 0.013*“活动” + 0.012*“飞行器” + 0.011*“阶段” + 0.011*“参数” + 0.011*“报告” + 0.011*“过程”’), (4, ‘0.030*“软件” + 0.021*“测试” + 0.015*“项目” + 0.014*“附录” + 0.014*“设计” + 0.012*“标准” + 0.010*“需求” + 0.009*“内容” + 0.009*“列出” + 0.009*“说明书”’), (5, ‘0.038*“文件” + 0.020*“试验” + 0.019*“标准” + 0.012*“编号” + 0.010*“标准化” + 0.010*“内容” + 0.009*“示例” + 0.009*“设备” + 0.009*“引用” + 0.009*“要素”’), (6, ‘0.044*“试验” + 0.027*“锂电池” + 0.016*“试样” + 0.015*“陀螺” + 0.014*“规范” + 0.014*“符合” + 0.013*“方法” + 0.010*“相关” + 0.010*“附录” + 0.009*“详细”’), (7, ‘0.013*“公差” + 0.011*“尺寸” + 0.010*“样品” + 0.010*“检验” + 0.010*“材料” + 0.010*“未注” + 0.009*“测试” + 0.008*“标准” + 0.007*“有效载荷” + 0.007*“生物”’), (8, ‘0.026*“文件” + 0.015*“润滑” + 0.011*“标准” + 0.010*“试验” + 0.008*“轴承” + 0.007*“单位” + 0.006*“测量” + 0.006*“内容” + 0.005*“设计” + 0.005*“技术”’), (9, ‘0.013*“避雷器” + 0.009*“标准” + 0.008*“软件” + 0.007*“检验” + 0.005*“项目” + 0.005*“文件” + 0.005*“产品” + 0.004*“方法” + 0.004*“偏差” + 0.004*“工作”’)]
    -2.3243692270435714
    [(0, ‘0.021*“标准” + 0.018*“测量” + 0.017*“偏差” + 0.017*“润滑” + 0.013*“单位” + 0.011*“螺旋线” + 0.010*“借用” + 0.010*“样板” + 0.009*“渐开线” + 0.009*“弹簧”’), (1, ‘0.007*“测试” + 0.007*“项目” + 0.007*“软件” + 0.006*“附录” + 0.005*“试验” + 0.005*“工作” + 0.005*“标准” + 0.005*“方法” + 0.004*“文件” + 0.004*“设计”’), (2, ‘0.040*“软件” + 0.028*“测试” + 0.017*“保证” + 0.013*“标准” + 0.012*“计划” + 0.012*“活动” + 0.010*“文件” + 0.010*“设计” + 0.010*“评审” + 0.009*“包括”’), (3, ‘0.032*“项目” + 0.026*“软件” + 0.018*“仿真” + 0.016*“工作” + 0.013*“飞行器” + 0.012*“参数” + 0.012*“报告” + 0.012*“方法” + 0.011*“活动” + 0.011*“阶段”’), (4, ‘0.030*“软件” + 0.020*“测试” + 0.015*“项目” + 0.015*“附录” + 0.014*“设计” + 0.012*“标准” + 0.010*“需求” + 0.010*“列出” + 0.010*“说明书” + 0.009*“内容”’), (5, ‘0.049*“文件” + 0.021*“标准” + 0.014*“试验” + 0.014*“编号” + 0.013*“标准化” + 0.012*“内容” + 0.012*“示例” + 0.011*“要素” + 0.010*“引用” + 0.010*“产品”’), (6, ‘0.045*“试验” + 0.028*“锂电池” + 0.016*“试样” + 0.015*“陀螺” + 0.015*“规范” + 0.014*“符合” + 0.013*“方法” + 0.010*“相关” + 0.010*“附录” + 0.009*“详细”’), (7, ‘0.013*“公差” + 0.011*“尺寸” + 0.010*“样品” + 0.010*“测试” + 0.010*“材料” + 0.010*“检验” + 0.009*“未注” + 0.008*“标准” + 0.007*“有效载荷” + 0.007*“生物”’), (8, ‘0.023*“文件” + 0.015*“试验” + 0.012*“标准” + 0.010*“仿真” + 0.010*“测量” + 0.007*“参数” + 0.007*“相机” + 0.006*“系统” + 0.006*“飞行器” + 0.006*“偏差”’), (9, ‘0.014*“避雷器” + 0.010*“标准” + 0.008*“软件” + 0.007*“检验” + 0.006*“项目” + 0.005*“产品” + 0.005*“文件” + 0.005*“方法” + 0.004*“工作” + 0.004*“试验”’), (10, ‘0.027*“试验” + 0.026*“设备” + 0.020*“温度” + 0.019*“工作” + 0.016*“接地” + 0.013*“样品” + 0.013*“高度” + 0.012*“空间站” + 0.010*“搭接” + 0.009*“安装”’)]
    -2.328609954071033
    [(0, ‘0.029*“标准” + 0.027*“偏差” + 0.026*“测量” + 0.017*“螺旋线” + 0.017*“借用” + 0.015*“样板” + 0.015*“单位” + 0.014*“弹簧” + 0.014*“渐开线” + 0.010*“仪器”’), (1, ‘0.036*“润滑” + 0.017*“轴承” + 0.012*“固体” + 0.011*“设计” + 0.008*“部件” + 0.008*“润滑油” + 0.008*“单位” + 0.007*“润滑脂” + 0.007*“寿命” + 0.007*“材料”’), (2, ‘0.038*“软件” + 0.029*“测试” + 0.017*“保证” + 0.012*“标准” + 0.012*“活动” + 0.011*“计划” + 0.011*“磁带” + 0.011*“记录” + 0.009*“设计” + 0.009*“文件”’), (3, ‘0.043*“项目” + 0.024*“软件” + 0.022*“工作” + 0.016*“报告” + 0.016*“方法” + 0.014*“阶段” + 0.014*“活动” + 0.012*“过程” + 0.012*“计划” + 0.012*“估算”’), (4, ‘0.030*“仿真” + 0.028*“软件” + 0.021*“飞行器” + 0.020*“参数” + 0.015*“试验” + 0.015*“测试” + 0.013*“轨道” + 0.012*“追踪” + 0.011*“系统” + 0.010*“项目”’), (5, ‘0.052*“试验” + 0.023*“温度” + 0.020*“标准” + 0.018*“等级” + 0.015*“产品” + 0.014*“工作” + 0.013*“条件” + 0.010*“表面” + 0.010*“样品” + 0.010*“设备”’), (6, ‘0.047*“试验” + 0.030*“锂电池” + 0.017*“试样” + 0.015*“陀螺” + 0.015*“规范” + 0.014*“符合” + 0.012*“方法” + 0.010*“相关” + 0.010*“附录” + 0.009*“详细”’), (7, ‘0.012*“样品” + 0.012*“材料” + 0.012*“检验” + 0.011*“测试” + 0.009*“标准” + 0.009*“生物” + 0.009*“有效载荷” + 0.008*“天线” + 0.008*“附录” + 0.008*“玻璃纤维”’), (8, ‘0.016*“试验” + 0.012*“标准” + 0.011*“文件” + 0.010*“测量” + 0.010*“避雷器” + 0.008*“润滑” + 0.007*“相机” + 0.006*“产品” + 0.006*“检验” + 0.005*“轴承”’), (9, ‘0.009*“软件” + 0.007*“项目” + 0.006*“标准” + 0.006*“工作” + 0.005*“方法” + 0.004*“偏差” + 0.004*“文件” + 0.004*“阶段” + 0.004*“测试” + 0.004*“计划”’), (10, ‘0.023*“公差” + 0.017*“设备” + 0.017*“未注” + 0.017*“尺寸” + 0.013*“接地” + 0.010*“空间站” + 0.010*“加工” + 0.009*“高度” + 0.009*“文件” + 0.008*“表面”’), (11, ‘0.057*“文件” + 0.018*“标准” + 0.016*“编号” + 0.014*“标准化” + 0.014*“内容” + 0.013*“示例” + 0.013*“要素” + 0.012*“引用” + 0.011*“附录” + 0.010*“给出”’)]
    -2.24304712500343
    [(0, ‘0.031*“标准” + 0.026*“偏差” + 0.025*“测量” + 0.016*“借用” + 0.016*“螺旋线” + 0.015*“样板” + 0.014*“单位” + 0.014*“弹簧” + 0.013*“渐开线” + 0.009*“仪器”’), (1, ‘0.036*“测试” + 0.031*“磁带” + 0.026*“记录” + 0.014*“电平” + 0.014*“信号” + 0.010*“输出” + 0.008*“样品” + 0.008*“标准” + 0.008*“工作” + 0.006*“磁道”’), (2, ‘0.042*“软件” + 0.026*“测试” + 0.015*“保证” + 0.014*“标准” + 0.013*“设计” + 0.012*“项目” + 0.010*“活动” + 0.010*“包括” + 0.010*“计划” + 0.009*“文件”’), (3, ‘0.043*“项目” + 0.024*“软件” + 0.023*“工作” + 0.016*“报告” + 0.016*“方法” + 0.014*“阶段” + 0.013*“活动” + 0.012*“估算” + 0.012*“计划” + 0.012*“过程”’), (4, ‘0.051*“仿真” + 0.035*“飞行器” + 0.033*“参数” + 0.026*“试验” + 0.023*“软件” + 0.021*“轨道” + 0.020*“追踪” + 0.017*“系统” + 0.013*“模型” + 0.013*“目标”’), (5, ‘0.057*“试验” + 0.028*“温度” + 0.020*“工作” + 0.020*“标准” + 0.019*“等级” + 0.015*“产品” + 0.015*“条件” + 0.015*“样品” + 0.013*“高度” + 0.010*“表面”’), (6, ‘0.046*“试验” + 0.028*“锂电池” + 0.017*“试样” + 0.016*“陀螺” + 0.015*“规范” + 0.015*“符合” + 0.013*“方法” + 0.011*“相关” + 0.010*“附录” + 0.010*“详细”’), (7, ‘0.013*“公差” + 0.011*“尺寸” + 0.010*“检验” + 0.010*“样品” + 0.010*“材料” + 0.010*“测试” + 0.010*“未注” + 0.008*“标准” + 0.007*“有效载荷” + 0.007*“生物”’), (8, ‘0.025*“润滑” + 0.013*“轴承” + 0.012*“试验” + 0.010*“文件” + 0.008*“设计” + 0.008*“测量” + 0.007*“标准” + 0.007*“固体” + 0.007*“单位” + 0.006*“润滑脂”’), (9, ‘0.008*“软件” + 0.007*“标准” + 0.006*“项目” + 0.005*“文件” + 0.005*“工作” + 0.005*“方法” + 0.004*“检验” + 0.004*“附录” + 0.004*“试验” + 0.004*“避雷器”’), (10, ‘0.028*“设备” + 0.024*“接地” + 0.018*“空间站” + 0.015*“搭接” + 0.014*“电阻” + 0.014*“舱体” + 0.013*“回线” + 0.013*“安装” + 0.011*“连接” + 0.011*“结构”’), (11, ‘0.057*“文件” + 0.018*“标准” + 0.016*“编号” + 0.014*“标准化” + 0.014*“内容” + 0.014*“示例” + 0.013*“要素” + 0.012*“引用” + 0.011*“附录” + 0.010*“给出”’), (12, ‘0.009*“文件” + 0.008*“试验” + 0.007*“项目” + 0.006*“软件” + 0.006*“标准” + 0.005*“方法” + 0.004*“测试” + 0.004*“测量” + 0.004*“相机” + 0.004*“工作”’)]
    -1.769840536884153
    [(0, ‘0.031*“标准” + 0.029*“偏差” + 0.027*“测量” + 0.018*“借用” + 0.018*“螺旋线” + 0.016*“样板” + 0.016*“单位” + 0.015*“弹簧” + 0.015*“渐开线” + 0.010*“仪器”’), (1, ‘0.008*“测试” + 0.007*“项目” + 0.006*“软件” + 0.005*“试验” + 0.005*“附录” + 0.005*“标准” + 0.005*“工作” + 0.004*“文件” + 0.004*“方法” + 0.004*“记录”’), (2, ‘0.040*“软件” + 0.030*“测试” + 0.018*“保证” + 0.013*“标准” + 0.013*“活动” + 0.012*“磁带” + 0.011*“计划” + 0.011*“记录” + 0.010*“设计” + 0.010*“文件”’), (3, ‘0.041*“项目” + 0.024*“软件” + 0.021*“工作” + 0.015*“报告” + 0.015*“方法” + 0.014*“阶段” + 0.013*“活动” + 0.011*“过程” + 0.011*“计划” + 0.011*“估算”’), (4, ‘0.055*“仿真” + 0.038*“飞行器” + 0.034*“参数” + 0.027*“试验” + 0.023*“轨道” + 0.023*“软件” + 0.021*“追踪” + 0.018*“系统” + 0.013*“目标” + 0.013*“模型”’), (5, ‘0.045*“试验” + 0.023*“标准” + 0.023*“产品” + 0.023*“等级” + 0.015*“表面” + 0.014*“质量” + 0.011*“试样” + 0.011*“机械” + 0.009*“评定” + 0.009*“条件”’), (6, ‘0.048*“试验” + 0.036*“锂电池” + 0.021*“试样” + 0.014*“规范” + 0.012*“附录” + 0.012*“方法” + 0.011*“符合” + 0.010*“陀螺” + 0.010*“相关” + 0.009*“单体”’), (7, ‘0.015*“检验” + 0.015*“样品” + 0.015*“材料” + 0.011*“天线” + 0.011*“生物” + 0.010*“玻璃纤维” + 0.010*“实验” + 0.009*“规范” + 0.009*“附录” + 0.009*“代号”’), (8, ‘0.023*“润滑” + 0.013*“试验” + 0.012*“轴承” + 0.010*“标准” + 0.009*“文件” + 0.008*“避雷器” + 0.008*“测量” + 0.007*“设计” + 0.007*“单位” + 0.006*“固体”’), (9, ‘0.009*“软件” + 0.008*“项目” + 0.007*“标准” + 0.006*“工作” + 0.005*“方法” + 0.004*“偏差” + 0.004*“文件” + 0.004*“阶段” + 0.004*“单位” + 0.004*“计划”’), (10, ‘0.027*“公差” + 0.020*“未注” + 0.020*“尺寸” + 0.017*“设备” + 0.014*“接地” + 0.011*“加工” + 0.011*“空间站” + 0.010*“表面” + 0.009*“搭接” + 0.009*“文件”’), (11, ‘0.058*“文件” + 0.019*“标准” + 0.016*“编号” + 0.015*“标准化” + 0.014*“内容” + 0.014*“示例” + 0.013*“要素” + 0.012*“引用” + 0.011*“附录” + 0.010*“给出”’), (12, ‘0.009*“文件” + 0.006*“项目” + 0.006*“软件” + 0.005*“标准” + 0.005*“试验” + 0.004*“材料” + 0.004*“方法” + 0.004*“测试” + 0.003*“引用” + 0.003*“一个”’), (13, ‘0.022*“试验” + 0.020*“测试” + 0.016*“软件” + 0.016*“工作” + 0.012*“温度” + 0.012*“标准” + 0.010*“附录” + 0.009*“项目” + 0.009*“设计” + 0.009*“设备”’)]
    -2.364775357070355

    可视化展示:
    在这里插入图片描述

    K-means实现

    #参考博文:https://www.cnblogs.com/fengfenggirl/p/k-means.html
    
    from __future__ import print_function
    
    import os
    import re
    
    import jieba
    from jieba._compat import xrange
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.feature_extraction.text import HashingVectorizer
    import matplotlib.pyplot as plt
    from sklearn.cluster import KMeans, MiniBatchKMeans
    
    fdir=''#doc存放地址
    print('文件总数量为{}'.format(len(os.listdir(fdir))))
    stoppath=''#停用词存放地址
    def loadDataset():
        '''导入文本数据集'''
        flist=os.listdir(fdir)
        dataset = []
        for fname in flist:
            f = open(fdir+'\\'+fname, 'r',encoding='utf_8')
            d=''
            for line in f.readlines():
                if line!='\n' and line!='':
                    d+=line
            dataset.append(d)
            f.close()
        return dataset
    
    #停用词建立
    def buildSW():
        '''停用词的过滤'''
        typetxt = open(stoppath,encoding='utf_8')  # 停用词文档地址
        stoptexts = ['\u3000', '\n', ' ']  # 爬取的文本中未处理的特殊字符
        '''停用词库的建立'''
        for word in typetxt:
            word = word.strip()
            stoptexts.append(word)
        return stoptexts
    
    #语料建立data_set=[doc1,doc2,...]
    def buildWB(dataset,stoptexts):
        '''语料库的建立'''
        corpus=[]
        for i in range(0, len(dataset)):
            data = jieba.cut(dataset[i])  # 文本分词
            data_adj = ''
            delete_word = []
            for item in data:
                if item not in stoptexts:  # 停用词过滤
                    # value=re.compile(r'^[0-9]+$')#去除数字
                    value = re.compile(r'^[\u4e00-\u9fa5]{2,}$')  # 只匹配中文2字词以上
                    if value.match(item):
                        data_adj += item + ' '
                else:
                    delete_word.append(item)
            corpus.append(data_adj)  # 语料库建立完成
        # print(corpus)
        return corpus
    
    def transform(dataset, n_features=1000):
        vectorizer = TfidfVectorizer(max_df=0.5, max_features=n_features, min_df=2, use_idf=True)
        X = vectorizer.fit_transform(dataset)
        return X, vectorizer
    
    
    def train(X, vectorizer, true_k=10, minibatch=False, showLable=False):
        # 使用采样数据还是原始数据训练k-means,
        if minibatch:
            km = MiniBatchKMeans(n_clusters=true_k, init='k-means++', n_init=1,
                                 init_size=1000, batch_size=1000, verbose=False)
        else:
            km = KMeans(n_clusters=true_k, init='k-means++', max_iter=300, n_init=1,
                        verbose=False)
        km.fit(X)
        if showLable:
            print("Top terms per cluster:")
            order_centroids = km.cluster_centers_.argsort()[:, ::-1]
            terms = vectorizer.get_feature_names()
            print(vectorizer.get_stop_words())
            for i in range(true_k):
                print("Cluster %d:" % i, end='')
                for ind in order_centroids[i, :10]:
                    print(' %s' % terms[ind], end='')
                print()
        result = list(km.predict(X))
        print('Cluster distribution:')
        print(dict([(i, result.count(i)) for i in result]))
        return -km.score(X)
    
    #测试在不同的聚类数设置下,可达到的效果
    def test():
        '''测试选择最优参数'''
        dataset = loadDataset()
        print("%d documents" % len(dataset))
        X, vectorizer = transform(dataset, n_features=500)
        true_ks = []
        scores = []
        for i in xrange(3, 80, 1):
            score = train(X, vectorizer, true_k=i) / len(dataset)
            print(i, score)
            true_ks.append(i)
            scores.append(score)
        plt.figure(figsize=(8, 4))
        plt.plot(true_ks, scores, label="error", color="red", linewidth=1)
        plt.xlabel("n_features")
        plt.ylabel("error")
        plt.legend()
        plt.show()
    
    
    def out():
        '''在最优参数下输出聚类结果'''
        dataset = loadDataset()
        stoptexts=buildSW()
        corpus=buildWB(dataset,stoptexts)
    
        X, vectorizer = transform(corpus, n_features=500)
        score = train(X, vectorizer, true_k=5,minibatch=True, showLable=True) / len(dataset)
        print(score)
    
    
    # test()
    out()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126

    LDA代码实现

    #参考博客:https://blog.csdn.net/weixin_41168304/article/details/122389948
    
    
    from __future__ import print_function
    
    import os
    import re
    from multiprocessing import freeze_support
    
    import jieba
    from jieba._compat import xrange
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.feature_extraction.text import HashingVectorizer
    import matplotlib.pyplot as plt
    from sklearn.cluster import KMeans, MiniBatchKMeans
    
    fdir=''#doc文件夹地址
    print('文件总数量为{}'.format(len(os.listdir(fdir))))
    stoppath=''#停用词存放位置
    
    #加载数据,数据为[[],[]],二元列表,每个子列表存放每个文件分词后得到的列表
    class DataLoad:
        def __init__(self):
            pass
        #将文件内容存储在dataset列表中,每个元素是一篇文件
        def loadDataset(self):
            '''导入文本数据集'''
            flist=os.listdir(fdir)
            dataset = []
            for fname in flist:
                f = open(fdir+'\\'+fname, 'r',encoding='utf_8')
                d=''
                for line in f.readlines():
                    if line!='\n' and line!='':
                        d+=line
                dataset.append(d)
                f.close()
            return dataset
    
        #建立停用词文件
        def buildSW(self):
            '''停用词的过滤'''
            typetxt = open(stoppath,encoding='utf_8')  # 停用词文档地址
            stoptexts = ['\u3000', '\n', ' ']  # 爬取的文本中未处理的特殊字符
            '''停用词库的建立'''
            for word in typetxt:
                word = word.strip()
                stoptexts.append(word)
            return stoptexts
    
        #文件分词,存储在二元列表中,每个子列表是一篇文档
        def buildWB(self,dataset,stoptexts):
            '''语料库的建立'''
            corpus=[]
            for i in range(0, len(dataset)):
                data = jieba.cut(dataset[i])  # 文本分词
                data_adj =[]
                delete_word = []
                for item in data:
                    if item not in stoptexts:  # 停用词过滤
                        # value=re.compile(r'^[0-9]+$')#去除数字
                        value = re.compile(r'^[\u4e00-\u9fa5]{2,}$')  # 只匹配中文2字词以上
                        if value.match(item):
                            data_adj.append(item)
                    else:
                        delete_word.append(item)
                corpus.append(data_adj)  # 语料库建立完成
            # print(corpus)
            return corpus
    
    Data=DataLoad()
    dataset = Data.loadDataset()
    stoptexts=Data.buildSW()
    data_set=Data.buildWB(dataset,stoptexts)
    print('data_set',data_set[:3])
    print('data_set的长度是',len(data_set))
    
    
    
    #----------------LDA模型-------------------------
    
    import gensim
    from gensim import corpora
    import matplotlib.pyplot as plt
    import matplotlib
    import numpy as np
    import warnings
    
    warnings.filterwarnings('ignore')  # To ignore all warnings that arise here to enhance clarity
    
    from gensim.models.coherencemodel import CoherenceModel
    from gensim.models.ldamodel import LdaModel
    
    #   构建词典,语料向量化表示
    dictionary = corpora.Dictionary(data_set)  # 构建词典
    corpus = [dictionary.doc2bow(text) for text in data_set]  #表示为第几个单词出现了几次
    
    num_topics=10
    passes=3
    
    ldamodel = LdaModel(corpus, num_topics=num_topics, id2word = dictionary, passes=passes,random_state = 1)   #分为10个主题
    print('每个主题输出15个单词')
    print(ldamodel.print_topics(num_topics=num_topics, num_words=15))  #每个主题输出15个单词
    #计算困惑度
    def perplexity(num_topics):
        ldamodel = LdaModel(corpus, num_topics=num_topics, id2word = dictionary, passes=passes)
        print(ldamodel.print_topics(num_topics=num_topics, num_words=15))
        print(ldamodel.log_perplexity(corpus))
        return ldamodel.log_perplexity(corpus)
    #计算coherence
    def coherence(num_topics):
        ldamodel = LdaModel(corpus, num_topics=num_topics, id2word = dictionary, passes=passes,random_state = 1)
        print(ldamodel.print_topics(num_topics=num_topics, num_words=10))
        ldacm = CoherenceModel(model=ldamodel, texts=data_set, dictionary=dictionary, coherence='u_mass')
        print(ldacm.get_coherence())
        return ldacm.get_coherence()
    
    if __name__ == '__main__':
        freeze_support()
        #绘制主题-coherence曲线,选择最佳主题数
        x = range(1,15)
        # z = [perplexity(i) for i in x]  #如果想用困惑度就选这个
        y = [coherence(i) for i in x]
        plt.plot(x, y)
        plt.xlabel('主题数目')
        plt.ylabel('coherence大小')
        plt.rcParams['font.sans-serif']=['SimHei']
        matplotlib.rcParams['axes.unicode_minus']=False
        plt.title('主题-coherence变化情况')
        plt.show()
    
    
        import pyLDAvis.gensim
        # pyLDAvis.enable_notebook()#如果是在笔记本中,取消注释
        data = pyLDAvis.gensim.prepare(ldamodel, corpus, dictionary)
        pyLDAvis.save_html(data, 'topic.html')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136

    地址

    项目本机地址:E:\python project\pythonProject_draftKG\主题聚类
    项目git地址:git

  • 相关阅读:
    6. `Java` 并发基础之`ReentrantReadLock`
    为什么我反对过度使用TypeScript?
    C# 扩展运算符(...)的详细解析
    034、test
    qt中QFileSystemModel和QStringListModel使用
    buuctf PWN jarvisoj_level2
    【Linux】Base64编码
    MEMS传感器的原理与构造——单片式硅陀螺仪
    Spring事务管理
    【七】jmeter5.5+influxdb2.0+prometheus+grafana
  • 原文地址:https://blog.csdn.net/Hekena/article/details/126317496