假设我想使地址记录(或人名或其他名称)相互匹配,以合并最有可能引用同一地址的记录。基本上,我想我想计算文本值之间的某种相关性,如果该值超过某个阈值,则合并记录。
例子:
“西割草机驱动器54 A”可能与“W.割草机Dr. 54A”相同,但与“东割草机驱动器54 A”不同。
您将如何解决这个问题?在地址情况下,是否需要某种基于上下文的字典来知道“W”,“W”。和“西部”是一样的吗?拼写错误如何处理(用“mover”代替“mower”等)?
我认为这是一个棘手的问题-也许那里有一些著名的算法?
最佳答案
好的字符串距离算法是一个好的基线,就其相对较高的计算成本而言,可能不切实际,更重要的是,它会产生许多误报。
根据所需的准确度水平(应在BTW中用recall and precision来指定,即通常表示错过关联是否比误识别一个关联更重要),基于[以下某些启发式方法和构想可以解决的问题:
考虑到以上几点,请实现一个基于规则的评估器。暂时地,可以将规则实现为树状或数组状结构的访问者,在该结构中最初会解析输入(Visitor design pattern)。
基于规则的框架的优势在于,每种启发式方法都有其自身的功能,并且可以对规则进行优先级排序,即在链中尽早放置一些规则,并通过一些强有力的启发式方法(如:不同的City = >相关= 0,置信度= 95%,依此类推...)。
搜索相关性的一个重要考虑因素是需要先验比较每个单个项目(此处为地址)与其他每个项目,因此需要多达
1/2 n^2
项目级比较。因此,以引用项的预处理(解析,规范化...)的方式存储引用项,并且可能具有可作为[非常[粗略]指示符(例如,由5位邮政编码组成的键,后跟“主要”名称的SOUNDEX值)。