文字相似之处

数据挖掘 r 文本挖掘 文本
2022-02-27 17:39:08

我有一个电子邮件列表,我正在尝试查找“相似”的电子邮件。

例如:

DanB@gmail.com

DanB1@gmail.com

Dan12B@yahoo.com

对我来说将是“相似的”。

如果您熟悉可以在此处应用的方法,我将很高兴听到。

PS 我可用的工具是 Teradata (SQL) 或 R。

先感谢您

2个回答

由于您的问题非常庞大,并且没有人会为您完成这项工作,因此这是您的起点,至少可以让您了解各种字符串比较算法的工作原理:

library(stringdist)
library(stringi)
library(purrr)

emails <- c("ed@microsoft.com", "DanB@gmail.com", "DanB1@gmail.com", "Dan12B@yahoo.com",
            "fred@outlook.com", "bill@juno.com", "Danb21@aol.com", "ed@tumblr.com")

naive_regex <- stri_match_all_regex(emails, "([[:print:]]+)@(.*)")

addressees <- map_chr(naive_regex, 2)

methods <- c("osa", "lv", "dl", "hamming", "lcs", "qgram", "cosine", "jaccard", "jw", "soundex")

map(seq_along(addressees), function(i) {
  map_df(methods, function(method) {
    c(addressees[i] ,method, stringdist(addressees[i], addressees, method=method)) %>% 
      as.list() %>% 
      setNames(c("looking_for", "method", addressees))
  })
})

输出太长,无法放在这里,但它是一个比较矩阵列表,如下所示:

## [[2]]
## # A tibble: 10 × 9
##    looking_for  method    ed  DanB              DanB1            Dan12B  fred  bill            Danb21
##          <chr>   <chr> <chr> <chr>              <chr>             <chr> <chr> <chr>             <chr>
## 1         DanB     osa     4     0                  1                 2     4     4                 3
## 2         DanB      lv     4     0                  1                 2     4     4                 3
## 3         DanB      dl     4     0                  1                 2     4     4                 3
## 4         DanB hamming   Inf     0                Inf               Inf     4     4               Inf
## 5         DanB     lcs     6     0                  1                 2     8     8                 4
## 6         DanB   qgram     6     0                  1                 2     8     8                 4
## 7         DanB  cosine     1     0  0.105572809000084 0.183503419072274     1     1 0.387627564304205
## 8         DanB jaccard     1     0                0.2 0.333333333333333     1     1 0.571428571428571
## 9         DanB      jw     1     0 0.0666666666666668 0.111111111111111     1     1              0.25
## 10        DanB soundex     1     0                  0                 0     1     1                 0

一旦您了解了可接受的公差,您就可以创建一个算法来匹配 => 删除 / 匹配 => 删除等。