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

String 名称的近似字符串匹配算法,string,algorithm,string-matching,fuzzy-comparison,approximate,String,Algorithm,String Matching,Fuzzy Comparison,Approximate,我正在为以下示例寻找模糊字符串算法:给定一个现有名称的数据库,如果匹配精度高于输入阈值(比如90%),则将输入匹配到最佳匹配名称,否则为NA database = [James Bond, Michael Smith] 输入 目前,大多数算法,如Levenstein和基于语音的算法,如Soundex,无法匹配像BondJames这样的倒装名。到目前为止,余弦和Jacquard产生了最好的结果,但我正在寻找更多,以便我可以选择最好的算法或可能的组合算法。根据您的示例,我会考虑: 将输入中的n1

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

database = [James Bond, Michael Smith]
输入


目前,大多数算法,如Levenstein和基于语音的算法,如Soundex,无法匹配像BondJames这样的倒装名。到目前为止,余弦和Jacquard产生了最好的结果,但我正在寻找更多,以便我可以选择最好的算法或可能的组合算法。

根据您的示例,我会考虑:

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

当L1和L2中的单词数不匹配时,您应该“惩罚”。

好主意,Lior,谢谢。一个问题:在没有逗号或大写字母的情况下,您如何分离jamesbond?我可以想到的一种方法可能是一种允许1-2个字符组交换/重新定位而不受任何惩罚的算法。(最大值为2,因为可能有三个组-例如herbertbondjames)我想不出一个现有的算法可以做到这一点,或者任何其他算法可以考虑bondjames->jamesbond的标准。当输入名称有一个单词时,不要将其分开,我将以不同的排列方式连接构成数据库名称的单词,并最小化L(u,v1 | | | v2 | | |……)。(“| |”表示串联)。
James L Bond->James Bond
JBondL->James Bond
Bond,James->James Bond
BandJamesk->James Bond
Jenny,Bond->N/A