一種拼音糾錯(cuò)方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提出了一種拼音糾錯(cuò)方法及系統(tǒng),該拼音糾錯(cuò)方法包括如下步驟:構(gòu)建詞庫,將用戶可能檢索的所有拼音串及其反轉(zhuǎn)字符串分別組織并存儲(chǔ)于正向、反向兩棵三叉搜索樹中;分析和檢測用戶輸入的檢索串,判斷其是否可拆分為若干音節(jié)串,獲取檢索串的錯(cuò)誤類型,所述錯(cuò)誤類型分為合法錯(cuò)誤和非法錯(cuò)誤;對(duì)合法錯(cuò)誤檢索串進(jìn)行合法糾錯(cuò),對(duì)非法錯(cuò)誤檢索串進(jìn)行非法糾錯(cuò),采用正向、反向兩棵三叉搜索樹的查詢操作獲取糾錯(cuò)結(jié)果;計(jì)算糾錯(cuò)結(jié)果中的所有拼音串與用戶輸入的檢索串的相似度,獲取相似度最大的K個(gè)拼音串并輸出。本發(fā)明的拼音糾錯(cuò)方算法設(shè)計(jì)簡潔、高效,糾錯(cuò)速度快,準(zhǔn)確率高。
【專利說明】一種拼音糾錯(cuò)方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)處理【技術(shù)領(lǐng)域】,具體涉及一種速度快、準(zhǔn)確率高的拼音糾錯(cuò)方法 及系統(tǒng)。
【背景技術(shù)】
[0002]拼音糾錯(cuò)技術(shù)是指檢測用戶輸入的拼音字符串,并對(duì)其中輸入有誤或不合理的拼 音字符進(jìn)行修改和優(yōu)化,從而保證輸出結(jié)果。在搜索應(yīng)用中,拼音檢索技術(shù)可以有效避開輸 入法,實(shí)現(xiàn)拼音原始性檢索,在一定程度上改變搜索行為;而在輸入法應(yīng)用中,拼音糾錯(cuò)技 術(shù)能夠自動(dòng)識(shí)別并修改用戶輸入的錯(cuò)誤字符串,以保證正確漢字輸出,提高輸入法的容錯(cuò) 性。拼音糾錯(cuò)技術(shù)能夠有效增強(qiáng)應(yīng)用擴(kuò)展性與用戶體驗(yàn)性。
[0003]目前,常用的拼音糾錯(cuò)技術(shù)解決方案有兩種:一種是基于統(tǒng)計(jì)的糾錯(cuò)技術(shù),這種技 術(shù)通過特定概率算法,如N-gram算法,計(jì)算用戶輸入拼音串中連續(xù)拼音字符出現(xiàn)的概率, 從而獲取糾錯(cuò)結(jié)果,這種基于統(tǒng)計(jì)的糾錯(cuò)方式能夠較好地適應(yīng)各種拼音應(yīng)用,但計(jì)算量較 大,響應(yīng)時(shí)間較長,降低用戶的體驗(yàn)性。另一種方法是基于規(guī)則的糾錯(cuò)技術(shù),這種技術(shù)是通 過提煉拼音詞條的規(guī)則,對(duì)用戶輸入的拼音串執(zhí)行規(guī)則檢驗(yàn)以獲取相應(yīng)的糾錯(cuò)結(jié)果,這種 基于規(guī)則的糾錯(cuò)方式響應(yīng)時(shí)間相對(duì)較短,計(jì)算量小,拼音規(guī)則與匹配詞庫的設(shè)計(jì)又相對(duì)簡 單,所以采用基于規(guī)則的糾錯(cuò)方式效果較好。
[0004]對(duì)用戶輸入的包含錯(cuò)誤字符的拼音串糾錯(cuò),糾錯(cuò)類型包括多、少或錯(cuò)一個(gè)字母,糾 錯(cuò)方式為一步糾錯(cuò),即用戶輸入的拼音串通過增加、刪除、修改一個(gè)字符即可轉(zhuǎn)化為用戶想 要輸入的正確拼音串。例如用戶輸入"(:]1〇1^99]_邱"、"(:11〇叫918"或"(:11〇叩93叫"均可糾錯(cuò) 為"Chongqing"。由于漢語音節(jié)字符串有410種,而中文常用漢字則有3500個(gè),無論在拼音 檢索還是拼音輸入法選字等應(yīng)用中,如果糾錯(cuò)范圍較大,則糾錯(cuò)結(jié)果集就會(huì)相應(yīng)增加,用戶 欲輸入的字符串與用戶實(shí)際輸入的字符串的相似度則越小,在建議結(jié)果集中的排序則越靠 后,這樣不僅增加用戶選擇的難度,而且降低糾錯(cuò)系統(tǒng)的性能與應(yīng)用性,例如:對(duì)于檢索串 "xiamin"糾錯(cuò)范圍確定為單字符糾錯(cuò)(用戶輸入的拼音串通過增加、刪除、修改1個(gè)字符) 時(shí),結(jié)果集為'4&1^"、、1&1^即"、41 &11161!"、"1:11^11,,、'4&011^11,,、、1611^11,,等,但若糾錯(cuò) 范圍較大,則"xiaoming"甚至"xiangming"等均會(huì)出現(xiàn)在結(jié)果集中,這樣用戶欲檢索的音 節(jié)串的相似度較低,無疑降低用戶的體驗(yàn)性。
【發(fā)明內(nèi)容】
[0005]為了克服上述現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的是提供一種拼音糾錯(cuò)方法及 系統(tǒng),該拼首流糾錯(cuò)方法算法間潔,能夠提聞拼首糾錯(cuò)的速度和準(zhǔn)確率。
[0006]為了實(shí)現(xiàn)本發(fā)明的上述目的,根據(jù)本發(fā)明的一個(gè)方面,本發(fā)明提供了一種拼音糾 錯(cuò)方法,包括如下步驟:
[0007] S1,構(gòu)建詞庫,將所有拼音串及其反轉(zhuǎn)字符串分別組織并存儲(chǔ)于正向、反向兩棵三 叉搜索樹中;
[0008] S2,分析和檢測用戶輸入的檢索串,判斷其是否可拆分為若干音節(jié)串,獲取檢索串 的錯(cuò)誤類型,所述錯(cuò)誤類型分為合法錯(cuò)誤和非法錯(cuò)誤;
[0009] S3,對(duì)合法錯(cuò)誤檢索串進(jìn)行合法糾錯(cuò),對(duì)非法錯(cuò)誤檢索串進(jìn)行非法糾錯(cuò),采用正 向、反向兩棵三叉搜索樹的查詢操作獲取糾錯(cuò)結(jié)果;
[0010] S4,計(jì)算糾錯(cuò)結(jié)果中的所有拼音串與用戶輸入的檢索串的相似度,獲取相似度最 大的K個(gè)拼音串并輸出。
[0011] 本發(fā)明的拼音糾錯(cuò)方法簡潔、高效,糾錯(cuò)速度快,準(zhǔn)確率高。
[0012] 在本發(fā)明的一種優(yōu)選實(shí)施例中,所述正向、反向兩棵三叉搜索樹包括如下特點(diǎn):
[0013] 樹中非葉子節(jié)點(diǎn)均有1-3個(gè)兒子節(jié)點(diǎn);
[0014] 每個(gè)節(jié)點(diǎn)存儲(chǔ)當(dāng)前節(jié)點(diǎn)的關(guān)鍵字及其指向兒子節(jié)點(diǎn)的指針;
[0015]非葉子節(jié)點(diǎn)的關(guān)鍵字不小于其左兒子節(jié)點(diǎn)的關(guān)鍵字,不大于其右兒子節(jié)點(diǎn)的關(guān)鍵 字。
[0016]本發(fā)明通過構(gòu)建正向、反向兩棵三叉搜索樹,采用正向、反向兩棵三叉搜索樹的查 詢操作獲取糾錯(cuò)結(jié)果,快速準(zhǔn)確。
[0017]在本發(fā)明的一種優(yōu)選實(shí)施方式中,在所述步驟S2中,如果檢索串可拆分為若干個(gè) 音節(jié)串,則將其拆分為最少音節(jié)串個(gè)數(shù)的形式;如果檢索串不能劃分為若干個(gè)音節(jié)子串,則 標(biāo)注其不能劃分的音符。
[0018]本發(fā)明通過檢測判斷檢索串是否可劃分為若干音節(jié)串組合形式,從而采取不同的 糾錯(cuò)策略;本發(fā)明選擇最少音節(jié)串的劃分方式能夠節(jié)省查找遍歷的次數(shù)以提高糾錯(cuò)效率。 [0019]在本發(fā)明的一種優(yōu)選實(shí)施方式中,所述非法檢索串的糾錯(cuò)流程為:
[0020] S41,獲取用戶輸入的經(jīng)過檢測后的檢索串;
[0021] S42,對(duì)步驟S41中的檢索串進(jìn)行預(yù)處理,獲取檢索串中的所有非法字符,并將所 有的非法字符標(biāo)記為*字符;
[0022] S43,如果檢索串中*字符位于檢索串中間,則分別采用正向、反向三叉搜索樹查 找相應(yīng)前綴的所有拼音串,將查找結(jié)集的交集作為糾錯(cuò)結(jié)果集,如果檢索串中*字符位于 檢索串的最左/右側(cè),則使用反向/正向三叉搜索樹查找,獲取特定前綴的所有拼音串作為 結(jié)果集;
[0023] S44,對(duì)糾錯(cuò)結(jié)果集進(jìn)行預(yù)處理,刪除糾錯(cuò)結(jié)果集中與檢索串長度之差的絕對(duì)值大 于1的拼首串;
[0024] S45,判斷糾錯(cuò)結(jié)果集是否為空,如果糾錯(cuò)結(jié)果集為空,則提示當(dāng)前糾錯(cuò)失敗。
[0025]在本發(fā)明的另一種優(yōu)選實(shí)施方式中,所述合法檢索串的糾錯(cuò)流程為:
[0026] S51,獲取用戶輸入的經(jīng)過檢測后的檢索串;
[0027] S52,分別將檢索串中的每個(gè)音節(jié)單獨(dú)替換為*字符,依次執(zhí)行后續(xù)步驟;
[0028] SM,如果檢索串中*字符位于檢索串中間,即*字符兩側(cè)均有音節(jié)串,分別采用正 反向三叉搜索樹查找相應(yīng)前綴的所有拼音串,將查找結(jié)集的交集作為糾錯(cuò)結(jié)果集,
[0029]如果檢索串中*字符位于檢索串的最左/右側(cè),則使用反向/正向三叉搜索樹查 找,獲取特定前綴的所有拼音串作為結(jié)果集;
[0030] S54,對(duì)糾錯(cuò)結(jié)果集進(jìn)行預(yù)處理,刪除糾錯(cuò)結(jié)果集中與檢索串長度之差的絕對(duì)值大 于1的拼音串;
[0031] S55,判斷糾錯(cuò)結(jié)果集是否為空,如果糾錯(cuò)結(jié)果集為空,則提示當(dāng)前糾錯(cuò)失敗。
[0032]本發(fā)明通過對(duì)合法檢索串和非法檢索串采用不同的糾錯(cuò)方法,糾錯(cuò)速度快,準(zhǔn)確 率高。
[0033] 在本發(fā)明的一種優(yōu)選實(shí)施方式中,所述相似度計(jì)算的步驟為:
[0034] S61,讀取檢索串與糾錯(cuò)結(jié)果集中的拼音串;
[0035] S62,正向匹配:從第一個(gè)字符開始判斷檢索串與糾錯(cuò)串是否相同,如果相同繼續(xù) 匹配后續(xù)字符,否則標(biāo)記當(dāng)前位置與已經(jīng)匹配的字符個(gè)數(shù);
[0036] S63,反向匹配:從最后一個(gè)字符至正向匹配標(biāo)記位置,開始判斷檢索串與糾錯(cuò)串 是否相同,如果相同繼續(xù)匹配之前字符,否則獲取反向匹配字符個(gè)數(shù);
[0037] se4,計(jì)算相似度:獲取正向、反向匹配后相同的字符個(gè)數(shù)之和以及對(duì)應(yīng)檢索串與 糾錯(cuò)串的最大長度,兩者求比獲取相似度;
[0038] S65,依據(jù)步驟S61至步驟se4計(jì)算糾錯(cuò)結(jié)果集中的所有拼音串的相似度,并將相 似度最大的K個(gè)拼音串置入建議結(jié)果集,返回給用戶。
[0039]在本發(fā)明的另一種優(yōu)選實(shí)施方式中,所述建議結(jié)果集中拼音串按照相似度大小逆 序排列。相似度最高的拼音串排在前面,提高用戶使用的體驗(yàn)性。
[0040] 為了實(shí)現(xiàn)本發(fā)明的上述目的,根據(jù)本發(fā)明的另一個(gè)方面,本發(fā)明提供了一種拼音 糾錯(cuò)系統(tǒng),其包括人機(jī)交互界面、控制器和存儲(chǔ)器,所述人機(jī)交互界面與所述控制器連接, 所述控制器與所述存儲(chǔ)器連接;所述存儲(chǔ)器內(nèi)存儲(chǔ)有所有拼音串及其反轉(zhuǎn)字符串,并將所 述拼音串及其反轉(zhuǎn)字符串分別組織并存儲(chǔ)于正向、反向兩棵三叉搜索樹;所述控制器用于: 分析和檢測用戶通過人機(jī)交互界面輸入的檢索串,判斷其是否可拆分為若千音節(jié)串,獲取 檢索串的錯(cuò)誤類型;對(duì)合法錯(cuò)誤檢索串進(jìn)行合法糾錯(cuò),對(duì)非法錯(cuò)誤檢索串進(jìn)行非法糾錯(cuò),采 用正向、反向兩棵三叉搜索樹的查詢操作獲取糾錯(cuò)結(jié)果;計(jì)算糾錯(cuò)結(jié)果中的拼音串與用戶 輸入的檢索串的相似度,獲取相似度最大的K個(gè)拼音串,并指令人機(jī)交互界面對(duì)相似度最 大的K個(gè)拼首串進(jìn)彳丁顯不。
[0041] 本發(fā)明的拼音糾錯(cuò)系統(tǒng)糾錯(cuò)速度快,準(zhǔn)確率高。
[0042] 在本發(fā)明的一種優(yōu)選實(shí)施方式中,所述控制器包括:預(yù)處理模塊、合法糾錯(cuò)模塊、 非法糾錯(cuò)模塊和相似度計(jì)算模塊;
[0043] 所述預(yù)處理模塊,用于分析和檢測用戶通過人機(jī)交互界面輸入的檢索串,判斷其 是否可拆分為若干音節(jié)串,獲取檢索串的錯(cuò)誤類型;
[0044] 所述預(yù)處理模塊分別與所述存儲(chǔ)器、合法糾錯(cuò)模塊和非法糾錯(cuò)模塊相連,用于對(duì) 合法錯(cuò)誤檢索串進(jìn)行合法糾錯(cuò),對(duì)非法錯(cuò)誤檢索串進(jìn)行非法糾錯(cuò),查詢正向、反向兩棵三叉 搜索樹的獲取糾錯(cuò)結(jié)果;
[0045] 所述似度計(jì)算模塊分別與所述合法糾錯(cuò)模塊和非法糾錯(cuò)模塊相連,用于接收并計(jì) 算糾錯(cuò)結(jié)果中的所有拼音串與用戶輸入的檢索串的相似度,獲取相似度最大的K個(gè)拼音 串,并指令人機(jī)交互界面對(duì)相似度最大的K個(gè)拼音串進(jìn)行顯示。
[0046] 本發(fā)明的附加方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變 得明顯,或通過本發(fā)明的實(shí)踐了解到。
【專利附圖】
【附圖說明】
[0047] 本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對(duì)實(shí)施例的描述中將變 得明顯和容易理解,其中 :
[0048] 圖1是本發(fā)明拼音糾錯(cuò)系統(tǒng)的方框圖;
[0049] 圖2是本發(fā)明控制器的結(jié)構(gòu)示意圖;
[0050] 圖3是本發(fā)明一種優(yōu)選實(shí)施例中的拼音流糾錯(cuò)方法流程圖;
[0051] 圖4是本發(fā)明一種優(yōu)選實(shí)施例中的三叉搜索樹的示意圖。
【具體實(shí)施方式】
[0052] 下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終 相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附 圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。
[0053] 為便于對(duì)本發(fā)明進(jìn)行正確理解,首先對(duì)幾個(gè)術(shù)語進(jìn)行如下定義:
[0054] 音節(jié)串:本發(fā)明中音節(jié)串是符合語法規(guī)則的由一個(gè)或幾個(gè)音素按一定規(guī)律組合 而成的拼音字符串,所有的音節(jié)串均存在中文漢字與之相對(duì)應(yīng),例如,音節(jié)串"chong"與 中文漢字"重"相對(duì)應(yīng),音節(jié)串不包含聲調(diào),例如," Ch〇ng"、"qing"均為一個(gè)音節(jié)串,但 "ch〇ngqing"," ch〇g"則都不為音節(jié)串,表1是漢語拼音中的所有音節(jié)串,共410種,表1中 左面一列為首字母,右面一列為以首字母開頭的音節(jié)串。
[0055] 表1·漢語拼音音節(jié)串表
[0056] I I (音節(jié)串?dāng)?shù)量)___擇釋_ 茲移)_ ao ang an ai a h 削、 bu bo bing bin bic biao bian bi beng ben bei bao bang bm } bai ba cuo cun cui cuan cu cou cotig ci chuo chun chui chuang chuan 縛3SJ chuai ^hua cba chou chong chi chcng chcn che chao chan chai cha ceng cen cc cao cang can cai ca 瑪23) duo dun dui duan du dou dong diu ding die diao dian dia di ___dcng dei den de dao dang dan dai da_ 史轉(zhuǎn)__er eng en ei e _ fii fou fo feng fen ibi fang ian fa Bu0 gun gni guang guan guai gua gu gou g_g geng gen §ei ge gao gang gan gai ga 魄雙) huo h通 h^i Miang huan huai hua hu hou hong heng hen hei he _ :__hao hang han hai ha_ _ jun ju? jmm |u }m Jtog jing 秦 #e:輿o 鄭n jia ji k(i 琴) kuo kun kui kuaag ismn kuai kua ku kou kong keng kca kc kao teig kan kai ka |(26) lv *u0 to luc luan lu lou long lo liu ling lin lie liao ._ : '__lian lia H leag lai le lao lang fan la_ ¢15^20) W mou tno miu ming min mie miao mian mi meng m_ 議}丨 _____ me mao mang man mai ma m_ n^25) nve nv fiun nuo nuan nu nou nong niu B&g nin me niao niang ___niaii M iieiig iiea aei nc nap nang nan nai m__ :0 傅___ # m
[0057] p(17) pu potj; ΡΘ· pin|: fil pie |?i:a〇 plan pi peng pm pei pe fm pai pa q(i4) ]qun que quan qu qiu qiong qing qin qic qiao qiang qian qia qi 抑4)__ruo run run rui ru rou rong ri reng ren rc rao rang ran suo sun sui 郵an si^ sou song si sbito shun shui shuang shum S(M) shuai shua shu: sfeii; shi sheng shen slid Ste shang shan shai sha sei 化 sen Se sao sang san sai sa t(19) MO tun tm luan m.. tou long ling tic :ti? iiH tl i*-n M -____tang tan tai fa_ 杯節(jié)___ wu wo weng wen wei: wan wai wa x(14)____xim xue xuan xu xiu xiong xing xin xie xiao xiang xian xia xi >(15) I u ue 'uaa yu you \ong yo vina yin fe:. yao \an ya zuo zim zui zuan zu zou zong /x zhuo /Jiun ^hui zhuang zhu? z《時(shí) zhuai zhm zhu Aoa zhong zhi xheng zlien zhei zJbie zhao zhang zhan zhai zha ze 雜 zen zei ze zang zan zai m
[G058] 檢索串:檢索串是用戶輸入的用于檢索的字符串,例如" chongqing"為一個(gè)檢索 串,在本實(shí)施方式中,檢索串可以為音節(jié)串,例如檢索串"chong",也可以不為音節(jié)串,例如 檢索串"Chongqing"或"chog"等。本發(fā)明不考慮檢索串為空的情況,也不考慮檢索串中包 含其他非英文字母的情況(英文字母v對(duì)應(yīng)漢語拼音U),例如檢索串為"我zai "或者檢索 串為"m2m"等。
[0059]目標(biāo)串:目標(biāo)串是用戶想要查詢的正確字符串,本發(fā)明選取相似度最高的若干字 符串返回。在本實(shí)施方式中,目標(biāo)串為符合拼音規(guī)則的拼音串,能夠拆分為若干音節(jié)串,檢 索串卻不一定能夠拆分為音節(jié)串。例如:目標(biāo)串" ch〇ngqing"可拆分為"ch〇ng"和"qing,,, 但檢索串"chongqig"則不能拆分為音節(jié)串。
[0060]糾錯(cuò)結(jié)果集:糾錯(cuò)結(jié)果集是合法糾錯(cuò)或非法糾錯(cuò)后的拼音串集合,例如:檢索串 為"chongqig" 時(shí),糾錯(cuò)結(jié)果集可以為{ "ch〇ngqing,'、"chongqingshi"、"chongqiang"、 "chongqin"、"chongqi"、"chongqiguai" },糾錯(cuò)結(jié)果集中的拼音串與目標(biāo)串具有一定的相 似度。
[0061] 建議結(jié)果集:建議結(jié)果集是糾錯(cuò)結(jié)果集中與檢索串相似度最高的若干個(gè)拼音串 集合,建議結(jié)果集為有序集合,該集合按相似度大小非遞增排列,由于建議結(jié)果集中的所 有元素均來源于糾錯(cuò)結(jié)果集,因此建議結(jié)果集為糾錯(cuò)結(jié)果集的子集。當(dāng)建議結(jié)果集中元 素個(gè)數(shù)不超過3時(shí),從糾錯(cuò)結(jié)果集的例子看出檢錯(cuò)串"chongqig"的建議結(jié)果集可以為 { "chongqing"、"chongqin"、"chongqiang"},建議結(jié)果集與糾錯(cuò)結(jié)果集中的所有元素均可 以拆分為若干音節(jié)串。
[0062]為實(shí)現(xiàn)拼音糾錯(cuò),本發(fā)明提供了一種拼音流糾錯(cuò)系統(tǒng),如圖1所示,其包括人機(jī)交 互界面1、控制器2和存儲(chǔ)器3,其中,人機(jī)交互界面1與控制器2連接,控制器2與存儲(chǔ)器 3連接。
[0063]存儲(chǔ)器3內(nèi)存儲(chǔ)有表1中所有拼音串及其反轉(zhuǎn)字符串(即前述拼音串的倒序 字符串),并將所有拼音串及其反轉(zhuǎn)字符串分別組織并存儲(chǔ)于正向、反向兩棵三叉搜索樹 (TernarySearchTrie,TST)中;控制器3用于:分析和檢測用戶通過人機(jī)交互界面1輸入的 檢索串,判斷其是否可拆分為若干音節(jié)串,獲取檢索串的錯(cuò)誤類型;對(duì)合法錯(cuò)誤檢索串進(jìn)行 合法糾錯(cuò),對(duì)非法錯(cuò)誤檢索串進(jìn)行非法糾錯(cuò),采用正向、反向兩棵三叉搜索樹的查詢操作獲 取糾錯(cuò)結(jié)果;計(jì)算糾錯(cuò)結(jié)果中的所有拼音串與用戶輸入的檢索串的相似度,獲取相似度最 大的K個(gè)拼音串,并指令人機(jī)交互界面對(duì)相似度最大的κ個(gè)拼音串進(jìn)行顯示。
[0064] 在本實(shí)施方式中,如圖2所示,控制器2包括預(yù)處理模塊21、合法糾錯(cuò)模塊22、非 法糾錯(cuò)模塊23和相似度計(jì)算模塊24 ;預(yù)處理模塊21用于分析和檢測用戶通過人機(jī)交互界 面輸入的檢索串,判斷其是否可拆分為若干音節(jié)串,獲取檢索串的錯(cuò)誤類型。預(yù)處理模塊 21分別與存儲(chǔ)器3、合法糾錯(cuò)模塊2 2和非法糾錯(cuò)模塊23相連,用于對(duì)合法錯(cuò)誤檢索串進(jìn)行 合法糾錯(cuò),對(duì)非法錯(cuò)誤檢索串進(jìn)行非法糾錯(cuò),查詢正向、反向兩棵三叉搜索樹的獲取糾錯(cuò)結(jié) 果。相似度計(jì)算模塊 24分別與合法糾錯(cuò)模塊Μ和非法糾錯(cuò)模塊23相連,用于接收并計(jì)算 糾錯(cuò)結(jié)果中的所有拼音串與用戶輸入的檢索串的相似度,獲取相似度最大的K個(gè)拼音串, 并指令人機(jī)交互界面1對(duì)相似度最大的K個(gè)拼音串進(jìn)行顯示。
[0065] 所述預(yù)處理模塊21,具體用于當(dāng)檢索串可拆分為若干個(gè)音節(jié)串時(shí),將其拆分為最 少音節(jié)串個(gè)數(shù)的形式;當(dāng)檢索串不能劃分為若干個(gè)音節(jié)子串時(shí),標(biāo)注其不能劃分的音符; [0066]所述非法糾錯(cuò)模塊23,具體用于獲取用戶輸入的經(jīng)過檢測后的檢索串;所述檢索 串進(jìn)行預(yù)處理,獲取檢索串中的所有非法字符,并將所有的非法字符標(biāo)記為*字符;如果檢 索串中*字符位于檢索串中間,則分別采用正向、反向三叉搜索樹查找相應(yīng)前綴的所有拼 音串,將查找結(jié)集的交集作為糾錯(cuò)結(jié)果集,如果檢索串中*字符位于檢索串的最左/右側(cè), 則使用反向/正向三叉搜索樹查找,獲取相應(yīng)前綴的所有拼音串作為結(jié)果集;對(duì)糾錯(cuò)結(jié)果 集進(jìn)行預(yù)處理,刪除糾錯(cuò)結(jié)果集中與檢索串長度之差的絕對(duì)值大于1的拼音串;判斷糾錯(cuò) 結(jié)果集是否為空,如果糾錯(cuò)結(jié)果集為空,則提示當(dāng)前糾錯(cuò)失敗;
[0067] 所述合法糾錯(cuò)模塊22,具體用于獲取用戶輸入的經(jīng)過檢測后的檢索串;分別將檢 索串中的每個(gè)音節(jié)單獨(dú)替換為*字符;如果檢索串中*字符位于檢索串中間,即*字符兩側(cè) 均有音節(jié)串,分別采用正反向三叉搜索樹查找相應(yīng)前綴的所有拼音串,將查找結(jié)集的交集 作為糾錯(cuò)結(jié)果集,如果檢索串中*字符位于檢索串的最左/右側(cè),則使用反向/正向三叉搜 索樹查找,獲取相應(yīng)前綴的所有拼音串作為結(jié)果集;對(duì)糾錯(cuò)結(jié)果集進(jìn)行預(yù)處理,刪除糾錯(cuò) 結(jié)果集中與檢索串長度之差的絕對(duì)值大于1的拼音串;判斷糾錯(cuò)結(jié)果集是否為空,如果糾 錯(cuò)結(jié)果集為空,則提示當(dāng)前糾錯(cuò)失敗;
[0068] 所述似度計(jì)算模塊24,具體用于讀取檢索串與糾錯(cuò)結(jié)果集中的拼音串;正向匹 配:從第一個(gè)字符開始判斷檢索串與糾錯(cuò)串是否相同,如果相同繼續(xù)匹配后續(xù)字符,否則標(biāo) 記當(dāng)前位置與已經(jīng)匹配的字符個(gè)數(shù);反向匹配:從最后一個(gè)字符至正向匹配標(biāo)記位置,開 始判斷檢索串與糾錯(cuò)串是否相同,如果相同繼續(xù)匹配之前字符,否則獲取反向匹配字符個(gè) 數(shù);計(jì)算相似度:獲取正向、反向匹配后相同的字符個(gè)數(shù)之和以及對(duì)應(yīng)檢索串與糾錯(cuò)串的 最大長度,兩者求比獲取相似度;計(jì)算糾錯(cuò)結(jié)果集中的所有拼音串的相似度,并將相似度最 大的K個(gè)拼音串置入建議結(jié)果集,返回給用戶。
[0069]本發(fā)明還提供了一種拼音糾錯(cuò)方法,如圖3所示,包括如下步驟:
[0070] S1,構(gòu)建詞庫,將所有拼音串及其反轉(zhuǎn)字符串分別組織并存儲(chǔ)于正向、反向兩棵三 叉搜索樹中;
[0071] S2,分析和檢測用戶輸入的檢索串,判斷其是否可拆分為若干音節(jié)串,獲取檢索串 的錯(cuò)誤類型,所述錯(cuò)誤類型分為合法錯(cuò)誤和非法錯(cuò)誤;
[0072] S3,對(duì)合法錯(cuò)誤檢索串進(jìn)行合法糾錯(cuò),對(duì)非法錯(cuò)誤檢索串進(jìn)行非法糾錯(cuò),采用正 向、反向兩棵三叉搜索樹的查詢操作獲取糾錯(cuò)結(jié)果;
[0073] S4,計(jì)算糾錯(cuò)結(jié)果中的所有拼音串與用戶輸入的檢索串的相似度,獲取相似度最 大的K個(gè)拼音串并輸出。
[0074]在本實(shí)施方式中,具體的拼音糾錯(cuò)方法為:
[0075]首先,構(gòu)建詞庫,將表1中的所有拼音串及其反轉(zhuǎn)字符串分別組織并存儲(chǔ)于正向、 反向兩棵三叉搜索樹中。構(gòu)建詞庫是指將用戶可能查詢到的所有詞條以一定的數(shù)據(jù)結(jié)構(gòu)組 織起來,以便查找、插入、刪除、修改等操作。構(gòu)建的詞庫是糾錯(cuò)系統(tǒng)的基礎(chǔ)模塊,也是用戶 檢索詞^的^據(jù)源。如圖 4所示,本發(fā)明采用三叉搜索樹的形式組織存儲(chǔ)詞庫中所有詞條, 圖中包含字付串:anran、dadao、daxue、enchou、jube i、lame i、mi f an、n imen、n vbao、sh ime i、 tashi:在本實(shí)施方式中,具體字符串的存儲(chǔ)方法和讀取方法可以采用現(xiàn)有技術(shù)中的存儲(chǔ)方 法和讀取方法。TST是二叉搜索樹和數(shù)字搜索樹的混合體,其空間復(fù)雜度和二叉搜索樹相 似,而查找時(shí)間復(fù)雜度和數(shù)字搜索樹相似。TST不僅能夠滿足數(shù)據(jù)插入、刪除、查找的工作而 且還能夠滿足動(dòng)態(tài)增長。
[0076]在本實(shí)施方式中,正向、反向兩棵三叉搜索樹包括如下特點(diǎn): C0077] 樹中非葉子節(jié)點(diǎn)均有1-3個(gè)兒子節(jié)點(diǎn);
[0078] 2),每個(gè)節(jié)點(diǎn)存儲(chǔ)當(dāng)前節(jié)點(diǎn)的關(guān)鍵字及其指向兒子節(jié)點(diǎn)的指針;
[0079] 3),非葉子節(jié)點(diǎn)的關(guān)鍵字不小于其左兒子節(jié)點(diǎn)的關(guān)鍵字,不大于其右兒子節(jié)點(diǎn)的 關(guān)鍵字,在本實(shí)施方式,關(guān)鍵字即是存儲(chǔ)于結(jié)點(diǎn)中的字母,按照字母順序表中字母的順序依 次排列大小,即A最小,Z最大。
[0080^本發(fā)明構(gòu)建正反向兩棵TST,即分別構(gòu)建正向TST和反向TST,正向TST中以詞條 的^音串構(gòu)建,拼音不包含聲調(diào),例如,詞條"重慶,,以"Chongqing"構(gòu)建,反向TST以詞條 拼音串的反轉(zhuǎn)形式構(gòu)建,例如,詞條"重慶,,以"gniqgnohc"構(gòu)建。
[0081]在本實(shí)施方式中,TST的查找、插入、刪除、更新等操作可以采用現(xiàn)有技術(shù)中的方 法。本發(fā)明通過構(gòu)建正向、反向兩棵三叉搜索樹,采用正向、反向兩棵三叉搜索樹的查詢操 作獲取糾錯(cuò)結(jié)果,快速準(zhǔn)確。
[0082]然后,預(yù)處理模塊分析和檢測用戶輸入的檢索串,判斷其是否可拆分為若干音節(jié) 串,獲取檢索串的錯(cuò)誤類型,所述錯(cuò)誤類型分為合法錯(cuò)誤和非法錯(cuò)誤。如果檢索串可拆分為 若干個(gè)音節(jié)串,即為合法錯(cuò)誤,例如"chongqingshi"可劃分為拆分為"chong"、"qing"和 "shi"三個(gè)音節(jié)串,則將其拆分為最少音節(jié)串個(gè)數(shù)的形式,例如檢索串" Xianshi"可以拆分 為"xi" "an" "shi"和"xian" "shi"兩種,采用音節(jié)串最少的形式,即為"xian,shi"。如 果檢索串不能劃分為若千個(gè)音節(jié)串,即為非法錯(cuò)誤,則標(biāo)注其不能劃分的音符,例如,檢索 串" chongqingt "則標(biāo)注尾字符" t ",檢索串" chonging"則標(biāo)注最后三個(gè)字符" ing"。
[0083] 在本實(shí)施方式中,對(duì)檢索串拆分為若干個(gè)音節(jié)串的方法可以采用但不限于如下拼 音流切分方法:
[0084] 數(shù)據(jù)存儲(chǔ):分別在存儲(chǔ)器的字符存儲(chǔ)陣列的Μ個(gè)字符存儲(chǔ)單元中存儲(chǔ)一個(gè)字母和 一個(gè)指針,在存儲(chǔ)器的音節(jié)存儲(chǔ)陣列的Μ個(gè)音節(jié)存儲(chǔ)子陣列中存儲(chǔ)音節(jié)串,所述字符存儲(chǔ) 單元與所述音節(jié)存儲(chǔ)子陣列一一對(duì)應(yīng),所述字符存儲(chǔ)單元中的指針指向所述字符存儲(chǔ)單元 所對(duì)應(yīng)的音節(jié)存儲(chǔ)子陣列,所述音節(jié)存儲(chǔ)陣列的第Ν個(gè)音節(jié)存儲(chǔ)子陣列包括Ρ Ν個(gè)音節(jié)存儲(chǔ) 單元,所述ΡΝ個(gè)音節(jié)存儲(chǔ)單元中依次存儲(chǔ)有所述音節(jié)存儲(chǔ)子陣列對(duì)應(yīng)的字符存儲(chǔ)單元中存 儲(chǔ)的字母為首字母的音節(jié)串,所述Μ、Ν、Ρ Ν均為正整數(shù),所述N=l,2,…,Μ ;
[0085] 數(shù)據(jù)查詢:控制器在接收到通過人機(jī)交互界面輸入的檢索串時(shí),根據(jù)字符存儲(chǔ)單 元與音節(jié)存儲(chǔ)子陣列的對(duì)應(yīng)關(guān)系在存儲(chǔ)器中查找與所述檢索串對(duì)應(yīng)的音節(jié)串,對(duì)檢索串進(jìn) 行切分,并指令人機(jī)交互界面對(duì)所有音節(jié)串組合進(jìn)行顯示。
[0086] 具體控制器在接收到通過人機(jī)交互界面輸入的檢索串時(shí),根據(jù)字符存儲(chǔ)單元與音 節(jié)存儲(chǔ)子陣列的對(duì)應(yīng)關(guān)系在存儲(chǔ)器中查找與所述檢索串對(duì)應(yīng)的音節(jié)串組合的步驟為:
[0087] S21 :控制器獲取檢索串;
[0088] S22 :從所述檢索串中提取待分割檢索串;
[0089] S23:控制器判斷所述待分割檢索串是否為空,如果待分割檢索串為空,則結(jié)束拼 音流切分算法,將結(jié)果集通過人機(jī)交互界面進(jìn)行顯示;
[0090] S24 :控制器獲取待分割檢索串中的首字符并根據(jù)字符存儲(chǔ)單元與音節(jié)存儲(chǔ)子陣 列的對(duì)應(yīng)關(guān)系在存儲(chǔ)器中查找所述首字符的字符匹配集;
[0091] S25:判斷所述字符匹配集中首字符音節(jié)串的后續(xù)字符的字符匹配集是否為空,如 果為空,則當(dāng)前音節(jié)分割方式錯(cuò)誤,將所述后續(xù)字符的字符匹配集是空的音節(jié)串刪除,并將 所述音節(jié)串相應(yīng)的待分割檢索串刪除,返回步驟S22 ;
[0092] S26 :判斷字符匹配集中的音節(jié)串個(gè)數(shù)是否為丨,如果為丨,則將音節(jié)串置入結(jié)果集 并將所述音節(jié)串從所述檢索串中刪除,返回步驟S22 ;
[0093] S27 :將字符匹配集中的音節(jié)串存入結(jié)果集中,分別將音節(jié)串從檢索串中刪除,返 回步驟S22。
[0094] 本發(fā)明對(duì)拼音串的切分方法可按照本 申請(qǐng)人:申請(qǐng)的申請(qǐng)?zhí)枮? 201310121923. 8 ", 名稱為"一種拼音流切分方法及系統(tǒng)"的專利申請(qǐng)中所記載的方法進(jìn)行,在此不作贅述。拼 音的檢測是糾錯(cuò)算法的基礎(chǔ),通過檢測判斷檢索串是否可劃分為若干音節(jié)串組合形式,從 而采取不同的糾錯(cuò)策略。
[0095]再后,控制器的合法糾錯(cuò)模塊對(duì)合法錯(cuò)誤檢索串進(jìn)行合法糾錯(cuò),非法糾錯(cuò)模塊對(duì) 非法錯(cuò)誤檢索串進(jìn)行非法糾錯(cuò),采用正向、反向兩棵三叉搜索樹的查詢操作獲取糾錯(cuò)結(jié)果。 [0096]非法糾錯(cuò)是指對(duì)用戶輸入的不能拆分為若千音節(jié)串的檢索串的糾錯(cuò),例如:檢索 串"chogqig"不能拆分為若干音節(jié)串。非法糾錯(cuò)的輸入為檢測后的檢索串,g卩非法字符標(biāo) 注后的檢索串,輸出為糾錯(cuò)結(jié)果集。由于錯(cuò)誤字符串僅包含一處錯(cuò)誤,因此錯(cuò)誤位置必定出 現(xiàn)在非法子符所在位置或其前、后:例如"bei jig"的非法字符為"g",若目標(biāo)串為"beiji " 則錯(cuò)誤位置在"g"處;若目標(biāo)串為"beijing"錯(cuò)誤位置在"g"之前;若目標(biāo)串為"beijige" 則錯(cuò)誤字符在"g"之后。此外非法字符不一定為單個(gè)字符,例如檢索串"beiing"中,非法 字符包括" i "、"η "和" g"三個(gè)。
[0097] 在本實(shí)施方式中,非法檢索串的糾錯(cuò)流程為:
[0098] S41,獲取用戶輸入的經(jīng)過檢測后的檢索串;
[0099] S42,對(duì)步驟S41中的檢索串進(jìn)行預(yù)處理,獲取檢索串中的所有非法字符,并將所 有的非法字符標(biāo)記為*字符;
[0100] S43,如果檢索串中*字符位于檢索串中間,例如"ch〇ng*qing"中*字符的兩側(cè) 均有音節(jié)串"chong"和"qing",則分別采用正向、反向三叉搜索樹查找相應(yīng)前綴的所有拼 音串,將查找結(jié)集的交集作為糾錯(cuò)結(jié)果集,例如:"chong*qing"使用正向TST查找前綴為 "chong"的所有拼音串,使用反向TST查找前綴為"gniq"的所有字符串,并去二者的交集作 為糾錯(cuò)結(jié)果集。
[0101] 如果檢索串中*字符位于檢索串的最左(右)側(cè),則使用反(正)向TST查找,獲取 特定前綴的所有拼音串作為結(jié)果集返回。例如'Chongqing*"中的*字符位于檢索串的 最右側(cè),則使用正向TST查找前綴為"Chongqing"的所有拼音串,置入糾錯(cuò)結(jié)果集;又如 "*chongqing"中*字符位于檢索串最左側(cè),則使用反向TST查找所有前綴為"gniqgnohc" 的所有拼音串,并將其置入糾錯(cuò)結(jié)果集中。
[0102] S44,對(duì)糾錯(cuò)結(jié)果集進(jìn)行預(yù)處理,刪除糾錯(cuò)結(jié)果集中與檢索串長度之差 的絕對(duì)值大于1的拼音串,例如:檢索串為"Chongqing",則刪除糾錯(cuò)結(jié)果集中 "chongqingshi" "chongqingren" 等。
[0103] S45,判斷糾錯(cuò)結(jié)果集是否為空,如果糾錯(cuò)結(jié)果集為空,則提示當(dāng)前糾錯(cuò)失敗。
[0104] 合法糾錯(cuò)是指對(duì)用戶輸入能夠拆分為若干個(gè)音節(jié)串的檢索串糾錯(cuò)。例如用戶將 "bei jing"輸入為"bijing",或者將"Chongqing"輸入為"chongqin",盡管該字符串錯(cuò)誤, 但檢索串可以拆分為若干個(gè)音節(jié)串。合法糾錯(cuò)的輸入為檢測后的檢索串,即切分后的檢索 串,合法糾錯(cuò)的輸出為糾錯(cuò)結(jié)果集。
[0105]在本實(shí)施方式中,所述合法檢索串的糾錯(cuò)流程為:
[0106] S51,獲取用戶輸入的經(jīng)過檢測后的檢索串;
[0107] S52,分別將^索串中的每個(gè)音節(jié)單獨(dú)替換為*字符,依次執(zhí)行后續(xù)步驟,例如,對(duì) 于"xian' shi"中的音節(jié)串"xian"和"shi,,依次替換為*字符,得到"xian*,,和"* shi", 分別執(zhí)行后續(xù)操作;
[0108] S53,如果檢索串中*字符位于檢索串中間,即*字符兩側(cè)均有音節(jié)串,分別采用 正反向三叉搜索樹查找相應(yīng)前綴的所有拼音串,將查找結(jié)集的交集作為糾錯(cuò)結(jié)果集,例如: "chong^ing"使用正向TST查找前綴為"chong"的所有拼音串,使用反向 TST查找前綴為 "gniq"的所有字符串,并去二者的交集作為糾錯(cuò)結(jié)果集;
[0101如果檢索串中*字符位于檢索串的最左(右)側(cè),則使用反(正)向TST查找,獲取 特定前綴的所有拼音串作為結(jié)果集返回。例如:"ch0ngqing*,,中的*字符位于檢索串的 最右側(cè),則使用正向TST查找前綴為"Chongqing"的所有拼音串,置入糾錯(cuò)結(jié)果集;又如 "*ch 0ngqing"中*字符位于檢索串最左側(cè),則使用反向TST查找所有前綴為"gniqgnohc" 的所有拼音串,并將其置入糾錯(cuò)結(jié)果集中。
[0110] S54,對(duì)糾錯(cuò)結(jié)果集進(jìn)行預(yù)處理,刪除糾錯(cuò)結(jié)果集中與檢索串長度之差 的絕對(duì)值大于1的拼音串,例如:檢索串為"chongqing",則刪除糾錯(cuò)結(jié)果集中 "chongqingshi" "chongqingren" 等。
[0111] S55,判斷糾錯(cuò)結(jié)果集是否為空,如果糾錯(cuò)結(jié)果集為空,則提示當(dāng)前糾錯(cuò)失敗。
[0112]在本實(shí)施方式中,檢測模塊中選擇最少音節(jié)串的劃分方式是為了節(jié)省查找遍歷 的次數(shù)以提高糾錯(cuò)效率。例如,如果將檢索串"xianshi"切分為"Xi,an,shi"則需查詢 "*81131^"、"1丨相1131^"、"1丨 &11*"三次,但若將檢索串"^&11吐丨"切分為"剋£111,吐丨"則只需 查詢"xian*"和"*shi"兩次即可,而且目標(biāo)串均在糾錯(cuò)結(jié)果集中。
[0113]最后,相似度計(jì)算模塊計(jì)算糾錯(cuò)結(jié)果中的所有拼音串與用戶輸入的檢索串的相似 度,獲取相似度最大的K個(gè)拼音串并輸出。在本實(shí)施方式中,相似度計(jì)算的步驟為:
[0114] S61,讀取檢索串與糾錯(cuò)結(jié)果集中的拼音串(簡稱糾錯(cuò)串),例如,檢索串: "chongnqing" 糾錯(cuò)串:"chongqing";檢索串:"xiasshi" 糾錯(cuò)串:"xianshi";
[0115] S62,正向匹配:從第一個(gè)字符開始判斷檢索串與糾錯(cuò)串是否相同,如果相同繼續(xù) 匹配后續(xù)字符,否則標(biāo)記當(dāng)前位置與已經(jīng)匹配的字符個(gè)數(shù)。例如,檢索串:"ch〇ngnqing,,糾 錯(cuò)串:"chongqing",正向匹配后得到"chong",即相同字符個(gè)數(shù)為5個(gè),匹配至第6個(gè)字符; 檢索串:"xia SShi"糾錯(cuò)串:"xianShi",正向匹配后得到"Xia"相同字符個(gè)數(shù)為3個(gè),匹配 至第4個(gè)字符。
[0116] S63,反向匹配:從最后一個(gè)字符至正向匹配標(biāo)記位置,開始判斷檢索串與糾錯(cuò) 串是否相同,如果相同繼續(xù)匹配之前字符,否則獲取反向匹配字符個(gè)數(shù)。例如,檢索串: "chongnqing"糾錯(cuò)串:"chongqing",反向匹配后得到"qing"相同字符個(gè)數(shù)為4 ;檢索串: "xiasshi"糾錯(cuò)串:"xianshi",反向匹配后得到"shi"相同字符個(gè)數(shù)為3。
[0117] S64,計(jì)算相似度:獲取正向、反向匹配后相同的字符個(gè)數(shù)之和以及對(duì)應(yīng)檢索 串與糾錯(cuò)串的最大長度,兩者求比獲取相似度。例如,檢索串:"chongnqing"糾錯(cuò)串: "Chongqing",正反向匹配后相同字符個(gè)數(shù)為5+4=9,檢索串長度為1〇,糾錯(cuò)串長度為9,相 似度為9/10=0· 9 ;檢索串:"xiasshi"糾錯(cuò)串:"xianshi",正反向匹配后的相同字符個(gè)數(shù) 為3+3=6,檢索串長度為7,糾錯(cuò)串長度為7,相似度為6/7=0. 86。
[0118] S65,依據(jù)^驟S61至步驟S64計(jì)算糾錯(cuò)結(jié)果集中的所有拼音串的相似度,并將相 似度最大的K個(gè)拼音串置入建議結(jié)果集,返回給用戶。在本實(shí)施方式中,建議結(jié)果集中拼音 串按照相似度大小逆序排列。相似度最高的拼音串排在前面,便于用戶查看。
[0119]由于方法實(shí)施例和系統(tǒng)實(shí)施例的相似內(nèi)容較多,因此系統(tǒng)實(shí)施例介紹的較為簡 略,相關(guān)之處請(qǐng)參見方法實(shí)施例部分。
[0120]在本說明書的描述中,參考術(shù)語"一個(gè)實(shí)施例"、"一些實(shí)施例,,、"示例,,、"具體示 例"、或"一些示例"等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特 點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說明書中,對(duì)上述術(shù)語的示意性表述不 一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何 的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。
[0121] 盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,本領(lǐng)域的普通技術(shù)人員可以理解:在不 脫離本發(fā)明的原理和宗旨的情況下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換和變型,本 發(fā)明的范圍由權(quán)利要求及其等同物限定。
【權(quán)利要求】
1. 一種拼音糾錯(cuò)方法,其特征在于,包括: S1,構(gòu)建詞庫,將所有拼音串及其反轉(zhuǎn)字符串分別組織并存儲(chǔ)于正向、反向兩棵三叉搜 索樹中; 所述方法包括: 52, 分析和檢測用戶輸入的檢索串,判斷其是否可拆分為若干音節(jié)串,獲取檢索串的錯(cuò) 誤類型,所述錯(cuò)誤類型分為合法錯(cuò)誤和非法錯(cuò)誤; 53, 對(duì)合法錯(cuò)誤檢索串進(jìn)行合法糾錯(cuò),對(duì)非法錯(cuò)誤檢索串進(jìn)行非法糾錯(cuò),采用正向、反 向兩棵三叉搜索樹的查詢操作獲取糾錯(cuò)結(jié)果; 54, 計(jì)算糾錯(cuò)結(jié)果中的所有拼音串與用戶輸入的檢索串的相似度,獲取相似度最大的K 個(gè)拼音串并輸出。
2. 如權(quán)利要求1所述的拼音糾錯(cuò)方法,其特征在于,所述正向、反向兩棵三叉搜索樹包 括如下特點(diǎn): 樹中非葉子節(jié)點(diǎn)均有1-3個(gè)兒子節(jié)點(diǎn); 每個(gè)節(jié)點(diǎn)存儲(chǔ)當(dāng)前節(jié)點(diǎn)的關(guān)鍵字及其指向兒子節(jié)點(diǎn)的指針; 非葉子節(jié)點(diǎn)的關(guān)鍵字不小于其左兒子節(jié)點(diǎn)的關(guān)鍵字,不大于其右兒子節(jié)點(diǎn)的關(guān)鍵字。
3. 如權(quán)利要求1所述的拼音糾錯(cuò)方法,其特征在于,在所述步驟S2中,如果檢索串可拆 分為若干個(gè)音節(jié)串,則將其拆分為最少音節(jié)串個(gè)數(shù)的形式;如果檢索串不能劃分為若干個(gè) 音節(jié)子串,則標(biāo)注其不能劃分的音符。
4. 如權(quán)利要求1所述的拼音糾錯(cuò)方法,其特征在于,所述對(duì)非法錯(cuò)誤檢索串進(jìn)行非法 糾錯(cuò)為: S41,獲取用戶輸入的經(jīng)過檢測后的檢索串; 542, 對(duì)步驟S41中的檢索串進(jìn)行預(yù)處理,獲取檢索串中的所有非法字符,并將所有的 非法字符標(biāo)記為*字符; 543, 如果檢索串中*字符位于檢索串中間,則分別采用正向、反向三叉搜索樹查找相 應(yīng)前綴的所有拼音串,將查找結(jié)集的交集作為糾錯(cuò)結(jié)果集,如果檢索串中*字符位于檢索 串的最左/右側(cè),則使用反向/正向三叉搜索樹查找,獲取相應(yīng)前綴的所有拼音串作為結(jié)果 集; 544, 對(duì)糾錯(cuò)結(jié)果集進(jìn)行預(yù)處理,刪除糾錯(cuò)結(jié)果集中與檢索串長度之差的絕對(duì)值大于1 的拼首串; 545, 判斷糾錯(cuò)結(jié)果集是否為空,如果糾錯(cuò)結(jié)果集為空,則提示當(dāng)前糾錯(cuò)失敗。
5. 如權(quán)利要求1所述的拼音糾錯(cuò)方法,其特征在于,所述對(duì)合法錯(cuò)誤檢索串進(jìn)行合法 糾錯(cuò)為: S51,獲取用戶輸入的經(jīng)過檢測后的檢索串; 552, 分別將檢索串中的每個(gè)音節(jié)單獨(dú)替換為*字符,依次執(zhí)行后續(xù)步驟; 553, 如果檢索串中*字符位于檢索串中間,即*字符兩側(cè)均有音節(jié)串,分別采用正反向 三叉搜索樹查找相應(yīng)前綴的所有拼音串,將查找結(jié)集的交集作為糾錯(cuò)結(jié)果集, 如果檢索串中*字符位于檢索串的最左/右側(cè),則使用反向/正向三叉搜索樹查找,獲 取相應(yīng)前綴的所有拼音串作為結(jié)果集; 554, 對(duì)糾錯(cuò)結(jié)果集進(jìn)行預(yù)處理,刪除糾錯(cuò)結(jié)果集中與檢索串長度之差的絕對(duì)值大于1 的拼首串; S55,判斷糾錯(cuò)結(jié)果集是否為空,如果糾錯(cuò)結(jié)果集為空,則提示當(dāng)前糾錯(cuò)失敗。
6. 如權(quán)利要求1所述的拼音糾錯(cuò)方法,其特征在于,所述S4步驟為: S61,讀取檢索串與糾錯(cuò)結(jié)果集中的拼音串; 562, 正向匹配:從第一個(gè)字符開始判斷檢索串與糾錯(cuò)串是否相同,如果相同繼續(xù)匹配 后續(xù)字符,否則標(biāo)記當(dāng)前位置與已經(jīng)匹配的字符個(gè)數(shù); 563, 反向匹配:從最后一個(gè)字符至正向匹配標(biāo)記位置,開始判斷檢索串與糾錯(cuò)串是否 相同,如果相同繼續(xù)匹配之前字符,否則獲取反向匹配字符個(gè)數(shù); 564, 計(jì)算相似度:獲取正向、反向匹配后相同的字符個(gè)數(shù)之和以及對(duì)應(yīng)檢索串與糾錯(cuò) 串的最大長度,兩者求比獲取相似度; 565, 依據(jù)步驟S61至步驟S64計(jì)算糾錯(cuò)結(jié)果集中的所有拼音串的相似度,并將相似度 最大的K個(gè)拼音串置入建議結(jié)果集,返回給用戶。
7. -種拼音糾錯(cuò)系統(tǒng),其特征在于,包括: 人機(jī)交互界面、控制器和存儲(chǔ)器,所述人機(jī)交互界面與所述控制器連接,所述控制器與 所述存儲(chǔ)器連接; 所述存儲(chǔ)器內(nèi)存儲(chǔ)有所有拼音串及其反轉(zhuǎn)字符串,并將所述拼音串及其反轉(zhuǎn)字符串分 別組織并存儲(chǔ)于正向、反向兩棵三叉搜索樹; 所述控制器用于:分析和檢測用戶通過人機(jī)交互界面輸入的檢索串,判斷其是否可拆 分為若干音節(jié)串,獲取檢索串的錯(cuò)誤類型,所述錯(cuò)誤類型分為合法錯(cuò)誤和非法錯(cuò)誤;對(duì)合法 錯(cuò)誤檢索串進(jìn)行合法糾錯(cuò),對(duì)非法錯(cuò)誤檢索串進(jìn)行非法糾錯(cuò),采用正向、反向兩棵三叉搜索 樹的查詢操作獲取糾錯(cuò)結(jié)果;計(jì)算糾錯(cuò)結(jié)果中的拼音串與用戶輸入的檢索串的相似度,獲 取相似度最大的K個(gè)拼音串,并指令人機(jī)交互界面對(duì)相似度最大的K個(gè)拼音串進(jìn)行顯示。
8. 如權(quán)利要求7所述的拼音糾錯(cuò)系統(tǒng),其特征在于,所述控制器包括:預(yù)處理模塊、合 法糾錯(cuò)模塊、非法糾錯(cuò)模塊和相似度計(jì)算模塊; 所述預(yù)處理模塊,用于當(dāng)檢索串可拆分為若干個(gè)音節(jié)串時(shí),將其拆分為最少音節(jié)串個(gè) 數(shù)的形式;當(dāng)檢索串不能劃分為若干個(gè)音節(jié)子串時(shí),標(biāo)注其不能劃分的音符; 所述非法糾錯(cuò)模塊,用于獲取用戶輸入的經(jīng)過檢測后的檢索串;所述檢索串進(jìn)行預(yù)處 理,獲取檢索串中的所有非法字符,并將所有的非法字符標(biāo)記為*字符;如果檢索串中*字 符位于檢索串中間,則分別采用正向、反向三叉搜索樹查找相應(yīng)前綴的所有拼音串,將查找 結(jié)集的交集作為糾錯(cuò)結(jié)果集,如果檢索串中*字符位于檢索串的最左/右側(cè),則使用反向/ 正向三叉搜索樹查找,獲取相應(yīng)前綴的所有拼音串作為結(jié)果集;對(duì)糾錯(cuò)結(jié)果集進(jìn)行預(yù)處理, 刪除糾錯(cuò)結(jié)果集中與檢索串長度之差的絕對(duì)值大于1的拼音串;判斷糾錯(cuò)結(jié)果集是否為 空,如果糾錯(cuò)結(jié)果集為空,則提示當(dāng)前糾錯(cuò)失??; 所述合法糾錯(cuò)模塊,用于獲取用戶輸入的經(jīng)過檢測后的檢索串;分別將檢索串中的每 個(gè)音節(jié)單獨(dú)替換為*字符;如果檢索串中*字符位于檢索串中間,即*字符兩側(cè)均有音節(jié) 串,分別采用正反向三叉搜索樹查找相應(yīng)前綴的所有拼音串,將查找結(jié)集的交集作為糾錯(cuò) 結(jié)果集,如果檢索串中*字符位于檢索串的最左/右側(cè),則使用反向/正向三叉搜索樹查 找,獲取相應(yīng)前綴的所有拼音串作為結(jié)果集;對(duì)糾錯(cuò)結(jié)果集進(jìn)行預(yù)處理,刪除糾錯(cuò)結(jié)果集 中與檢索串長度之差的絕對(duì)值大于1的拼音串;判斷糾錯(cuò)結(jié)果集是否為空,如果糾錯(cuò)結(jié)果 集為空,則提示當(dāng)前糾錯(cuò)失敗; 所述似度計(jì)算模塊,用于讀取檢索串與糾錯(cuò)結(jié)果集中的拼音串;正向匹配:從第一個(gè) 字符開始判斷檢索串與糾錯(cuò)串是否相同,如果相同繼續(xù)匹配后續(xù)字符,否則標(biāo)記當(dāng)前位置 與已經(jīng)匹配的字符個(gè)數(shù);反向匹配:從最后一個(gè)字符至正向匹配標(biāo)記位置,開始判斷檢索 串與糾錯(cuò)串是否相同,如果相同繼續(xù)匹配之前字符,否則獲取反向匹配字符個(gè)數(shù);計(jì)算相似 度:獲取正向、反向匹配后相同的字符個(gè)數(shù)之和以及對(duì)應(yīng)檢索串與糾錯(cuò)串的最大長度,兩者 求比獲取相似度;計(jì)算糾錯(cuò)結(jié)果集中的所有拼音串的相似度,并將相似度最大的K個(gè)拼音 串置入建議結(jié)果集,返回給用戶。
9.如權(quán)利要求7所述的拼音糾錯(cuò)系統(tǒng),其特征在于,所述正向、反向兩棵三叉搜索樹包 括如下特點(diǎn): 樹中非葉子節(jié)點(diǎn)均有1-3個(gè)兒子節(jié)點(diǎn); 每個(gè)節(jié)點(diǎn)存儲(chǔ)當(dāng)前節(jié)點(diǎn)的關(guān)鍵字及其指向兒子節(jié)點(diǎn)的指針; 非葉子節(jié)點(diǎn)的關(guān)鍵字不小于其左兒子節(jié)點(diǎn)的關(guān)鍵字,不大于其右兒子節(jié)點(diǎn)的關(guān)鍵字。
【文檔編號(hào)】G06F17/30GK104252484SQ201310268072
【公開日】2014年12月31日 申請(qǐng)日期:2013年6月28日 優(yōu)先權(quán)日:2013年6月28日
【發(fā)明者】熊小鵬, 劉磊 申請(qǐng)人:重慶新媒農(nóng)信科技有限公司