0

我正在为以下示例寻找模糊字符串算法:给定现有名称的数据库,如果匹配的准确性高于输入阈值,则将匹配输入匹配到最匹配的名称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 

目前,大多数算法,如莱文施泰因和拼音基础的像探测法所无法比拟的倒名称,如BondJames。到目前为止,余弦和提花产生最好的结果,但我正在寻找更多,以便我可以选择最好或可能结合算法。

回答

3

鉴于你的例子,我会考虑:

  • 分离N1 - 在输入和N2的名字 - 在数据库变成文字的名称(由分隔符和大写字母):N1 - > {U1,求出n2中最小化单词顺序的排列s = = sum(L(u,v))其中L是Levenshtein距离。
  • 选择最小化的数据库条目s

当L1的单词数和字数在L2数不匹配 - 你应该“惩罚” 小号

+0

好主意Lior,谢谢。一个问题:你将如何去分离jamesbond,没有逗号或上限的好处? – user1569897

+0

我能想到的一种方法可能是允许1-2组交换/重新分配字符组的算法,而不会受到任何惩罚。 (最多2个,因为可能有三个组-herbertbondjames,例如)我想不出一个现有的算法,或者其他可以考虑bondjames - > jamesbond标准的算法。 – user1569897

+0

当输入名称有一个词,而不是将其分开时,我会连接组成不同排列的数据库名称的单词,并最小化L(u,v1 || v2 || ...))。 (''||'表示串联)。 –