У меня есть список имен полных имен и я пытаюсь сравнить / найти совпадения фонетически похожих полных имен; Я использую Double metaphone
в моем C #
скажи, что мой список такой;
Abdul Hameed Khan
Shadab Akbar
Nawab Zameer Ahmed Baloch
Richard Hyden
Abdullah Habib
Abu Saleh Muhammad
Ravi Kumar
Ameet Kumar Rathore
Amit Shah
когда я пытаюсь найти в Double Metaphone
, он будет искать только начальное слово (имя).
Как бы сделать этот поиск, если я напишу Хамид , это должно вернуть Абдул Хамид-хана. в настоящее время он возвращается только с именем.
Еще одна вещь, как я сравниваю арабские или урду имена в этом алгоритме.
здесь работает внешний код;
Hashtable wordsMap = new Hashtable();
FileStream wordsFile = File.OpenRead("..\\..\\..\\names.txt");
StreamReader reader = new StreamReader(wordsFile);
String word = reader.ReadLine();
while (word != null)
{
DoubleMetaphone mp = new DoubleMetaphone(word);
//Associate word with primary key
ArrayList words = (ArrayList)wordsMap[mp.PrimaryKey];
if (words == null)
{
words = new ArrayList();
wordsMap[mp.PrimaryKey] = words;
}
words.Add(word);
//Associate with with alternate key also
if (mp.AlternateKey != null)
{
words = (ArrayList)wordsMap[mp.AlternateKey];
if (words == null)
{
words = new ArrayList();
wordsMap[mp.AlternateKey] = words;
}
words.Add(word);
}
//Read the next word
word = reader.ReadLine();
}
//Begin prompting for search words
while (true)
{
System.Console.Write("\nEnter search term (q to quit): ");
String searchWord = System.Console.ReadLine().Trim();
if (searchWord.Length == 0 || searchWord == "q")
{
break;
}
DoubleMetaphone searchMphone = new DoubleMetaphone(searchWord);
//Search for matches to the primary key
ArrayList matches = (ArrayList)wordsMap[searchMphone.PrimaryKey];
if (matches != null)
{
foreach (String matchingWord in matches)
{
System.Console.WriteLine("\tFound: {0}", matchingWord);
}
}
//Search for matches to the alt, if present
if (searchMphone.AlternateKey != null)
{
matches = (ArrayList)wordsMap[searchMphone.AlternateKey];
if (matches != null)
{
foreach (String matchingWord in matches)
{
System.Console.WriteLine("\tFound: {0}", matchingWord);
}
}
}
}
этот исходный код в качестве ссылки используется: https://www.codeproject.com/Articles/4624/Implement-Phonetic-Sounds-like-Name-Searches-wit