0. 写在前面
节后第一篇, 疫情还没结束, 黎明前的黑暗, 中国加油, 武汉加油, 看了很多报道, 发现只有中国人才会帮助中国人, 谁说中国人一盘散沙? 也许是年龄大了, 看到全国各地的医务人员源源不断的告别家人去支援湖北, 看到医务人员, 肺炎病人的故事, 总会忍不住落泪, 中国加油, 中国人加油!
1. 场景描述
背景不写了, 只谈技术, 做的是文本相似性统计, 因需要从文本描述性信息中分析同类信息, 以便后续重点关注, 数据量比较大, 大概 20 多万, 人工效率低, 需要算法来实现.
根据需求要从不同维度进行统计:
(1) 分组不分句热度统计 (根据某列首先进行分组, 然后再对描述类列进行相似性统计);
(2) 分组分句热度统计 (根据某列首先进行分组, 然后对描述类列按照标点符号进行拆分, 然后再对这些句进行热度统计);
(3) 整句及分句热度统计;(对描述类列 / 按标点符号进行分句, 进行热度统计)
(4) 热词统计 (对描述类类进行热词统计, 反馈改方式做不不大)
2. 解决方案
在网上以及和同事都验证了很多不同实现方案, 具体过程就不说了, 对比下来, jieba+gensim 效果最好.
算法实现介绍:
(1) 输入文件是 Excel, 数据大概 20 多万, 首先通过 pandas 获取 Excel 信息, 通过 jieba 分词进行处理, jieba 分词要首先自定义词典以及排除信息, 这样效果会差异很大, 然后形成一个二维数组.
(2) 使用 gensim 中的 corpora 模块, 将分词形成后的二维数组生成词典
(3) 将二维数组通过 doc2bow 稀疏向量, 形成语料库
(4) 刚开始使用 TF 模型算法, 后来更改为: LsiModel 模型算法, 将语料库计算出 Tfidf 值.
(5) 获取词典 token2id 的特征数
(6) 计算稀疏矩阵相似度, 建立一个索引
(7) 读取 Excel 行数据, 通过 jieba 进行分词处理
(8) 通过 doc2bow 计算测试数据的稀疏向量
(9) 求得测试数据与样本数据的相似度
算法说明:
(1) 这里有个点, 7-9 步会循环执行, 针对文档描述列中的每一行, 会与在第六步中创建的索引就行比对, 会统计与该行相似性超过 50% 的行数据, 同时会将统计到的数据增加个数组中, 后续不再执行比对, 以免重复统计.
(2) 第一步 jieba 算法中会用到专业术语词典及 stop 词典等, 7-9 部会循环执行, 目前相似度阈值设置的为: 50%, 另外 Excel 操作就不多说了 (增加了汇总起来清单的超链, 可以导航到清单)
(3) 效率上, 20 多万的数据, 因需要转换向量, 大概需要 20 来分钟.
(4) 大的算法发是这样的, 下一篇再开始上代码, 针对不同需求, 进行介绍.
I'm 「软件老王」, 如果觉得还可以的话, 关注下呗, 后续更新秒知! 欢迎讨论区, 同名公众号留言交流!
来源: http://www.bubuko.com/infodetail-3424444.html