これは非常にコンテキスト固有の問題であるため、そのように対処する必要があると思います。まず、実際に 2 つの名前が等しい理由は何ですか? 同じ名前が任意の順序で含まれているということですか? 次に、それを検出する必要があります。略語はありますか?「ミセス」などの称号はありますか?ハイフンを含む二重名がある場合、どうなりますか? あなたの例は、あなたが抱えている問題を十分に詳細に説明していないと思います。誰かがアルゴリズムを提供する前に、等しい名前と等しくない名前の例と、それらの名前が等しい理由を提供する必要があります。
すなわち
ジョン・F・ケネディ=ジョン・フィッツジェラルド・ケネディ?
ジョン・F・ケネディ氏=ジョン・ケネディ?
異なるスペルを見ると、さらに悪化します。
ヤヤ トゥーレ = トゥーレ ヤヤ ?
このような問題では、問題はすぐに非常に複雑になります。2 つのセットの等価性を比較するだけでよく、スペル、略語、タイトルなどを無視できる場合は、セットの交差を確認してください。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