算法检测Python数据集中的重复/类似字符串(例如电子邮件主题)
作者:互联网
这个问题已经在这里有了答案: > A better similarity ranking algorithm for variable length strings 22个
我正在下载一长串电子邮件主题行,目的是查找我几年前曾加入的电子邮件列表,并希望从我的Gmail帐户中清除它们(此过程相当缓慢).
我特别想到的是时事通讯通常来自同一地址,并在主题中重复产品/服务/组的名称.
我知道我可以根据特定电子邮件地址中常见的项目进行搜索/排序(而且我打算这样做),但是我想将该数据与重复的主题行相关联…
现在,许多主题行将无法通过字符串匹配,但是
“ Google朋友:我们的最新消息”
“ Google朋友:我们今天在做什么”
比随机主题行更相似,如下所示:
“维珍航空今天的销售量很大”
“搭乘维珍航空搭乘航班”
所以-我如何开始自动提取可能更相似的字符串趋势/示例.
我考虑并放弃的方法(“因为必须有更好的方法”):
>提取所有可能的子字符串并按照它们出现的频率排序,然后手动选择相关的子字符串
>剥离第一个或两个单词,然后计算每个子字符串的出现
>比较条目之间的Levenshtein距离
>某种字符串相似性索引…
其中大多数由于效率低下或需要大量手动干预而被拒绝.我想我需要某种模糊的字符串匹配.
最后,我可以想到执行此操作的笨拙方法,但是我正在寻找更通用的方法,因此我将添加到我的工具集中,而不是为此数据集添加特殊的大小写.
之后,我将特定主题字符串的出现与“发件人”地址进行匹配-我不确定是否有一种很好的方法来构建一个数据结构,该数据结构表示“同一封电子邮件中是否有两封邮件”列表”或通过将我的所有电子邮件主题/地址过滤到可能的“相关”电子邮件池中而不是-但这是要解决的问题.
任何指导将不胜感激.
解决方法:
我首先将每个字符串转换成一组单词或一组单词(忽略标点符号和大小写差异). (如果那还不够强大,我可以在第二遍中尝试成对甚至三倍的相邻单词,称为双字母组和三字母组).如此减少的字符串之间相似度的关键指标是,两个字符串整体上哪些词的整体频率不高(不是the和and等;-),所以一个简单的集合交集(或多集交集),但供您简单使用在我看来,只要套就行就可以了,特别是套二元组就足以衡量“共通性”.对于两个字符串来说,一个共同的词应该更有价值,因此它在整个语料库中的出现频率为负数,这对于这种启发式方法来说是一个很好的起点.
标签:data-mining,email,fuzzy-search,string,python 来源: https://codeday.me/bug/20191106/2000136.html