3

我正在下载我的电子邮件主题行的长列表,目的是找到我多年前加入的电子邮件列表,并希望从我的 Gmail 帐户中清除它们(这变得非常缓慢。)

我特别考虑经常来自同一地址的通讯,并在主题中重复产品/服务/组的名称。

我知道我可以按来自特定电子邮件地址的常见项目进行搜索/排序(我打算这样做),但我想将这些数据与重复的主题行关联起来......

现在,许多主题行将无法匹配字符串,但“Google Friends : Our latest news”“Google Friends : What we are today”比随机主题行更相似,例如:“Virgin Airlines has今天大减价” “搭乘维珍航空的航班”

那么 - 我怎样才能开始自动提取可能更相似的字符串的趋势/示例。

我考虑过并放弃的方法(“因为必须有更好的方法”):

  • 提取所有可能的子字符串并按照它们出现的频率对其进行排序,并手动选择相关的子字符串
  • 剥离第一个或两个单词,然后计算每个子字符串的出现次数
  • 比较条目之间的 Levenshtein 距离
  • 某种字符串相似度索引...

其中大多数因效率低下或可能需要大量人工干预而被拒绝。我想我需要某种模糊字符串匹配..?

最后,我可以想出一些笨拙的方法来做这件事,但我正在寻找更通用的东西,所以我已经添加到我的工具集中,而不是这个数据集的特殊外壳。

在此之后,我会将特定主题字符串的出现与“发件人”地址进行匹配 - 我不确定是否有一种构建数据结构的好方法,该数据结构表示两条消息是“同一电子邮件”的一部分的可能性有多大列表”或通过将我所有的电子邮件主题/地址过滤到可能的“相关”电子邮件池中,而不是 - 但这是在此之后要解决的问题。

任何指导将不胜感激。

4

2 回答 2

4

我首先将每个字符串转换为一组或多组单词(忽略标点符号和小写/大写的差异)。(如果这还不够强大,在第二遍中,我可以尝试成对甚至是三个相邻的单词,称为二元组和三元组)。如此减少的字符串之间相似性的关键衡量标准是,哪些词总体上不是高频词(不是theand等;-) 对两个字符串都是通用的,因此一个简单的集合交集(或多集合交集,但对于您的简单用例,我认为只有集合可以正常工作,尤其是二元组)应该足以衡量“共性”。两个字符串共有的单词越稀有,它的价值就越高,因此整个语料库中单词频率的负对数是这个启发式的一个很好的起点。

于 2010-05-02T00:54:38.977 回答
1

平滑的 BLEU

您也许可以利用受试者之间的平滑BLEU分数。BLEU 是一种评估指标,用于评估机器翻译系统产生的翻译与人类产生的翻译的相似程度。平滑 BLEU 的计算方式与普通 BLEU 分数类似,不同之处在于您将 n-gram 匹配计数加一,以便在评估短文本段时避免将任何内容乘以零。

Smooth-BLEU 的计算速度应该比 Levenshtein 距离快得多,同时仍能捕获词序信息,因为它查看的是n-gram匹配,而不仅仅是单个词之间的匹配。

不幸的是,我没有指向 Python BLEU 实现的指针,但您会在此处找到 NIST 的 Perl 实现。

于 2010-05-03T00:32:37.483 回答