字符串匹配,不管R中的单词和短格式的顺序:R中的模糊字符串匹配

时间:2018-04-18 03:32:10

标签: r regex string string-matching levenshtein-distance

我是R的新手,想要比较2个字符串(地址)

  1. 除了数字之外,单词顺序可能不同。 (连续数字需要按相同顺序排列)
  2. 单词有时可能是简短的形式,例如街道可能是st。,西北可能是North W。
  3. 1个字符串可以包含一个单词或2个额外的单词(其余单词将相同)
  4. 有时可能在一个单词中有空格,例如Pitampura - > Pitam pura。

    例如

  5.   

    S1 = QU 23/24 Shalimar Bagh,Pitampura,Street no。 22,德里

         

    S2 = QU Flat 23/24 Pitam Pura,St。22,Shalimar Bagh,Delhi

    到目前为止,我已删除地址中的特殊字符,空格,冗余字词。

    像cosine或levenshtein距离这样的距离公式是一个不错的选择。如果是,请如何在不使用任何包的情况下在R 中应用相同的内容。

    不必自由安装任何外部包。

    提前致谢。

1 个答案:

答案 0 :(得分:1)

不是一个直接的答案,而是一个想法:你可以计算出在另一个向量中出现的分裂小写单词的分数,并建立某种阈值。在R中,这可能是:

S1 <- "QU 23/24 Shalimar Bagh, Pitampura, Street no. 22, delhi"
lcwords1 <- tolower(unlist(strsplit(S1, " ")))

S2 <- "QU Flat 23/24 Pitam Pura, St. No. 22, Shalimar Bagh, Delhi"
lcwords2 <- tolower(unlist(strsplit(S2, " ")))

(score <- sum(lcwords1 %in% lcwords2)/length(lcwords1) + 
          sum(lcwords2 %in% lcwords1)/length(lcwords2)) / 2

并且得分

[1] 0.7070707

其中1将是相等的向量 您很可能需要将此包装在一个会产生结果的函数中,请参阅a similar post here