也许从短语库上的音节划分算法开始。您甚至可以使用教孩子划分音节的简单资源来创建粗略的划分方法:
http://www.ewsdonline.org/education/components/scrapbook/default.php?sectiondetailid=7584
如果您想要一种更技术、更准确的方法,那么有一个博士学位。关于如何做的论文:
http://www.tug.org/docs/liang/
然后使用您自己滚动的内容或 metaphone() 将每个音节转换为语音表示。您可以使用解释元音发音规则的类似网站。这些只是概括。如果您自己滚动,您将处理元音与辅音分开。Metaphone 只使用辅音,这很好,但不如你还考虑元音那么酷。
元音:
http://www.eslgold.com/pronunciation/english_vowel_sounds.html
辅音:
http ://usefulenglish.ru/phonetics/english-consonant-sounds
然后,您的单词库中有一本英语单词词典。有许多可用的开源字典,您可以将它们粘贴到 MySQL 表中。
从第一个音节开始,在字典中查找与 soundex 测试匹配的随机单词。如果你找不到一个(这通常只会找到一个音节词)添加额外的音节并再次搜索。
例子:
“逻辑后果”
A. 音节分割
“逻辑后果”
B. 应用元音
“lah gee cahl con see quince”
C. 应用辅音
"lah jee kahl kon see quinse"
D. Soundtext 测试(一个音节 soundex - 显然太容易猜到,但它证明了这个概念)
“Law Gee Call Con Sea Quints”
Soundex strcmp 的返回一个数字。因此,如果您愿意,您可以提前获取单词库中所有内容的 soundex 值。然后你可以快速运行strcmp。
Soundex MySQL 比较的一个示例是:
选择 strcmp(soundex('lah'), soundex('law'));
如果您想从大型数据库中获取随机结果并且您已经在字典表的字段中捕获了 soundex 值,我认为使用 MySQL soundex 比 PHP soundex 测试更容易。
我的建议可能效率低下,但优化是一个不同的问题。
更新:
我并不是要暗示我的解决方案只会产生一个音节词。我以一个音节为例,但如果你把两个音节放在一起,你会得到多音节匹配。实际上,您可能只是从将所有音节组合在一起并在 mysql 中运行 soundex 开始。如果您找到答案,那就太好了。但是随后您可以滚动音节,直到获得最长的匹配。然后你就剩下短语的结尾了,你可以把它们放在一起进行匹配。我认为这是其他贡献者提供的以下解决方案的精髓,但我认为您需要避免将所有字母拼凑在一起而没有空格。在英语中,您会以这种方式丢失信息。想一个以“th”音开头的短语。如果你把短语混在一起,你会失去哪个“th” 需要声音。“Theremin”(乐器)的“th”音与“There, a man”不同。