Это не совсем легко сделать. Я бы сделал это с помощью простого статистического анализа.
Начните с загрузки словаря английских слов (или любого другого языка, вам просто нужен словарь слов, которые «произносимы»). Затем возьмите каждое слово из словаря и разбейте его на блоки по 3 буквы. Таким образом, слово «словарь» можно разделить на «дик», «икт», «кти», «тио», «ион», «она», «нар» и «ари». Затем добавьте каждый трехбуквенный блок из всех слов в словаре в коллекцию, которая сопоставляет трехбуквенный блок с тем, сколько раз он появляется. Что-то вроде этого:
"dic" -> 36365
"ict" -> 2721
"cti" -> 532
И так далее... Затем нормализуйте числа, разделив каждое число на общее количество слов в словаре. Таким образом, у вас есть сопоставление трехбуквенных комбинаций с процентом слов в словаре, содержащих эту трехбуквенную комбинацию.
Наконец, реализуйте свой метод IsWordPronounceable
примерно так:
bool IsWordPronounceable(string word)
{
string[] threeLetterBlocks = BreakIntoThreeLetterBlocks(word);
foreach(string block in threeLetterBlocks)
{
if (blockFrequency[block] < THRESHOLD)
return false;
}
return true;
}
Очевидно, есть несколько параметров, которые вы захотите «настроить». Параметр THRESHOLD
равен единице, также размер блоков может быть лучше 2, 3 или 4 и т. д. Я думаю, потребуется немного помассировать, чтобы сделать это правильно.
person
Dean Harding
schedule
27.05.2010