直接上代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-"""
利用simhash进行文本去重
"""from simhash import Simhash, SimhashIndex
import jieba
import codecs
import datetime
import osclass Dudup(object):def __init__(self, data_dir='../data/', model_dir='../model/', file_name='test_data.txt',\clean_file_name='test_data_clean.txt'):self.data_dir = data_dirself.model_dir = model_dirself.file_name = file_nameself.clean_file_name = clean_file_namedef stop_word_list(self, stop_words_path):stopwords = [x.strip() for x in codecs.open(stop_words_path, 'r', encoding='utf-8').readlines()]return stopwordsdef tokenization(self, line):""":param line: 每行原始数据:return: 分词、去除停用词后的数据"""result = []words = jieba.lcut(line)for word in words:if word not in self.stop_word_list(self.data_dir + 'stopwords.txt'):result.append(word)return resultdef read_data(self, file):data_list = []with open(self.data_dir + file, encoding='utf-8') as data:for line in data.readlines():data_list.append(line.rstrip('\n'))return data_listdef get_data_dict(self):data_dic = {}index = 1clean_data = []if not os.path.exists(self.data_dir + self.file_name):# clean_data = [self.tokenization(sent) for sent in self.read_data() if len(sent)]with open(self.data_dir + self.clean_file_name, 'w', encoding='utf-8') as cleaned_data:for sent in self.read_data():clean_line = self.tokenization(sent)clean_data.append(clean_line)cleaned_data.write(' '.join(clean_line)+'\n')else:clean_data = self.read_data(self.clean_file_name)data_line_number = len(clean_data)for line in clean_data:data_dic[str(index)] = ' '.join(line)index += 1if index == data_line_number:break# print(data_dic)return data_dicdef get_index(self):data_dic = self.get_data_dict()print(data_dic)  # 打印出字典line_score = [(id, Simhash(sent)) for id, sent in data_dic.items()]index = SimhashIndex(line_score, k=2)return indexif __name__ == '__main__':start_time = datetime.datetime.now()find_dup = Dudup()Sim_Hash_Index = find_dup.get_index()inp = '“全椒县经开区污水处理厂有限公司提标改造设备采购二次'inp_sim_hash = Simhash(' '.join(find_dup.tokenization(inp)))result_index = Sim_Hash_Index.get_near_dups(inp_sim_hash)if len(result_index):print('重复行索引\t', result_index[0])raw_data_list = find_dup.read_data(find_dup.data_dir + find_dup.file_name)print('重复标题\t', raw_data_list[int(result_index[0]) - 1])else:print("没有重复行")end_time = datetime.datetime.now()print("consume time is %f minutes." % ((end_time - start_time).seconds * 1.0 / 60))

基于simhash的短文本去重相关推荐

  1. 介绍一个基于simhash作海量文章排重的库:simhashpy

    2019独角兽企业重金招聘Python工程师标准>>> 基于simhash的海量文章排重的实践 简单介绍 simhash是一种能计算文档相似度的hash算法.通过simhash能将一 ...

  2. 一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度

    一个基于特征向量的近似网页去重算法--term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度 摘  要  在搜索引擎的检索结果页面中,用户经常会得到内容相 ...

  3. hashset去重原理_基于simhash的文本去重原理

    互联网网页存在着大量重复内容,必须有一套高效的去重算法,否则爬虫将做非常多的无用功,工作时效性无法得到保证,更重要的是用户体验也不好.业界关于文本指纹去重的算法众多,如 k-shingle 算法.go ...

  4. 基于分布式的短文本命题实体识别之----人名识别(python实现)

    目前对中文分词精度影响最大的主要是两方面:未登录词的识别和歧义切分. 据统计:未登录词中中文姓人名在文本中一般只占2%左右,但这其中高达50%以上的人名会产生切分错误.在所有的分词错误中,与人名有关的 ...

  5. 一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度...

    摘  要  在搜索引擎的检索结果页面中,用户经常会得到内容相似的重复页面,它们中大多是由于网站之间转载造成的.为提高检索效率和用户满意度,提出一种基于特征向量的大规模中文近似网页检测算法DDW(Det ...

  6. LSF-SCNN:一种基于 CNN 的短文本表达模型及相似度计算的全新优化模型

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本篇文章是我在读期间,对自然语言处理中的文本相似度问题研究取得的一点小成果.如果你对自然语言处理 (natural language proc ...

  7. LSF-SCNN:一种基于CNN的短文本表达模型及相似度计算的全新优化模型

    本篇文章是我在读期间,对自然语言处理中的文本相似度问题研究取得的一点小成果.如果你对自然语言处理 (natural language processing, NLP) 和卷积神经网络(convolut ...

  8. 基于cnn的短文本分类_自然语言理解之(二)短文本多分类TextCNN实践

    本文包含:用keras实现文本分类的2种baseline结构:TextCNN.Bi-GRU+conv+pooling:网络结构可视化:采用小样本在本地(乞丐版MacBook Pro)评估baselin ...

  9. 基于cnn的短文本分类_基于时频分布和CNN的信号调制识别分类方法

    文章来源:IET Radar, Sonar & Navigation, 2018, Vol. 12, Iss. 2, pp. 244-249. 作者:Juan Zhang1, Yong Li2 ...

  10. 基于cnn的短文本分类_NLP.TM[15] | 短文本相似度CNN_SIM

    [NLP.TM] 本人有关自然语言处理和文本挖掘方面的学习和笔记,欢迎大家关注. 往期回顾: NLP.TM | 命名实体识别基线 BiLSTM+CRF(上) NLP.TM | tensorflow做基 ...

最新文章

  1. 在js中使用createElement创建HTML对象和元素
  2. 第一部分:基础知识(第一章)屏幕部分续
  3. Raspberry Pi 3 计算模块,CPU性能提高了十倍
  4. Stream流中的常用方法_count
  5. java oo原则_javaOO11-12:面向对象的设计原则、线程
  6. python制作的游戏如何转化为swf_PYTHON实现swf提取
  7. 九龙擒庄指标源码破译_九龙擒庄指标源码破译_破译股市密码
  8. ArcGIS Server学习资料
  9. springboot问题记录
  10. I/O、Applet以及其他主题
  11. 【Tomcat】修改密码
  12. 全国计算机二级等级考试评卷,全国计算机等级c语言考试评卷老师是如何阅卷的...
  13. SQL on log : 同比分析各种指标
  14. Bomb lab实验
  15. 微信小程序上传阿里云视频文件流程及代码
  16. Excel表格xlsx表格js生成Table
  17. 18 模块划分4步骤——EDD
  18. SyncE和1588的关系
  19. android 最简洁的日历,简洁日历 - 日历与 ToDo 的完美结合 #Android
  20. 1067: 【魔板】

热门文章

  1. linux虚拟文件系统(二)-ext4文件系统结构
  2. 大数据之数据仓库分层
  3. Zemax操作28--衍射光栅(中)
  4. PostScript 打印描述语言 介绍
  5. 联想主板9针开关接线图_家庭配电箱总漏电保护,空气开关用63A还是40A好?看完彻底懂了...
  6. qlistview 自定义控件_QT中QListView中放置自定义控件并添加滚动条
  7. linux gif录制工具,Ubuntu中的Gif动画录制工具byzanz
  8. 串行通信接口详细描述
  9. 以太网测试仪的RFC2544测试你了解吗?
  10. 如何彻底卸载Anaconda3