Возможно, начните с алгоритма деления слогов на банке фраз. Вы можете использовать даже простой ресурс, который учит детей разделять слоги, чтобы создать метод грубого деления:
http://www.ewsdonline.org/education/components/scrapbook/default.php?sectiondetailid=7584
Если вы хотите более технический, абсолютно точный способ, вы должны были получить докторскую степень. диссертация о том, как это сделать:
http://www.tug.org/docs/liang/
Затем превратите каждый слог в фонетическое представление, используя то, что вы катите сами или метафон (). Вы можете использовать подобный сайт, который объясняет правила гласного звука. Это будут только обобщения. Вы будете обрабатывать гласные отдельно от согласных, если катите свои собственные. Метафон просто использует согласные, что хорошо, но не так круто, как если бы вы также учитывали гласные.
Гласные:
http://www.eslgold.com/pronunciation/english_vowel_sounds.html
Согласные буквы:
http://usefulenglish.ru/phonetics/english-consonant-sounds
Тогда у вас есть словарь английских слов для вашего банка слов. Существует множество доступных словарей с открытым исходным кодом, которые можно вставить в таблицу MySQL.
Начните с первого слога и найдите в словаре случайное слово, которое соответствует тесту soundex. Если вы не можете найти одно (обычно это только один слог), добавьте дополнительный слог и повторите поиск.
* * Пример тысяча двадцать-один: * * 1 022
"Логическое следствие"
A. Слог раскол
"логическая последовательность"
B. Применены гласные звуки
"Lah Gee Cahl Con см Айва"
C. Согласные звуки
"lah jee kahl kon see quinse"
D. Тест Soundtext (один слог soundex - очевидно, слишком легко угадать, но он подтверждает концепцию)
"Law Gee Call Con Sea Quints"
Soundex strcmp возвращает число. Так что, если хотите, вы можете заранее получить значения soundex всего в вашем банке слов. Тогда вы можете быстро запустить strcmp.
Пример сравнения Soundex MySQL:
select strcmp (soundex ('lah'), soundex ('law'));
Я думаю, что использование soundex в MySQL проще для вас, чем тест soundex в PHP, если вы хотите получить случайный результат из большой базы данных, и вы уже захватили значение soundex в поле таблицы словаря.
Мое предложение может быть неэффективным, но оптимизация - это другой вопрос.
Обновление:
Я не хотел подразумевать, что мое решение даст только один слог. Я использовал один слог в качестве примера, но если вы возьмете два слога вместе, вы получите многосложные совпадения. Фактически, вы могли бы просто начать с объединения всех слогов и запуска soundex в mysql. Если вы найдете ответ, отлично. Но тогда вы можете скатывать слоги, пока не получите максимально длинное совпадение. Тогда вы остаетесь с концом фразы и можете взять их вместе и провести матч. Я думаю, что это суть решения, представленного ниже, от другого участника, но я думаю, что вам нужно избегать объединения всех букв без пробелов. На английском вы потеряете информацию таким образом. Подумайте о фразе, начинающейся с "th" звука. Если вы смешиваете фразу вместе, вы теряете, какой "й" звук нужен. «Термен» (инструмент) имеет другой «й» звук, чем «Там, человек».