Unity語音識別專案續 字串匹配演算法

2021-08-01 01:52:51 字數 1516 閱讀 4577

上次寫了個語音識別的部落格,能夠識別錄製的音訊檔案並轉成乙個字串。效果很好,而且還是識別的中文。不過很快又意識到幾個問題:

1.你不能指望每次翻譯的都那麼準確,或者說,一字不差。

2.口語化的表達使得往往一大堆的語句其實是乙個意思。

所以我們不難發現乙個事實,如果語音識別要拿來用的話,這種對應最好不要是一一對映的,就比如,如果我只識別到了玩家說了「攻擊」,才讓我們的遊戲物體做出相應的操作的話,那麼問題來了,萬一玩家實際說的是「進攻」,抑或是更口語化的表達,又或者說是說了攻擊但被識別成了「公雞」,那怎麼辦呢?難道就不執行這種操作了嗎?這顯然是不行的。

於是便有了兩個想法:建立一張等價表,這是一張多對一的對映表,多種輸入可以達成同一種輸出,其次,對於乙個字串,只需要字元相似度達到一定的時候,就認為是同乙個句子。

思路有了,很快就能擼出乙個字串配對的小系統,以下是**:

using unityengine;

using system.collections;

using system.collections.generic;

namespace stringtoinstruct

public int find(string s,ref float pairrate)

}if (temp_max_pairrate >= endurewrongrate)

else

}public int insertinstruct()

public void insert_index(int instruct,string word)

private float pair(string str1,string str2)

{ int len1 = str1.length;

int len2 = str2.length;

int[,] dif = new int[len1+1, len2+1];

for(int i=0;i

其本質上是通過計算有多少不同的字元和總字元的比值算出的相似性。

最開始維護乙個二維陣列,這個二維陣列是有意義的索引為[i][j]的資料存的是字串1前i個和字串2的前j個中字元的差異個數。

所以在初始化的時候,我們能確定的是d[0][i]=i;d[i][0]=i;

接著乙個雙層迴圈就是乙個很簡單的動態規劃了,狀態轉移方程是

dif [i, j] = min (dif[i-1,j-1]+temp,dif[i,j-1]+1,dif[i-1,j]+1);

很容易理解,dif[i][j]的值有且只有三種**,dif[i-1][j-1]加上第i是不是等於第j,或者[i-1][j]+1(因為多出的那乙個必然是不一樣的,沒字元和他配對啊),或者[i][j-1]+1(同理了)

最後就是輸出一下dif[len1][len2]即可了。

下面是一些測試字串配對系統的結果:

沒截圖完,反正大概就是輸出了一下配對相似性的結果。

語音識別專案報告 pdf

您所在位置 首頁 海量文件 中學教育 中學課件 語音識別專案報告.pdf61頁 3.登入後可充值,立即自動返金幣,充值渠道很便利 語音識別專案報告 1.簡介 語音識別即對語音進行處理以得到語音的語義,說話人等資訊。因為語音固有的復 雜性,語音識別是乙個具有挑戰性的問題,每年都有著大量研究。語音識別一...

字串操作 續

第三節字串操作 續 1.字串中新增字串 在字串之前加入字串用insert 函式實現,而在字串之後加入字串用apend 函式實現。cstring str t this as a long story str.insert 0,諺語 printf n s str 漢語意思為 說來話長!printf n ...

imx6ul藍芽語音識別專案之1 硬體準備

硬體 在一些時間的延誤後,終於收到了順豐過來的板子,本以為需要到年後了。聽說板子的延誤是因為發現了乙個小問題。收到板子後開啟看到的是盒子包裝,看起來 高大上 的感覺 開啟,裡面有一張v3 軟體的bsp,網線,otg usb 線,以及 電源線 核心的板子看起來不錯,至少做工和基本可見的佈線很漂亮 但是...