字符串按相似度分组

相关代码已经上传GitHub : https://github.com/EricLi404/go-utils

0x00 概述

在做在做反垃圾账号业务的时候,检测发现有几十名用户都在某个IP上有过行为打点。

# 原始数据
꧁❥?➦SAMI?MMS➣?❥꧂
꧁❥?➦Ⓜ️AHI?MMS➣?❥꧂..
jgcch7b?V?O?I?
2kc7fd7?V?O?I?
꧁❥?➦VIDYA?MMS➣?❥꧂
RcR?Raden??F
RcR?Raden?B
꧁❥?➦RESMA?MMS➣?❥꧂
Sanny8_star197
꧁❥?PARI?MMS➣?❥꧂
❁════❃MAHAKAL❃══7══❁
꧁❥?BIPASHA?MMS➣?❥꧂
.꧁❥?ISRAT?MMS?꧂
ek8660?V?O?I? 
a8h9163?V?O?I?
꧁❥?➦NIRA?➣?❥꧂
꧁❥?PARINEETI?MMS?꧂
RcR?Raden?J
dem3ba2?V?O?I?
ggk5b27?V?O?I?
?RcR?Raden??

可以很明显的感知到其中部分账号存在一定的相似性,现需要将这几十名用户按相似性分为若干组,因此提出了一种基莱文斯坦距离和并查集结构的算法,来实现将一组字符串按相似度提取出若干不重复组的功能。

0x01 理论基础

莱文斯坦距离

Wikipedia:
莱文斯坦距离,又称Levenshtein距离,是编辑距离的一种。指两个字串之间,由一个转成另一个所需的最少编辑操作次数。允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

例如将kitten一字转成sitting:

  1. sitten (k→s)
  2. sittin (e→i)
  3. sitting (→g)

则两者之间莱文斯坦距离为3.
俄罗斯科学家弗拉基米尔·莱文斯坦在1965年提出这个概念。

其用途主要有 DNA分析、拼写检查、语音辨识、抄袭侦测 。

并查集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值