这是一个非常具体的问题,所以我认为你需要这样解决它。首先,究竟是什么让两个名字相等?它是否包含相同的名称,以任何顺序?那么这就是你需要检测的。可以有缩写吗?可以有“夫人”之类的称谓吗?如果有连字符的双重名称,会发生什么?我认为您的示例没有足够详细地描述您遇到的问题。您需要提供更多名称相等和不相等的示例,以及为什么这些名称相等,然后任何人才能为您提供算法。
IE
约翰·F·肯尼迪 = 约翰·菲茨杰拉德·肯尼迪?
约翰·肯尼迪先生 = 约翰·肯尼迪?
如果您查看不同的拼写,情况会变得更糟。
亚亚图雷 = 图雷亚亚?
有了这些问题,问题很快就会变得非常复杂。如果您只需要比较两个集合的相等性并且您可以忽略拼写、缩写、标题等,那么只需检查集合交集。在类似 c# 的伪代码中
string[] names1 = name1.ToLowerInvariant().Split(' ');
string[] names2 = name2.ToLowerInvariant().Split(' ');
if (names1.Length != names2.Length)
return false; // unequal, different number of names
foreach(name in names1)
if (!names2.Contains(name))
return false; // unequal, missing name
return true; // equal