-1

同じ名前の 2 つの表現の比較を検証する必要があるシナリオがあります。たとえば、人の名前1が次のように表されているとしましょう

Person1Name= Venkata Phani Kumar Parimi

同じ人の名前2が次のように表されているとしましょう

Person2Name= クマール・パリミ・ベンカタ・パニ

もう1つのシナリオは

ジョン・F・ケネディ=ジョン・フィッツジェラルド・ケネディ

上記は、以下のケースに比べて優先度が高くなります。

ジョン・F・ケネディ=ジョン・ケネディ

2 つの異なるコンテキストであっても、上記の 2 人は同じ人を指します。

C#で名前を比較して同一人物か確認する方法があれば教えてください

4

3 に答える 3

0

これは非常にコンテキスト固有の問題であるため、そのように対処する必要があると思います。まず、実際に 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

 
于 2012-04-16T13:01:13.837 に答える
0

これを使用してみてくださいSequenceEqual。まさにその仕事です:

  string s = "Subba Cargos";
  string s2 = "Cargos Subba";

  var isSame=  s.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).
               OrderBy(o => o).SequenceEqual(s2.Split(new[] {' '}, 
                   StringSplitOptions.RemoveEmptyEntries).
               OrderBy(o => o));
于 2012-04-16T13:05:13.267 に答える
0

または、簡潔にしたい場合:

        var person1name = "Venkata Phani Kumar Parimi";
        var person2name = "Kumar Parimi Venkata Phani";

        var match = person1name.Split().All(p => person2name.Split().Contains(p))
于 2012-04-16T13:16:01.570 に答える