使用soundex()或metaphone()创建Mad Gab样式短语的算法

Jas*_*ary 14 php mysql soundex metaphone

我正在尝试创建一个可以建议Mad Gab风格短语的算法.

输入是一组短语.我也有一组关键字,我想尽可能使用.目前,我的解决方案只是蛮力:

  • 循环短语(逐个字符)
    • 如果找到关键字
      • store关键字和分支(递归)
    • 增量字符数

但是,我遇到的问题是:

  • 复合关键字的帐户,例如"捕获"可以是"捕获","猫"+"奶酪"
  • 允许使用字面术语 - "the","and","one","two","three".
  • 如何建议不是关键字的术语.即当找不到关键字或文字时,重新回到类似系统字典的东西上.
  • 略过短语片段.现在它只是通过了一次.但是考虑一下这个短语以不匹配的东西开头但后面的几个字符包含匹配的情况.

我最熟悉PHP和MySQL.但是,如果能提供更好的解决方案,我对另一项技术持开放态度.

我也对任何其他建议感兴趣.特别是使用第二个参数metaphone()提出更难建议的方法.

Jon*_*low 6

也许从短语bank上的音节分割算法开始.您甚至可以使用一个简单的资源来教孩子们分割音节来创建粗略的分隔符方法:

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

然后,您有一个单词bank的英语单词词典.有很多可用的开源词典可以放在MySQL表中.

从第一个音节开始,在字典中查找与soundex测试匹配的随机单词.如果找不到(这通常只能找到一个音节词),请添加附加音节并再次搜索.

例:

"逻辑后果"

A.音节分裂

"lo gi cal con sequence"

B.应用Vowel声音

"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'));

我认为使用MySQL soundex比PHP soundex测试更容易,如果你想要一个大数据库的随机结果并且你已经在字典表中的字段中捕获了soundex值.

我的建议可能效率低下,但优化是一个不同的问题.

更新:

我并不是说暗示我的解决方案只会产生一个音节词.我用一个音节作为例子,但如果你把两个音节放在一起,你就会得到多音节的匹配.事实上,你可能只是开始将所有音节一起干扰并在mysql中运行soundex.如果你找到答案,那很好.但是你可以滚动音节,直到你得到最长的匹配.然后你留下了短语的结尾,可以把它们放在一起并运行一个匹配.我认为这是其他贡献者下面解决方案的本质,但我认为你需要避免在没有空格的情况下将所有字母一起干扰.在英语中,你会丢失信息.想一个以"th"声开头的短语.如果将短语卡在一起,则会丢失所需的"声音"."Theremin"(乐器)的声音与"There,a man"不同.