1. 场景描述

软件老王在上一节介绍到相似性热度统计的4个需求(文本相似性热度统计(python版)),本次介绍分组及分组分句热度统计(需求1和需求2)。

2. 解决方案

分组热度统计首先根据某列进行分组,然后再对这些句进行热度统计,主要是分组处理,分句仅仅是按照标点符号做了下拆分,在代码说明中可以替换下就可以了。

2.1 完整代码

完整代码,有需要的朋友可以直接拿走,不想看代码介绍的,可以直接拿走执行就行。

import jieba.posseg as pseg
import jieba.analyse
import xlwt  # 写入Excel表的库
import pandas as pd
from gensim import corpora, models, similarities
import re
#停词函数
def StopWordsList(filepath):wlst = [w.strip() for w in open(filepath, 'r', encoding='utf8').readlines()]return wlst
def str_to_hex(s):return ''.join([hex(ord(c)).replace('0x', '') for c in s])
# jieba分词
def seg_sentence(sentence, stop_words):stop_flag = ['x', 'c', 'u', 'd', 'p', 't', 'uj', 'f', 'r']sentence_seged = pseg.cut(sentence)outstr = []for word, flag in sentence_seged:if word not in stop_words and flag not in stop_flag:outstr.append(word)return outstr
if __name__ == '__main__':# 1 这些是jieba分词的自定义词典,软件老王这里添加的格式行业术语,格式就是文档,一列一个词一行就行了,# 这个几个词典软件老王就不上传了,可注释掉。jieba.load_userdict("g1.txt")jieba.load_userdict("g2.txt")jieba.load_userdict("g3.txt")# 2 停用词,简单理解就是这次词不分割,这个软件老王找的网上通用的。spPath = 'stop.txt'stop_words = StopWordsList(spPath)# 3 excel处理wbk = xlwt.Workbook(encoding='ascii')sheet = wbk.add_sheet("软件老王sheet")  # sheet名称sheet.write(0, 0, '软件老王1-类别')sheet.write(0, 1, '软件老王2-原因')sheet.write(0, 2, '软件老王3-统计数量')sheet.write(0, 3, '导航-链接到明细sheet表')inputfile = '软件老王-source2.xlsx'data = pd.read_excel(inputfile)  # 读取数据grp1 = data.groupby('类别')rcount = 1for name, group in grp1:print(grp1)texts = []orig_txt = []key_list = []name_list = []sheet_list = []name = name.replace('\n', '').replace('/', '')for i in range(len(group)):row = group.iloc[i].valuescell = row[1]if cell is None:continueif not isinstance(cell, str):continueitem = cell.strip('\n\r').split('\t')string = item[0]if string is None or len(string) == 0:continueelse:textstr = seg_sentence(string, stop_words)texts.append(textstr)orig_txt.append(string)# 4 相似性处理dictionary = corpora.Dictionary(texts)feature_cnt = len(dictionary.token2id.keys())corpus = [dictionary.doc2bow(text) for text in texts]tfidf = models.LsiModel(corpus)index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=feature_cnt)result_lt = []word_dict = {}count =0for keyword in orig_txt:count = count+1print('开始执行,第'+ str(count)+'行')if keyword in result_lt or keyword is None or len(keyword) == 0:continuekw_vector = dictionary.doc2bow(seg_sentence(keyword, stop_words))sim = index[tfidf[kw_vector]]result_list = []for i in range(len(sim)):if sim[i] > 0.5:if orig_txt[i] in result_lt and orig_txt[i] not in result_list:continueresult_list.append(orig_txt[i])result_lt.append(orig_txt[i])if len(result_list) >0:word_dict[keyword] = len(result_list)if len(result_list) >= 1:name = name.strip('\n\r').replace('\n', '').replace('/', '').replace(',', '').replace('。', '').replace('*', '')name = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", name)sname = name[0:10] + '_' + re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", keyword[0:10])+ '_'\+ str(len(result_list)+ len(str_to_hex(keyword))) + str_to_hex(keyword)[-5:]sheet_t = wbk.add_sheet(sname)  # Excel单元格名字for i in range(len(result_list)):sheet_t.write(i, 0, label=result_list[i])# 5 按照热度排序 -软件老王with open("rjlw.txt", 'w', encoding='utf-8') as wf2:  # 打开文件orderList = list(word_dict.values())orderList.sort(reverse=True)count = len(orderList)for i in range(count):for key in word_dict:if word_dict[key] == orderList[i]:key_list.append(key)name_list.append(name)word_dict[key] = 0wf2.truncate()# 6 写入目标excelfor i in range(len(key_list)):sheet.write(i+rcount, 0, label=name_list[i])sheet.write(i+rcount, 1, label=key_list[i])sheet.write(i+rcount, 2, label=orderList[i])if orderList[i] >= 1:shname = name_list[i][0:10] + '_' + re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", key_list[i][0:10]) \+ '_'+ str(orderList[i]+ len(str_to_hex(key_list[i])))+ str_to_hex(key_list[i])[-5:]link = 'HYPERLINK("#%s!A1";"%s")' % (shname, shname)sheet.write(i+rcount, 3, xlwt.Formula(link))rcount = rcount + len(key_list)key_list = []name_list = []orderList = []texts = []orig_txt = []sheet_list =[]wbk.save('软件老王-target2.xls')

