【Python】如何利用MinHash和LSH进行大规模文本数据去重


十年之前
我不认识你
你不属于我
我们还是一样
陪在一个陌生人左右
走过渐渐熟悉的街头
十年之后
我们是朋友
还可以问候
只是那种温柔
再也找不到拥抱的理由
情人最后难免沦为朋友
                     🎵 刘若英《十年》


去重逻辑实现

  • 数据准备:在内存中准备好需要处理的文本数据集合。
  • 分词处理:对文本数据进行分词。
  • 计算MinHash:对分词结果计算MinHash。
  • 使用LSH进行快速查找:通过LSH快速找到相似的文本集合。
  • 标记重复文本:将找到的重复文本记录或处理。

示例代码

这里提供一个Python示例,展示如何实现上述逻辑:

import jieba
from datasketch import MinHash, MinHashLSH# 示例数据
documents = ["今天天气真好,适合出去玩。","今天天气不错,可以出去玩。","明天有大雨,最好不要外出。","今天天气真好,适合出游。","明天有暴雨,尽量留在家里。"
]# 初始化jieba分词器
jieba.initialize()# 创建MinHash和LSH对象
lsh = MinHashLSH(threshold=0.5, num_perm=128)
minhashes = {}# 处理文本,计算MinHash
for i, doc in enumerate(documents):words = jieba.cut(doc)m = MinHash(num_perm=128)for word in words:m.update(word.encode('utf8'))minhashes[i] = mlsh.insert(f"doc_{i}", m)# 查找重复文档
duplicates = {}
for i, minhash in minhashes.items():result = lsh.query(minhash)if len(result) > 1:duplicates[f"doc_{i}"] = result# 输出结果
for doc_id, similar_ids in duplicates.items():print(f"{doc_id} is similar to {similar_ids}")

分析示例

假设我们有一组包含简单中文文本的数据。我们首先对每条文本进行分词,然后计算每条文本的MinHash值,并使用LSH将这些值插入到一个可查询的结构中。最后,我们查询每个文本的MinHash,找出所有相似的文本。

在这个例子中:

文档0和文档3非常相似,因为它们都描述了“今天天气好,适合出去玩”的情景,尽管用词略有不同。
文档2和文档4虽然都提到了“明天有雨”,但用词和句式的不同可能使得它们的相似度低于阈值。

总结

通过MinHash和LSH,我们能够有效地在没有数据库支持的情况下处理和去重大量文本数据。这种方法特别适合处理语义上相似的文本,而不仅仅是字面上完全相同的文本。使用这种方法可以显著提高数据处理的效率和准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习-官方文档编辑方法

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

电感与磁珠

电感是什么? 电感会通过产生感应电动势的方式来阻碍电流的变化,电流变化率越大,产生的感应电动势越大阻碍电流效果越明显。 [一]品质因数Q: 电感的品质因数Q值定义:电感的Q值也叫作品质因数,其为无功功率除以有功功率…

API请求报错 Required request body is missing问题解决

背景 在进行调用的时候,加载方法,提示以下错误 错误信息如下: {"code": 10001,"msg": "Required request body is missing: XXX","data": null,"extra": null }Required request body…

ubuntu22.04下编译ffmpeg和ffplay

Ubuntu22.04 下编译安装 ffmpeg 和 ffplay 一、下载源码包 1.1 官方下载链接:Download FFmpeg 可以手动下载,也可以命令行下载: wget http://www.ffmpeg.org/releases/ffmpeg-7.0.tar.xz 1.2 下载完解压 tar -xvf ffmpeg-7.0.tar.xz…

《深入浅出多模态》: 多模态经典模型:BLIP

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、资料共享、行业最新动态以、实践教程、求职…

多个路由器连接的PC端进行ping通信需要做的事

实验环境: 三台PC三台路由器,并且配置好IP 拓扑图: 需求描述: 在PC0进行与PC2的ping通信: 需求步骤: 1.1首先配置ip(略过) 1.2我们首先查看在只配置了IP的情况下,P…

Flask中的JWT认证构建安全的用户身份验证系统

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Flask中的JWT认证:构建安全的用户身份验证系统 随着Web应用程序的发展&#xf…

