0.概述
1.实例
假设我们正在处理一个客户资料数据库,并试图识别重复的客户记录。数据记录中有这样的三行数据:
| ID | NAME | ADDRESS | ZIP | |
|---|---|---|---|---|
| 1 | J. Random Hacker | Main St 101 | 21231 | |
| 2 | John Random Hacker | Mian Street 101 | 21231 | hack@gmail.com |
| 3 | Jacob Hacker | Main Street 201 | 38122 | jacob@hotmail.com |
首先,Duke先从数据库中读取每条数据,并将数据记录转换为Duke记录对象。该过程中数据将被清洗。清洗后,数据如下:
| ID | NAME | ADDRESS | ZIP | |
|---|---|---|---|---|
| 1 | j. random hacker | main street 101 | 21231 | |
| 2 | john random hacker | mian street 101 | 21231 | hack@gmail.com |
| 3 | jacob hacker | main street 201 | 38122 | jacob@hotmail.com |
然后,Duke将对记录做详细的比较,看看他们代表同一客户的可能性是多少?。我们使用以下配置:
1 | <schema> |
注意这个address-comp比较器,这是一个对象引用,通常,你可以用以下方式创建对象引用。然后在需要使用的地方引用就可以了。
1 | <object class="no.priv.garshol.duke.comparators.WeightedLevenshtein$DefaultWeightEstimator" |
在上面的schema代码中,threshold(阀值)参数表示只有当概率为0.732(73.2%)或者更高时候,才能代表两个记录为同一事物。否则就认为这是两个不同的实物。含有忽略参数的属性将被忽略。
记录1和记录2的比较结果如下:
1 | ---ADDRESS1 |
如果我们比较记录1和3,结果是不同的:
1 | ---ADDRESS1 |
我希望这有助于说明Duke如何权衡来自不同领域的证据,并利用它来达成裁决。