2.2 代码说明

以上的代码中有很明确的注释就不再一一介绍了,重点说几个。

(1)分组处理跟文本相似性热度统计算法实现(一)-整句热度统计相似,不同的是首先按照某一列做了分组处理,然后进行相似性统计,相似性这块一样,其实不同的主要是excel处理这块的内容。

(2)excle分组用的是pandas包,python中excel数据分组处理。

(3)关于需求2,分组分句,代码如下:

 for i in range(len(group)):row = group.iloc[i].values cell = row[1]if cell is None:continueif not isinstance(cell, str):continueitem = cell.strip('\n\r').split('\t') string = item[0]#软件老王,这里按照标点符号对原因进行拆分,然后再进行处理。lt = re.split(',|。|!|?', string)for t in lt:if t is None or t.strip() == '' or len(t.strip()) == 0:continueelse:textstr = seg_sentence(t, stop_words)texts.append(textstr)orig_txt.append(t)

2.3 效果图

(1)软件老王-source2.xlsx

类别 原因
软件老王1 主机不能加电
软件老王1 有时不能加电
软件老王1 开机加电
软件老王2 自检报错或死机
软件老王2 机器噪音大
软件老王3 噪音问题
软件老王1 噪音太大
软件老王1 噪音噪声
软件老王1 声音太大
软件老王2 声音太大
软件老王3 声音太大

(2)软件老王-target2.xls

软件老王1-类别 软件老王2-原因 软件老王3-统计数量 导航-链接到明细sheet表
软件老王1 主机不能加电 3 软件老王1_主机不能加电_2707535
软件老王1 噪音太大 2 软件老王1_噪音太大_18a5927
软件老王1 声音太大 1 软件老王1_声音太大_17a5927
软件老王2 自检报错或死机 1 软件老王2_自检报错或死机_29b673a
软件老王2 机器噪音大 1 软件老王2_机器噪音大_2135927
软件老王2 声音太大 1 软件老王2_声音太大_17a5927
软件老王3 噪音问题 1 软件老王3_噪音问题_17e9898
软件老王3 声音太大 1 软件老王3_声音太大_17a5927

(3)简单说明

从数据中可以看出来,例如:声音太大,分属三类,首先分类,然后再比对相似性。


更多知识请关注公众号:「软件老王」,IT技术与相关干货分享,回复关键字获取对应干货,java,送必看的10本“武功秘籍”;图片,送100多万张可商用高清图片;面试,送刚毕业就能月薪“20k”的java面试题,后续不断更新中,比如“软考”、“工具”等,已经在整理中。