详解IIC通信协议以及FPGA实现

一、IIC简介 IIC也称为I2C(Inter-Integrated Circuit)由飞利浦公司(现在的恩智浦半导体)开发,是一种用于短距离数字通信的串行,同步,半双工通信接口协议;传输在标准模式下可以达到10…

【C语言】指针详解(五)

目录 1.字符指针 1.1常量字符串 2.指针数组 3.数组指针 1.字符指针 字符指针就是指向字符的指针,字符指针可以存储字符变量的地址。 举例如下: 定义指针变量pa存a的地址,改变*pa的值,a也会随之改变 。 1.1常量字符串 &#x1f…

代码随想录算法训练营第三十八天|509. 斐波那契数,70.爬楼梯,746. 使用最小花费爬楼梯

动态规划(DP) 如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的 一、动态规划包含哪些问题? 1、基础问题,如斐波那契数 2、背包问题,很经典的问题 3、打家劫舍 4、…

安全开发实战(1)--Cdn

目录 安全开发专栏 CDN介绍 1.信息收集阶段 1.1判断CDN是否存在 1.1.1, One 1.1.2,Two(改进) 1.1.3,进行整合 增加输入功能 1.1.4 批量读取监测存储(进行测试) 问题1: 问题2: 解决方案: 1.1.4 基本编写完成 命令框中: cdn存在.txt 总结 这里我是根据整个渗透测…

C语言数据结构-双链表

双链表是什么 双向链表,又称为双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。 我们…

使用mapinfo软件的在线地图插件运行错误解决

使用mapinfo软件的在线地图插件运行错误解决 一、如何解决win10/win11家庭版运行MapInfo中的在线地图插件报错【unexpected error;quitting】问题?二、如何解决在线地图切换地图源时的报错问题? 一、如何解决win10/win11家庭版运行MapInfo中的…

原牛角源码(修罗bbs)全站程序打包带数据库备份

原牛角源码(修罗bbs)全站程序打包带数据库备份,牛角源码全站数据全站文件、插件打包分享给大家,有兴趣的可以搭建玩玩! conf文件夹中自己配置conf.php里面的数据库链接文件,默认管理账号:admin,密码&#…

Redis的单线程模型解析与应用实践

引言 Redis作为一个高性能的键值存储数据库,其单线程模型一直是技术社区讨论的热点。本文将深入剖析Redis的单线程模型,探讨其背后的设计哲学、实现机制以及在实际应用中的最佳实践。 Redis单线程模型概述 Redis的单线程模型指的是其核心功能&#xf…

【SAP HANA 26】视图(Views)

创建视图及注释 -- 用租户DB1的NEWUSER操作 create view newuser.zv_student as select zno as student_no, zname as student_name,zsex as student_sex,zage as student_age from newuser.zstudent; --增加视图注释 comment on view newuser.zv_student is 学生信息视图; c…

代码随想录算法训练营Day60|LC84 柱状图中最大的矩形

一句话总结:完结撒花! 原题链接:84 柱状图中最大的矩形 与接雨水的单调栈做法类似。代码如下: class Solution {public int largestRectangleArea(int[] heights) {int[] newHeight new int[heights.length 2];System.arrayco…

Ansible初识以及安装

1. Ansible应用简述: Ansible基于python语言实现,由Paramiko和PyYAML两个关键模块构建。具有独特的设计理念: 1)安装部署简单 2)管理主机便捷,支持多主机并行管理 3)避免在被管理主机上安装客户…

SpringBoot集成Sharding-jdbc(水平分表)

SpringBoot集成Sharding-jdbc(水平分表) 1.Sharding-jdbc的应用场景2.实际使用2.0 项目层级2.1 导入依赖2.2 application.yml配置2.3 dao层2.4 对应的mybatis的xml文件2.5 Service层2.6 pojo2.7 controller2.8 多线程配置 1.Sharding-jdbc的应用场景 其…

C#面向对象——封装、封装案例示例

C#面向对象——封装 什么是封装? (1)封装是将数据和操作数据的方法(行为)封装在一起。 (2)程序中封装的体现:属性,方法,类,接口,命名空间&#…