1.1. 更新词典
更新词典,又被称为个性化热词上传,包括更新本地语法文件的词典,以及更新在线听写的词典。词典的内容格式及更详细调用说明,参考MSC Android API 文档中 SpeechRecognizer 类的 updateLexicon 函数介绍。
1.1.1. 在线听写词典
无论在哪一种语言中,不同的单词或字(word),或多或少,都会有相似的发音(pronounce)。尤其在汉语中,这种现象更普遍,如当一个人说 /zhang/ /s[h]an/ 时,对应的词语的组成,可能是 {张,章,彰,…} {三,姗,珊,…},这些文字的组合,在汉语的习惯中出现频率最高的,当然是“张三”了。
而在听写返回结果时,会结合上下文,把日常生活中,出现频率最高的词汇返回给客户端。这时,如果我们实际想要的结果并不是出现频率最高的词汇,如上文中我们实际要的是“张姗”——这样的情况在手机联系人信息中经常会出现,此时听写结果就不是我们想要的。这种情况下,我们可以通过上传个性化热词的方式,把在同样发音情况下,自己希望最优先匹配的词语告知语音云服务器。
个性化热词通过应用调用SDK函数上传时,影响的范围是,当前 APPID 应用的当前设备——即同一应用,不同设备里上传的热词互不干扰;同一设备,不同APPID的应用上传的热词互不干扰。另外,更新的热词仅对对应的语言区域(LANGUAGE)和方言(ACCENT)(在部份特殊场景,此两个参数可能被 "ent" 参数代替)生效,如果听写时指定了不同的LANGUAGE,ACCENT,或 "ent",则更新热词时,也应当指定对应的参数值。
如果需要一次上传热词,更新给当前APPID的所有使用设备,则可通过开发者平台网站上传应用级热词:讯飞开放平台。
词典上传后,也会在语义理解(见后面章节)中生效。
mAsr.setParameter( SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD );
// lexiconName 为词典名字,lexiconContents 为词典内容,lexiconListener 为回调监听器
ret = mAsr.updateLexicon( lexiconName, lexiconContents, lexiconListener );
1.1.2. 离线语法词典
离线语法词典,旨在更新已构建的语法文件中某个规则里的内容,因此在更新时,需要指定识别资源路径,语法文件路径,语法列表(语法文件的语法名字)。
mAsr.setParameter( SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL );
// 指定资源路径
mAsr.setParameter( ResourceUtil.ASR_RES_PATH, asrResPath );
// 指定语法路径
mAsr.setParameter( ResourceUtil.GRM_BUILD_PATH, grmPath );
// 指定语法名字
mAsr.setParameter( SpeechConstant.GRAMMAR_LIST, grammarName );
// lexiconName 为词典名字,lexiconContents 为词典内容,lexiconListener 为回调监听器
ret = mAsr.updateLexicon( lexiconName, lexiconContents, lexiconListener );