【问题标题】:R: I have to do Softmatch in StringR:我必须在 String 中进行 Softmatch
【发布时间】:2013-06-05 16:53:50
【问题描述】:

我必须在一列数据框中使用给定的输入字符串进行软匹配,比如

col <- c("John Collingson","J Collingson","Dummy Name1","Dummy Name2")

inputText <- "J Collingson"
#Vice-Versa
inputText <- "John Collingson"

我想从提供的列名“col”中检索“John Collingson”和“J Collingson”

请帮忙

【问题讨论】:

    标签: r strsplit


    【解决方案1】:

    agrep 如果您只有一点数据,绝对是一个快速简单的基础 R 解决方案。如果这只是更大数据框的玩具示例,您可能会对更耐用的工具感兴趣。在过去的一个月里,了解@PaulHiemstra(也在these 不同的questions)提到的Levenshtein 距离使我找到了RecordLinkage 包。小插曲让我想要更多“软”或模糊匹配的例子,特别是在超过 1 个字段中,但您问题的基本答案可能是这样的:

    library(RecordLinkage)
    col <- data.frame(names1 = c("John Collingson","J Collingson","Dummy Name1","Dummy Name2"))
    inputText <- data.frame(names2 = c("J Collingson"))
    g1 <- compare.linkage(inputText, col, strcmp = T)
    g2 <- epiWeights(g1)
    getPairs(g2, min.weight=0.6) 
    # id          names2 Weight
    # 1  1    J Collingson       
    # 2  2    J Collingson  1.000
    # 3                          
    # 4  1    J Collingson       
    # 5  1 John Collingson  0.815
    
    inputText2 <- data.frame(names2 = c("Jon Collinson"))
    g1 <- compare.linkage(inputText2, col, strcmp = T)
    g2 <- epiWeights(g1)
    getPairs(g2, min.weight=0.6)
    # id          names2    Weight
    # 1  1   Jon Collinson          
    # 2  1 John Collingson 0.9644444
    # 3                             
    # 4  1   Jon Collinson          
    # 5  2    J Collingson 0.7924825
    

    请从 compare.linkage() 或 compare.dedup() 开始-- RLBigDataLinkage() 或 RLBigDataDedup() 用于大型数据集。希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      看来agrep 是您要查找的函数。它确实Approximate String Matching (Fuzzy Matching)。它根据某种距离度量返回与输入模式最接近的匹配,即广义的 Levenshtein 编辑距离。详情请见?agrep

      agrep("J Collingson", col, value = TRUE)
      [1] "John Collingson" "J Collingson"  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-13
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-16
        • 1970-01-01
        相关资源
        最近更新 更多