文本相似性算法实现(二)-分组及分句热度统计相关推荐

  1. [转] 文本相似性算法Simhash原理及实践

    simhash(局部敏感哈希)的原理 simhash的背景 simhash广泛的用于搜索领域中,也许在面试时你会经常遇到这样的问题,如果对抓取的网页进行排重,如何对搜索结果进行排重等等.随着信息膨胀时 ...

  2. [转]文本相似性算法:simhash/minhash/余弦算法

    数据挖掘之lsh(局部敏感hash) minhash.simhash 在项目中碰到这样的问题: 互联网用户每天会访问很多的网页,假设两个用户访问过相同的网页,说明两个用户相似,相同的网页越多,用户相似 ...

  3. 基于支持向量机的文本分类算法研究(二) —— 支持向量核函数介绍(stitp项目)

    2 支持向量机核函数 支持向量机的理论基础(凸二次规划)决定了它最终求得的为全局最优值而不是局部最优值,也保证了它对未知样本的良好泛化能力.支持向量机是建立在统计学习理论基础之上的新一代机器学习算法, ...

  4. python热度评价指标_文本相似性热度统计方案(python版)

    1. 场景描述 背景不写了,只谈技术,做的是文本相似性统计,因需要从文本描述性信息中分析同类信息,以便后续重点关注,数据量比较大,大概20多万,人工效率低,需要算法来实现. 根据需求要从不同维度进行统 ...

  5. NLP之NBGBT:基于朴素贝叶斯(count/tfidf+网格搜索+4fCrva)、梯度提升树(w2c+网格搜索+4fCrva)算法对IMDB影评数据集进行文本情感分析(情感二分类预测)

    NLP之NB&GBT:基于朴素贝叶斯(count/tfidf+网格搜索+4fCrva).梯度提升树(w2c+网格搜索+4fCrva)算法对IMDB影评数据集进行文本情感分析(情感二分类预测) ...

  6. 机器学习-无监督学习-聚类:聚类方法(二)--- 基于密度的聚类算法【DBSCAN文本聚类算法,密度最大值文本聚类算法】

    密度聚类方法的指导思想是,只要样本点的密度大于某阀值,则将该样本添加到最近的簇中. 基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定,以数据集在空间分布上的稠密程度为依据进行聚类,即只要一 ...

  7. ICDAR2013文本检测算法的衡量方法(二)Rectangle Matching与DetEval

    这是第二部分,第一部分请点击 ICDAR2013文本检测算法的衡量方法(一)Evaluation Levels 主要内容: Rectangle Matching, 或者bbox matching IC ...

  8. 2020年文档相似性算法:初学者教程

    作者|Masatoshi Nishimura 编译|VK 来源|Towards Data Science 如果你想知道2020年文档相似性任务的最佳算法,你来对了地方. 在33914篇<纽约时报 ...

  9. 深度学习实战-词嵌入计算文本相似性

    使用词嵌入计算文本相似性 文章目录 使用词嵌入计算文本相似性 简介 词嵌入 预训练词嵌入查看文本相似性 Word2vec的数学特性 可视化词嵌入 词嵌入中发现实体类 类内部语义距离 可视化国家数据 补 ...

最新文章

  1. 什么是C++模板?_百度知道
  2. python之vscode中手动选择python解释器(mac)
  3. java 异常的捕获及处理
  4. PyQt - 维基百科,自由的百科全书
  5. 收藏的2个正则html标签剔除方法
  6. C语言文件读写(5)-文件位置相关
  7. 语言运行泰博那契数列_波浪理论的数字基础-斐波那契数列
  8. 在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据
  9. Asterisk队列(Queue)振铃方式(ring strategy)
  10. 趣味科普丨一文读懂云服务器的那些事儿
  11. 集成服务入门(实验7)数据流的目标
  12. CAS Tomcat实现单点登录
  13. WebGL笔记(二):顶点着色
  14. 在线动态几何编辑器 GeometryEditor
  15. GIS应用技巧之世界各国矢量获取途径
  16. 5.linux设备驱动模型
  17. 锐起无盘服务器客户机不同步,使用批处理判断锐起无盘客户机是否为超级用户状态...
  18. 特征工程:归一化与标准化
  19. 【毕业季·进击的技术er】青春不散场
  20. 蓝牙篇之蓝牙核心规范学习笔记(V5.3)汇总

热门文章

  1. 高考计算机机房固态硬盘风险,【单选题】(2016年高考)下列有关固态硬盘的叙述中,正确的是()...
  2. msp430g2553时钟
  3. 关于Ext2.2中调用iframe,无法打开 Internet 站点
  4. 论述:为什么选择PM
  5. 1.只有本地管理员才能访问本页面2.notes Happy Why am lfeeling so happy today? Well ljust got to spend threedays with
  6. 浅谈msp430f5529入门(1)——时钟模块DCO
  7. 策略模式-表单验证的策略模式
  8. 将本机安装的chrome插件移至其他电脑
  9. php laravel terminate中间件 实现原理与实例
  10. 12米与30米TanDEM-X数字高程模型DEM数据的下载申请方法