我正在使用 android 中的语音识别功能,我可以对着我的设备说话并看到一个可能的单词列表。
当我说“开始”时,它给了我以下它认为它听到的词:
- 股票
- 股票
- 停止
- 开始
- 停止
- 斯塔克斯
该列表将取决于其他各种因素中的用户口音。有没有一种简单的方法可以检查该列表中的特定单词?
如果用户发出命令“开始”或“停止”,我需要能够分辨这两个命令之间的区别。
我最初的想法是使用正则表达式来检查任何响应中的“sta”或“sto”,有没有更有效的方法?
我正在使用 android 中的语音识别功能,我可以对着我的设备说话并看到一个可能的单词列表。
当我说“开始”时,它给了我以下它认为它听到的词:
该列表将取决于其他各种因素中的用户口音。有没有一种简单的方法可以检查该列表中的特定单词?
如果用户发出命令“开始”或“停止”,我需要能够分辨这两个命令之间的区别。
我最初的想法是使用正则表达式来检查任何响应中的“sta”或“sto”,有没有更有效的方法?
通常,我建议您为返回的每个单词生成一个Soundex,将整个列表与您要查找的单词的 Soundexe 作为匹配字符的一小部分进行评分,并使用这些分数来确定哪个单词更有可能成为一场比赛。
例如,开始编码为S363
和停止编码为S310
。以匹配字符的百分比对这些单词进行评分,结果如下表所示:
Word Soundex S363 S310
---- ------- ---- ----
stocks S320 0.50 0.75
stock S320 0.50 0.75
stop S310 0.50 1.00
start S363 1.00 0.50
stops S312 0.50 0.75
starks S362 0.75 0.50
---- ----
Average Score 0.63 0.71
不幸的是,这给出了错误的答案(即使您知道您说的是start ,您说stop的概率也更高),因为您的两个词有很多共同点。当识别器匹配你的一个目标词并在同一个回合中将它与另一个混淆时,你真的无法知道说话者实际上说的是哪一个。
您可以通过选择不太相似的单词来解决此问题,例如go和stop或begin和end。然后你可以完全放弃 Soundex,只在返回的列表中寻找你的目标词。您必须在应用程序的其他本地化版本中注意这一点,因为其他语言可能有类似的问题(例如,法语有allez和arrêtez)。
HTH。