用于在 Python 中匹配具有相似 ID 字符串的两个集合的分类器
Posted
技术标签:
【中文标题】用于在 Python 中匹配具有相似 ID 字符串的两个集合的分类器【英文标题】:Classifier for matching two sets with similar ID strings in Python 【发布时间】:2019-06-09 01:15:55 【问题描述】:我有 2 组数据,它们具有共同的特征集,但它们的 ID 名称标签不同。
我想看看是否有一个最佳分类器可以帮助我根据这些特征选择哪些名称匹配是最佳选择。
Set 1
看起来像:
Name ID1 code1 move1 year
Highland 1 nc st 2002
Highland 4 nc st 2001
Highland gt3 nc st 2002
Highland gt2 nc st 2003
Mark wt1 ns st 2000
Mark ws1 ns st 1945
Mark ost6 nc ct 2002
Niko 1 ng ct 2000
.
.
Set 2
看起来像:
Name ID2 code2 move2 year
Highland gt1 nc st 2002
Highland gt3 nc st
Highland 2 nc st 2003
Highland gt4 nc st 2001
Mark t1 ns st 2000
Mark s1 nsi st
Mark ost6 nci ct 2002
Niko 1 ngi ct 2000
.
.
正如您所看到的,这两个集合存在一些差异,但Name
始终相同——ID 有时几乎匹配,有时完美匹配。其他时候,codes
或 moves
匹配或接近,有时年份通常只是缺少一组。
我已经计算出fuzzy ratios
使用Levenshtein Distances
作为这些ID,但它们不足以让我真正匹配。
有没有办法使用 SVM 之类的东西更好地识别这些 ID?
【问题讨论】:
您是否尝试将 set1 的完整行与 set2 匹配? 我正在尝试使用ID1
和 ID2
的 ID 名称相似性和功能相似性进行匹配。所以我认为匹配这两个 ID 会间接地将它们的行匹配在一起。
我在想可能有一种方法可以将每一行转换为一个元组,并以某种方式将元组转换为 SVM 可以运行的分组?
我过去所做的是将权重分配给不同的匹配类型。所以,名字会变得很重。然后 id1、年份等的尾数最高分“获胜”。你操纵系数和权重,直到你适合你的 pop1==pop2。演示起来并不容易,但是当您开始使用它时,这个想法就会变得足够清晰。 Levenstein 距离,恕我直言,有点昂贵的红鲱鱼 - 你需要成为泥潭指令。
@JLPeyret 是否有一个可行的示例可以更好地理解您的意思?
【参考方案1】:
尝试使用fuzz.token_set_ratio()
而不是fuzzy.ration()
。
使用 fuzz.token_set_ratio() 你会得到一个很好的匹配。
欲了解更多信息,请访问docs。
【讨论】:
以上是关于用于在 Python 中匹配具有相似 ID 字符串的两个集合的分类器的主要内容,如果未能解决你的问题,请参考以下文章