kdb - KDB - 在一列中查找重复或相似的条目
问题描述
我正在尝试消除我的联系人列表中客户的重复条目。假设我的表有三列(FirstName、LastName、CustomerID)。
有人可以帮我创建一个查询,以识别具有相同或非常相似的名字和姓氏的不同 CustomerID 吗?由于销售人员搜索名称但由于拼写错误而没有找到它,我们最终得到了多个条目。然后,他们为客户创建一个名称拼写略有不同的新条目。
谢谢!
解决方案
一种方法是管理名称到常见(错误)拼写的映射,然后将所有各种拼写映射回预期的名称。然后将它们分组。
t:([] fn:100?(`John;`Mike;`Bob;`john;`Johnn;`Mick;`Bobby);ln:100?(`Doe;`Smith;`doe;`Do;`smith);id:til 100)
mapFN:exec similar!name from ungroup flip `name`similar!flip (
(`Bob; (`Bob;`bob;`Bobby;`bobby));
(`John; (`John;`Johnn;`john));
(`Mike; (`Mike;`mike;`Mick;`Michael))
);
mapLN:exec similar!name from ungroup flip `name`similar!flip (
(`Doe; (`Doe;`doe;`Do));
(`Smith; (`Smith;`smith;`Smyth))
);
没有映射:
q)`fn`ln xgroup t
fn ln | id
-----------| ----------------
Mick Do | 0 25 26 50 68 71
Bobby Smith| 1 22 23 83
John Smith| 2 8 48 51 69 85
Mike Doe | 3 44
john doe | ,4
Mick Doe | 5 47 95
John Doe | 6 46 49 63
john Smith| 7 66 74
Johnn doe | 9 13 79 94
Mick doe | 10 20 55 67
Bobby smith| 11 17 18 53
john Doe | 12 21 56
...
带映射:
q)`fn`ln xgroup update mapFN[fn],mapLN[ln] from t
fn ln | id
----------| -----------------------------------------------------------------
Mike Doe | 0 3 5 10 20 25 26 39 44 47 50 52 55 67 68 70 71 78 95 97
Bob Smith| 1 11 17 18 22 23 30 38 45 53 77 82 83
John Smith| 2 7 8 16 19 33 37 40 43 48 51 64 66 69 73 74 80 85 87
John Doe | 4 6 9 12 13 21 31 32 41 42 46 49 56 57 62 63 65 72 79 81 86 89 91
Bob Doe | 14 24 27 28 35 54 58 59 61 75 76 84
Mike Smith| 15 29 34 36 60 88 90 93 96 98
您还可以使用正则表达式模式匹配做一些更复杂的事情。
映射需要非常精确,否则您可能会得到错误的分组
推荐阅读
- javascript - 如何在 EEL 中将图像传递给 python 脚本
- php - 未捕获的 ReferenceError:在初始化之前无法访问词法声明“html”
- python - 序列化(到 json)包含 Django 查询集的字典,该查询集包含 DecimalField 项
- python - 派生自类型参数的 typing.Union
- python - 每个元素的高效 numpy 欧几里得距离计算
- flutter - 使用 google_mobile_ads 时横幅广告未在所有屏幕上显示
- excel - Excel 上关于时间未正确显示的初学者问题
- android - 如何在 Android Studio 4.2 中将模块导出到 .JAR / .AAR 包?
- python - 无限while循环使用哈希表上的开放寻址实现删除函数 - Python
- xampp - 通过 XAMPP 配置获取 HTTPS 流量