假设我想使地址记录(或人名或其他名称)相互匹配,以合并最有可能引用同一地址的记录。基本上,我想我想计算文本值之间的某种相关性,如果该值超过某个阈值,则合并记录。

例子:
“西割草机驱动器54 A”可能与“W.割草机Dr. 54A”相同,但与“东割草机驱动器54 A”不同。

您将如何解决这个问题?在地址情况下,是否需要某种基于上下文的字典来知道“W”,“W”。和“西部”是一样的吗?拼写错误如何处理(用“mover”代替“mower”等)?

我认为这是一个棘手的问题-也许那里有一些著名的算法?

最佳答案

好的字符串距离算法是一个好的基线,就其相对较高的计算成本而言,可能不切实际,更重要的是,它会产生许多误报。

  • Edit distance(又称Levenshtein距离)
  • Ratcliff/Obershelp

  • 根据所需的准确度水平(应在BTW中用recall and precision来指定,即通常表示错过关联是否比误识别一个关联更重要),基于[以下某些启发式方法和构想可以解决的问题:
  • 将输入标记化,即将输入视为单词数组而不是字符串
  • token 化还应保留行号信息
  • 通过使用简短的常用替换字典来规范化输入(例如,在行的末尾添加“dr” =“drive”,“Jack” =“John”,“Bill” =“William” ...,行首的“W.”是“West”等。
  • 标识(类似于POS标记中的标记)某些实体的性质(例如邮政编码和扩展邮政编码,以及城市
  • 识别(查找)其中一些实体(例如,相对较短的数据库表可以包括目标区域中的所有城市/城镇
  • 标识(查找)一些与域相关的实体(如果所有/很多地址与法律界人士打交道,则对律师事务所名称或联邦建筑物的查找可能会有所帮助。
  • 通常,应更加重视来自地址
  • 最后一行的 token
  • 对具有特定实体类型(例如:“Drive”,“Street”,“Court”)的 token 赋予更多(或更少)的权重,应比它们之前的 token 少得多。
  • 考虑修改后的SOUNDEX算法以帮助规范

  • 考虑到以上几点,请实现一个基于规则的评估器。暂时地,可以将规则实现为树状或数组状结构的访问者,在该结构中最初会解析输入(Visitor design pattern)。
    基于规则的框架的优势在于,每种启发式方法都有其自身的功能,并且可以对规则进行优先级排序,即在链中尽早放置一些规则,并通过一些强有力的启发式方法(如:不同的City = >相关= 0,置信度= 95%,依此类推...)。

    搜索相关性的一个重要考虑因素是需要先验比较每个单个项目(此处为地址)与其他每个项目,因此需要多达1/2 n^2项目级比较。因此,以引用项的预处理(解析,规范化...)的方式存储引用项,并且可能具有可作为[非常[粗略]指示符(例如,由5位邮政编码组成的键,后跟“主要”名称的SOUNDEX值)。

    10-05 22:57
    查看更多