名称的近似字符串匹配算法

时间:2017-07-18 15:13:28

标签: string algorithm string-matching fuzzy-comparison approximate

我正在寻找以下示例的模糊字符串算法:给定现有名称的数据库,如果匹配准确度高于输入阈值(比如90%),则将输入匹配到最匹配的名称,或者NA否则

database = [James Bond, Michael Smith]

输入

James L Bond->James Bond
JBondL->James Bond
Bond,James->James Bond
BandJamesk->James Bond
Jenny,Bond->N/A

目前,大多数算法如Levenstein和基于语音的算法(如Soundex)都无法匹配像BondJames这样的反转名称。到目前为止,余弦和提花产生了最好的效果,但我正在寻找更多,以便我可以选择最佳或可能的组合算法。

1 个答案:

答案 0 :(得分:5)

考虑到你的例子,我会考虑:

  • 分隔n1 - 输入中的名称和n2 - 数据库中的名称为单词(通过分隔符和大写字母):n1 - > {u1,u2,...},n2 - > {V1,V2,...}
  • 找到n2中最小化 s = sum(L(u,v))的单词顺序的排列,其中L是Levenshtein距离。
  • 选择最小化 s 的数据库条目。

当L1中的单词数量与L2中的单词数量不匹配时,您应该“惩罚”#39; 取值