## 更新詞典
[TOC]
更新詞典,又被稱為個性化熱詞上傳,包括更新本地語法文件的詞典,以及更新在線聽寫的詞典。詞典的內容格式及更詳細調用說明,參考《MSC Reference Manual.html》中 SpeechRecognizer 類的 updateLexicon 函數介紹。
### 在線聽寫詞典
無論在哪一種語言中,不同的單詞或字(word),或多或少,都會有相似的發音(pronounce)。尤其在漢語中,這種現象更普遍,如當一個人說 /zhang/ /s[h]an/ 時,對應的詞語的組成,可能是 {張,章,彰,...} {三,姍,珊,...},這些文字的組合,在漢語的習慣中出現頻率最高的,當然是“張三”了。
而在聽寫返回結果時,會結合上下文,把日常生活中,出現頻率最高的詞匯返回給客戶端。這時,如果我們實際想要的結果并不是出現頻率最高的詞匯,如上文中我們實際要的是“張姍”——這樣的情況在手機聯系人信息中經常會出現,此時聽寫結果就不是我們想要的。這種情況下,我們可以通過上傳個性化熱詞的方式,把在同樣發音情況下,自己希望最優先匹配的詞語告知語音云服務器。
個性化熱詞通過應用調用SDK函數上傳時,影響的范圍是,當前 APPID 應用的當前設備——即同一應用,不同設備里上傳的熱詞互不干擾;同一設備,不同APPID的應用上傳的熱詞互不干擾。另外,更新的熱詞僅對對應的語言區域(LANGUAGE)和方言(ACCENT)(在部份特殊場景,此兩個參數可能被 "ent" 參數代替)生效,如果聽寫時指定了不同的LANGUAGE,ACCENT,或 "ent",則更新熱詞時,也應當指定對應的參數值。
如果需要一次上傳熱詞,更新給當前APPID的所有使用設備,則可通過開發者平臺網站上傳應用級熱詞:[訊飛開放平臺](http://www.xfyun.cn/services/voicedictation?tab_index=2)。
詞典上傳后,也會在語義理解(見后面章節)中生效。
~~~
mAsr.setParameter( SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD );
// lexiconName 為詞典名字,lexiconContents 為詞典內容,lexiconListener 為回調監聽器
ret = mAsr.updateLexicon( lexiconName, lexiconContents, lexiconListener );
~~~
### 離線語法詞典
離線語法詞典,旨在更新已構建的語法文件中某個規則里的內容,因此在更新時,需要指定識別資源路徑,語法文件路徑,語法列表(語法文件的語法名字)。
~~~
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 );
~~~