【问题标题】:Text Match combinations文本匹配组合
【发布时间】:2017-08-01 09:26:28
【问题描述】:

我的数据如下所示

# dummy data 
ID = c(1,2,3,4,5,6,7,8,9,10,11,12)
addrs = c("3 xx road sg" , "4 yy road sg" , "5 apt 04-3 sg" , "Bung 2 , kl road sg","4 yy road sg" , "3 xx road sg" ,"Bung 2 , kl road sg" ,"5 apt 04-3 sg","3 xx road sg","Bung 2 , sg kl road","3xx Road sg","4 yy sg")
data.1=data.table(ID,addrs)

数据看起来像

   ID               addrs
1:  1        3 xx road sg
2:  2        4 yy road sg
3:  3       5 apt 04-3 sg
4:  4 Bung 2 , kl road sg
5:  5        4 yy road sg
6:  6        3 xx road sg
7:  7 Bung 2 , kl road sg
8:  8       5 apt 04-3 sg
9:  9        3 xx road sg

我想获得匹配的组合(基于 addrs)所需的输出是(“3 xx road sg”的唯一示例) - 如果 A 和 B 的 Addr 匹配,则表应该有 A-B - Match 和 B-A-Match

ID.1 ID.2 Match.1        Match.2      Accuracy  
 1    6   3 xx road sg   3 xx road sg   100%
 1    9   3 xx road sg   3 xx road sg   100% 
 6    9   3 xx road sg   3 xx road sg   100%
 9    6   3 xx road sg   3 xx road sg   100% 
 9    1   3 xx road sg   3 xx road sg   100%
 6    1   3 xx road sg   3 xx road sg   100% 

显示文本可能因空格、字符顺序或字符不同而不同的输出

ID.1   ID.2    Match.1                Match.2              Accuracy 
1       11    3 xx road sg            3xx Road sg            100 %
2       12    4 yy road sg            4 yy sg                 70 %    
4       10    Bung 2 , kl road sg    Bung 2 , sg kl road      100 %

当数据可能相似但写法不同时,如何处理文本匹配?

【问题讨论】:

    标签: text reshape lexicographic


    【解决方案1】:
    r <- merge(data.1, data.1, by="addrs", all=T, suffixes = c(".1",".2"))
    r[r$ID.1 != r$ID.2,]
    
                      addrs ID.1 ID.2
    2         3 xx road sg    1    6
    3         3 xx road sg    1    9
    4         3 xx road sg    6    1
    6         3 xx road sg    6    9
    7         3 xx road sg    9    1
    8         3 xx road sg    9    6
    11        4 yy road sg    2    5
    12        4 yy road sg    5    2
    15       5 apt 04-3 sg    3    8
    16       5 apt 04-3 sg    8    3
    19 Bung 2 , kl road sg    7    4
    20 Bung 2 , kl road sg    4    7
    

    【讨论】:

    • 谢谢,当数据不那么干净并且文本可能会以不同的方式编写时,有任何进一步的建议。任何基于文本字符匹配阈值的匹配,例如 90% 的字符匹配
    • 即使字符顺序不同?你可以看看计算levenshtein距离
    • 是的,尤其是那时。基本上该列是地址,其中有一个街区,道路名称,社会名称,城市。现在所有这些文本都被连接起来了。我总是可以将它分成 4 列,然后使用与 4 列相同的合并。这有意义吗?
    • 请在您的问题中为文本相似但不相同的场景添加预期输出。那我可以试一试
    • 我在数据中添加了一些行,其中包含因空格、顺序或缺失字符而异的文本示例。在表 2 中显示了具有通用准确性的输出,只是为了了解我们可以在哪里放置您建议的 levenshtein distance 。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多