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.