Это не совсем легко сделать. Я бы сделал это с помощью простого статистического анализа.
Начните с загрузки словаря английских слов (или любого другого языка, на самом деле - вам просто нужен словарь слов, которые можно произносить). Затем возьмите каждое слово в словаре и разбейте его на 3-буквенные блоки. Поэтому, имея слово «словарь», вы можете разбить его на «dic», «ict», «cti», «tio», «ion», «ona», «nar» и «ary». Затем добавьте каждый трехбуквенный блок из всех слов в словаре в коллекцию, которая сопоставляет трехбуквенный блок с количеством раз, которое он появляется. Примерно так:
"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, и т. Д. Я думаю, потребуется немного помазать, чтобы все сделать правильно, я думаю.