背后的故事
我正在创建一个使用x-webkit-speech
的语音控制应用程序,这个功能出奇的好(不是我的应用),但有时用户(我)会说话含糊不清。如果某个单词的合理部分与某个合理命令的合理部分相匹配,那么接受该命令将会很好。因此,我寻找被称为“单词集中最大交集算法”的圣杯。是否有一些新鲜而聪明的头脑能够帮我走出绝望的洞穴呢?
示例
"rotation" in ["notable","tattoo","onclick","statistically"]
应该匹配tattoo,因为它与rotation(tat_o)有最长的交集。 Statistically是第二好的选择(tati交集),因为需要忽略单词的较长部分(但这是奖励条件,即使没有它也可以接受)。
注意:
- 我使用捷克语,发音非常接近书写形式。 - JavaScript是首选语言,但任何伪代码都可以接受。 - 交集的最小长度应该是算法的参数。
我尝试过什么?
嗯,这很尴尬...
for(var i=10; i>=4; --i) // reasonable substring
for(var word in words) // for all words in the set
for(var j=0; j<word.length-i; ++j) // search for any i substring
// aaargh... three levels of abstraction is too much for me