3

我有一个包含一些品牌名称的数据集。通过预处理(例如小写、删除停用词、修剪空格、字符串拆分等),我从一开始的 320 个不同的案例增加到 114 个。但是,仍有一些改进的空间。

# A tibble: 6 x 3
  record Colum Name   
   <dbl> <chr> <chr>  
1      2 A     check24
2      3 A     NA     
3      7 A     weriwox
4      9 A     verifox
5     10 A     chec24 
6     11 A     smava  

如您所见,案例 3 与案例 4 类似,案例 1 与案例 5 类似。案例 6 没有等价物。有没有办法通过替换相似的字符串来连续标准化字符串?

一个想法是使用tidystringdist/stringdist包。在这里,我可以计算字符串的距离度量(例如 Levenstein 距离)。从这里我可以统一那些具有低距离措施的人(例如 osa < 3)。

library(dplyr)
library(tidystringdist)

comb = tidy_comb_all(d, Name)
tidy_stringdist(comb,  method = c("osa")) %>%
  filter(osa <= 2)

# A tibble: 6 x 3
  V1      V2         osa
  <chr>   <chr>    <dbl>
1 check24 chec24       1
2 check24 check42      1
3 check24 chevk24      1
4 check24 check34      1
5 check24 schek24      2
6 check24 scheck24     1

例如,根据结果,我可以去掉“chec24”和“check42”,将其替换为“check24”。所以我可以进一步减少名字的数量。目标不是获得“真实”的姓名匹配(因为我没有真实姓名的列表)。它更多是关于替换非常相似的名称以减少不同名称的总数。但是,我不知道该由谁来做……也许是一个 while 循环。

这是类似名称的小数据:

structure(list(record = structure(c(2, 3, 7, 9, 10, 11, 16, 22, 
39, 59, 89, 110, 113, 148, 167, 183, 184, 203, 270, 352, 399, 
1243, 1254, 1258, 1274, 1299, 1309, 1321, 1331, 1344, 1352, 1375, 
1383, 1416, 1417, 1421, 1484, 1493, 1555, 1571, 1575, 1588, 1590, 
1591, 1644, 1649, 1672, 1676, 1744, 1770, 1816, 1822, 1906, 1934, 
2080, 2090, 2335, 2374, 39, 148, 1299, 1334, 1487, 1681, 1816, 
2159, 2335, 2376, 2376, 148, 1254, 1334, 1254, 1254, 22, 25, 
29, 34, 59, 69, 75, 121, 122, 138, 148, 270, 706, 1230, 1274, 
1276, 1344, 1357, 1367, 1375, 1376, 1383, 1386, 1421, 1422, 1468, 
1486, 1493, 1507, 1715, 1743, 1790, 1822, 1837, 2159, 52, 1337, 
1386, 2257, 1241), label = "record: Record number", format.spss = "F7.0", display_width = 7L), 
    Colum = c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
    "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
    "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
    "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
    "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
    "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "C", "D", 
    "D", "D", "E", "F", "K", "K", "K", "K", "K", "K", "K", "K", 
    "K", "K", "K", "K", "K", "K", "K", "K", "K", "K", "K", "K", 
    "K", "K", "K", "K", "K", "K", "K", "K", "K", "K", "K", "K", 
    "K", "K", "K", "L", "L", "L", "L", "M"), Name = c("check24", 
    NA, "weriwox", "verifox", "chec24", "smava", "verivox", "targobank", 
    "facebook", "kredit24", "taunus", "credit24", "finazcheck", 
    "maxda", "diba", "norisbank", "scout24", "easycredit", "kredit", 
    "finanzcheck", "swawa", "check42", "barclaycard", "kredit24.de", 
    "idealo", "immo", "santander", "wüstenrot", "check24.de", 
    "citybank", "smawa", "smama", "preisvergleich", "smarva", 
    "finanzscheck", "parisba", "versch", "comdirect", "ing", 
    "fakten", "tau res", "chevk24", "24 check", "veritas", "verivox  check24  dr. klein", 
    "verivix.de", "easy", "easy-credit", "finanzsvout24", "check34", 
    "consorfinanaz", "sparkasse", "schek24", "ingdiba", "dr. klein", 
    "smavaa", "commerz", "sparda-bank", "youtupe", "creditplus", 
    "scout", "smavey", "interhyp", "krediten", "oostbank", "comdirekt", 
    "bank", "verivox.de", "preisvergleich24", "auxmoney", "hanseatikbank", 
    "klein", "advanzia", "americanexpress", "postbank", "targo", 
    "google", "kredit.de", "maxx", "moneycheck", "financescout24", 
    "yerivox", "finanzscout", "kreditvergleich.de", "volkswagen", 
    "vergleichskredit", "scheck24", "finanzscout24", "creditvergleich", 
    "preisvergleiche.de", "barclay", "toptarif", "finanztest", 
    "chech24", "dr. weber", "online-aspecte.de", "finanzcheck.de", 
    "targa", "checl24", "verybox", "verifox.de", "finanzen", 
    "n24", "finanzcheck24", "testsieger", "online", "volksbank", 
    "checkkredit.eu", "n26", "kreditvergleich", "finanzvergleich", 
    "kreditexperte.de", "kreditmacher", "samba")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -114L))
4

0 回答 0