我正在尝试创建一个算法,以建议疯狂的加布风格的短语。
输入是一组短语。我也有一组关键字,我想在可能的时候使用。目前,我的解决方案只是蛮力:
- increment character count
然而,我遇到的问题是:
我最熟悉PHP和MySQL。但是,如果另一种技术提供了更好的解决方案,我将对它持开放态度。
我也对任何其他建议感兴趣。特别是使用metaphone()的第二个参数来提出更难的建议的方法。
发布于 2012-03-28 01:53:30
也许从短语库上的一个音节除法开始。您甚至可以使用一个简单的资源来教孩子们分割音节来创建粗略的分隔方法:
http://www.ewsdonline.org/education/components/scrapbook/default.php?sectiondetailid=7584
如果你想要一种更技术性的、完全准确的方法,就有一篇关于如何做到这一点的博士论文:
http://www.tug.org/docs/liang/
然后将每个音节转换为语音表示,使用的是您自己滚动的内容或metaphone()。您可以使用类似的网站来解释元音规则。这些只是泛化。如果你转动自己的元音,你会把元音和辅音分开处理。Metaphone只使用辅音,这很好,但不像你也考虑元音那样酷。
元音:sounds.html辅音:http://usefulenglish.ru/phonetics/english-consonant-sounds
然后,你就有了一本英文单词词典,用于你的字库。有许多开源词典可供您在MySQL表中使用。
从第一个音节开始,在字典中寻找一个与soundex测试相匹配的随机单词。如果找不到一个音节(这通常只会找到一个音节),那么添加额外的音节,然后再搜索。
示例:
“逻辑后果”
A音节分裂
“我的命令”
B.元音应用
“哎呀,我要去看看昆斯”
C.辅音的应用
"lah kon见quinse“
D.文本测试(一个音节soundex -obviously太容易猜到,但它证明了这个概念)
“法律天啊叫”
Soundex strcmp的返回一个数字。所以,如果你愿意,你可以预先得到你的字库中所有东西的soundex值。然后您可以快速运行strcmp。
Soundex MySQL比较的一个例子是:
选择strcmp(soundex('lah'),soundex(‘law’);
我认为,如果您希望从大型数据库中获得随机结果,并且已经在字典表中的字段中捕获了soundex值,那么使用PHP测试比使用PHP测试更容易。
我的建议可能效率低下,但优化是另一个问题。
更新:
我并不是在暗示我的解决方案只会产生一个音节的词。我用一个音节作为例子,但是如果你把两个音节连在一起,你就会得到多音节匹配。实际上,您可以从将所有音节放在一起并在mysql中运行soundex开始。如果你找到答案的话,太好了。但是,你可以滚动音节,直到你得到最长的匹配,你可以。然后剩下短语的结尾,可以把它们放在一起,然后进行匹配。我认为这是另一个贡献者的解决方案的本质,但我认为你需要避免把所有的字母都没有空格干扰在一起。在英语中,你会以这种方式失去信息。想一想一个以"th“开头的短语。如果你把这句话塞在一起,你就失去了需要“这个”声音的声音。"Theremin“(乐器)的声音与”那里,一个人“不同。
https://stackoverflow.com/questions/9777094
复制相似问题