Soundex - это фонетический алгоритм индексации имен по звуку, который произносится на английском языке. Цель состоит в том, чтобы омофоны были закодированы в одно и то же представление, чтобы их можно было сопоставить, несмотря на незначительные различия в написании.

Эта функция вернет 4-символьный звуковой индекс заданной строки.

публичная строка Soundex (строковые данные)

StringBuilder result = новый StringBuilder ();

if (data! = null && data.Length ›0)

строка previousCode, currentCode;

result.Append (Char.ToUpper (данные [0]));

previousCode = string.Empty;

for (int i = 1; i ‹data.Length; i ++)

currentCode = EncodeChar (данные [i]);

если (текущийКод! = предыдущийКод)

result.Append (currentCode);

if (result.Length == 4) break;

если (! currentCode.Equals (строка.Empty))

previousCode = currentCode;

result.Append (new String (‘0’, 4 - result.Length));

вернуть результат.ToString ();

частная строка EncodeChar (char c)

}

Функция разности сопоставит две строки soundex и вернет от 0 до 4.

public int Difference (строковые данные1, строковые данные2)

if (data1.Equals (string.Empty) || data2.Equals (string.Empty))

строка soundex1 = Soundex (data1);

строка soundex2 = Soundex (data2);

если (soundex1.Equals (soundex2))

если (soundex1 [0] == soundex2 [0])

строка sub1 = soundex1.Substring (1, 3); // символы 2, 3, 4

если (soundex2.IndexOf (sub1) ›-1)

строка sub2 = soundex1.Substring (2, 2); // символы 3, 4

если (soundex2.IndexOf (sub2) ›-1)

строка sub3 = soundex1.Substring (1, 2); // символы 2, 3

если (soundex2.IndexOf (sub3) ›-1)

если (soundex2.IndexOf (sub4) ›-1)

если (soundex2.IndexOf (sub5) ›-1)

если (soundex2.IndexOf (sub6) ›-1)

Первоначально опубликовано на techno-soft.com.