語料切詞演算法研究

2022-03-16 19:57:56 字數 3522 閱讀 9669

b123y5

15元,一路順風」等。

語音索引號

語音內容00

11。。。9910

十11百12

千13萬14

年15月16

日17天18

歡迎光臨

19一路平安

20此卡

21已過期

22無效

23有效

24有效期

。。。37a38

b。。。61y

62z63京

64黑。。。96學97

警。。。

101請繳費

102點

103元

。。。112

您113

好114

謝謝115

歡迎回家

。。。161

歡迎162

泊車163

一路順風

。。。表

1,語料庫

b123y5

歡迎光臨」,按照上述語料庫,分別對應:京à63

,bà38

,1à1

,2à2

,3à3

,yà61

,5à5

,歡迎光臨à18

,就需要按順序傳遞「語音索引號」引數列表:63,

38,1,2,3,61,5,18

本文研究對於給定的語料庫,輸入任意文字字串,如何高效轉換為語料庫中對應的「語音索引號」列表。

顯然,要實現上述需求,就要對輸入的文字串進行切分(即切詞),同時切分之後的各部分片段應滿足以下要求:

1)盡可能多地對應於語料庫元素,即無法讀出的片段盡量少

2)優先採用語料庫中較長元素,使語音讀出更加自然。如,假設語料庫中有「有效期」、「有效」、「期」三種元素,那麼切詞應將「有效期」切為乙個詞,而不是切為「有效」、「期」

2個詞。

3)計算速度盡可能快,耗用

cpu和記憶體盡可能少。

首先,由於切詞的位置和長度不確定,造成切詞結果的可能性組合非常大。如輸入乙個

20字元的句子,對於乙個語料長度最多

10字元的

1000

條語料庫來說,完全的匹配計算次數為:

1000*10^20

次。參照主流

pc機每秒

100億次浮點運算的能力,需要時間為

10^13

秒。而一般實際要求均需要毫秒級反饋,因此採用有效演算法進行查詢十分必要。

有效演算法依賴於有效的查詢表,構建乙個適合順序查詢的「語料查詢表(

plt)」很有必要。以下為構建要點:

1)基於語料庫

2)按語料字段排序,而不是按索引號排序

3)為滿足「要求

3「,應從第乙個字元開始比對和定位,因此對於語料庫中不存在首單字索引的語料,要增加「虛擬」語料。如語料庫中有「歡迎」一詞,但沒有「歡」這個字,就增加一條語料「歡」,其索引為

-1,表示不存在。

4)擴充套件

plt欄位:除了語音元素(語料)、索引號以外,增加長度、標記。

a)長度為語音元素的位元組數。如

a長度為

1,「歡迎光臨「長度為8b)

標記為語料查詢提供提示。詳見第5條。

5)為滿足「要求

2「,在已經查詢到語料時,應繼續向後查詢,看看是否能匹配到更長的語料。假設第

l條語料的語音元素為y(

l),若

y(l)

不包含在

y(l+1)

中,則不必向後查詢,此時第

l條語料的「標記」字段設定為

0;否則設定為

1,其後凡包含

y(l)

的語料,設定「標記」欄位為

2.語料查詢表(

plt,

part lookup table

)編制原理如上,具體編制過程可程式設計實現。

如下是依據「表

1,語料庫」實現的乙個

plt。

語音元素

長度標記

索引號010

0110

1。。。91

09a1

037b1

038。。。y10

61z10

62澳20

152百20

11。。。成2

1133成功4

230川2

077。。。光21

-1光臨42

165歡21

-1歡迎42

161歡迎光臨82

18歡迎回家82

115及21

-1及時42

186。。。按2

1-1按臨時車計費122

204表

2,語料查詢表(

plt)

輸入:insentence

字串1)

n=02)

n=n+1

3)n>length(insentence)?

若是,結束演算法;否則繼續44)

取insentence第n

個位元組byten

5)byten

是否在為

0-9或

a-z之間?若是,則轉

100;否則轉36)

n=n+17)取

insentence第n

個漢字元

charn8)在

plt中查詢長度為

2的元素,是否有匹配

m?若無,轉

2;若有,轉99)

記錄下m

的索引為

idx,標記為

f10)

f是否為

0?若是,轉

100;若否,轉

1111)

m=m+1

12)記錄

m的標記是否為

2?若否,轉

200;否則轉

1313)設m

的長度為

l,語音元素為

charm

,索引號為

idxm

。14)

取insentence

長度為l

的字串與

charm

比對是否一致。

15)若一致,則

n=n+l

,將索引號

idxm

,加入結果集,轉

2;否則轉

11100)

在plt

中查詢byten

的索引號

idx,加入結果集,轉

2200)

將索引號

idx,加入結果集,轉

2輸入:你好

ab請等待歡迎回來請及時繳費

返回:,-1,113,37,38,98,161,-1,-1,155,186,174

語料切詞表如下:

語料切詞

語料索引你-1

好113a37

b38請等待98

歡迎161回-1

來-1請155

及時186

繳費174

可見,除了語料庫中不存在的「你」、「回」、「來」這

3個詞以外,其餘輸入均進行了正確切分,演算法實現了語料切詞的

3條需求。

python 切詞演算法(正向切割 反向切割)

author wanghuafeng coding utf 8 import os import sys import codecs from collections import deque try path os.path.dirname os.path.abspath file except ...

從語料中找出低頻詞 去除無用資訊

1.做文字聚類時,有些低頻詞是分詞錯誤或者無用資訊,前期需要處理掉 關鍵 from collections import couter deffunc counter word list count result counter word list print count result 乙個字典物件...

演算法 變位詞

如果兩個單詞的組成字母完全相同,只是字母的排列順序不一樣,則它們就是變位詞,兩個單詞相同也被認為是變位詞。如tea 與eat nic 與cin,ddc與dcd,abc與abc 等。你的任務就是判斷它們是否是變位詞。第一行乙個n,表示下面有n行測試資料。每行測試資料報括兩個單詞,如tea eat 它們...