專利名稱:用于存儲拼音的存儲結構及拼音輸入方法
技術領域:
本發明涉及拼音處理技術領域,具體地說,是涉及一種用于存儲拼音的存儲結構及基于該存儲結構的拼音輸入方法。
背景技術:
在嵌入式系統設備中,如手機、數字機頂盒等,大都需要中文漢字的輸入,其中拼音輸入是最常用的一種。由于嵌入式系統CPU性能較低、內存等資源較少,因此,嵌入式系統對通過拼音獲得漢字的輸入方法要求較高,一方面要求輸入法高效,對查詢結果的篩選及查詢效率較高,另一方面,要盡可能地減少對內存的占用。基于上述嵌入式系統的特殊性,目前在嵌入式系統中,構造拼音外碼到漢字內碼的轉換通常有兩種方法靜態數組和有序樹。采用靜態數組的方法,也就是將每個拼音(總共300多個)定義為一個數組。這種方法雖然實現簡單,但是具有固有的缺點(1)不便于實現漢字的聯想功能;(2)程序運行之初需要為這些數組靜態分配內存空間,占用較多的系統資源;(3)查詢效率不高。采用有序樹的方法,最常用的就是Trie樹。Trie樹,又稱單詞查找樹或鍵樹,是一種樹形結構,是一種哈希樹的變種。典型應用是用于統計和排序大量的字符串(但不僅限于字符串),所以經常被搜索引擎系統用于文本詞頻統計。在現有的拼音輸入法設計中,"Trie 樹的存儲結構為多叉鏈表,樹中的每個結點除根結點外均包括有一個字符,每個結點均包括有1個值域和26個指針域共27個域,而根結點也包括有沈個指針域,其中,26個指針域對應于沈個英文字母。采用Trie樹存儲拼音并作為拼音輸入結構時,雖然可以提高查找速度,但是,由于每個結點均通過沈個指針域指向沈個英文字母,而在實際拼音組建時,很多指針域是無效的、也即無法組成拼音,因此,大量無效的指針域占用了相當大的內存空間資源,進而降低了內存的工作效率,導致嵌入式系統整體性能下降。
發明內容
本發明的目的在于提供一種用于存儲拼音的存儲結構及基于該存儲結構的拼音輸入方法,以減少存儲結構所占的存儲空間,提高查找拼音及根據拼音查找漢字的速度。為實現上述發明目的,本發明所提供的存儲結構采用下述技術方案來實現
一種用于存儲拼音的存儲結構,所述存儲結構為一樹形結構,樹形結構的根結點包括有指向其一個子結點的指針域,樹形結構中除根結點和葉結點之外的其他結點各包括有指向其父結點的指針域、指向其一個子結點的指針域及指向一個兄弟結點的指針域,屬于同一層的兄弟結點依次鏈接形成一個鏈表,樹形結構中的葉結點包括有指向其父結點的指針域。本發明通過對傳統的Trie樹進行改進而提出一種新型樹形結構的存儲結構來存儲拼音,根結點僅需要一個指針域指向其一個子結點,其余結點最多通過三個結點分別指向父結點、子結點及兄弟結點,大大減少了結點的指針域,提高了指針域的有效性,降低了存儲結構所占用的存儲空間,進而可以提高拼音的查找速度。
如上所述的存儲結構,為實現對拼音相對應的漢字進行快速定位,所述樹形結構中除根結點之外的其他結點還包括有與該結點所包含的拼音字母相對應的關鍵字、由根結點至該結點的路徑構成的拼音對應的漢字在字庫中的起始位置值及相同拼音的漢字個數值。
如上所述的存儲結構,為進一步提高查找速度,所述屬于同一層的兄弟結點依次鏈接形成的鏈表中,根據結點的關鍵字的使用頻率對結點排序,形成有序的鏈表。
如上所述的存儲結構,所述指向一個兄弟結點的指針域為指向右兄弟結點的指針域或指向左兄弟結點的指針域,優選為指向右兄弟結點的指針域。
為實現本發明目的,本發明所提供的拼音輸入方法采用下述技術方案來實現一種拼音輸入方法,該方法基于上述所述的用于存儲拼音的存儲結構,該方法具體包括下述步驟根據漢字拼音規則構建樹形結構,以存儲拼音;從樹形結構的根結點出發,每個拼音字母對應一層結點,沿著與給定的拼音相應的指針逐層向下查找;在找到與給定的拼音相等的結點后,獲取由根結點至該結點的路徑構成的拼音對應的漢字在字庫中的起始位置值及相同拼音的漢字個數值;根據起始位置值及漢字個數值從漢字庫中讀取漢字并顯示。
如上所述的拼音輸入方法,若查找到樹形結構的葉結點仍未找到與給定的拼音相等的結點,則提示拼音輸入錯誤。
如上所述的拼音輸入方法,所述拼音輸入方法優選應用于數字機頂盒、手機等嵌入式系統設備中,以減少對嵌入式系統設備有限資源的占用。
與現有技術相比,本發明的優點和積極效果是本發明通過對傳統的Trie樹進行改進而提出一種新型樹形結構的存儲結構來存儲拼音,根結點僅需要一個指針域指向其一個子結點,其余結點最多通過三個結點分別指向父結點、子結點及兄弟結點,大大減少了結點的指針域,提高了指針域的有效性,降低了存儲結構所占用的存儲空間;在應用這種存儲結構進行拼音輸入時,可以提高拼音的查找速度,進而提高根據拼音查找漢字的速度。
結合附圖閱讀本發明的具體實施方式
后,本發明的其他特點和優點將變得更加清林疋。
圖1是本發明用于存儲拼音的存儲結構一個實施例的示意圖; 圖2是本發明拼音輸入方法一個實施例的流程圖。
具體實施方式
下面結合附圖和具體實施方式
對本發明的技術方案作進一步詳細的說明。
請參考圖1,該圖1示出了本發明用于存儲拼音的存儲結構一個實施例的示意圖。
如圖1所示,以包含拼音a、ai、an、ao、ang、ba、ban、da的部分存儲結構為例,該實施例的存儲結構為一樹形結構,包括有根結點11,根結點11作為父結點,其子結點構成第一層分支結點12,第一層分支結點12共包括有4個子結點,對應的字母分別為a、b、c、 d ;該層中的結點a作為父結點,其子結點構成第二層分支結點13,第二層分支結點13包括的子結點有i、n、o等;第二層分支結點13作為父結點,其包括有一個葉節點g。此外,第一層分支結點12中的結點b作為父結點,其下的第二層分支結點包括有一個子結點a,而子結點a又包括有一個葉節點η。第一層分支結點12中的分支結點d作為父結點,還包括有一個葉節點a。在圖1示出的存儲結構中,根結點11包括有指向其一個子結點a的指針域,葉結點g包括有指向其父結點η的指針域,葉結點η包括有指向其父結點a的指針域,而葉結點 a包括有指向其父結點d的指針域。除了根結點11及所述的三個葉節點之外,該實施例存儲結構中的其他結點各包括有三個指針域,分別為指向父結點的指針域、指向一個子結點的指針域及指向一個兄弟結點的指針域。以第一層分支結點12中的結點a為例,該結點包括有指向其父結點、即根結點11的指針域,還包括有指向一個子結點i的指針域,還包括有一個指向其右兄弟結點b的一個指針域。再以第二層分支結點13中的結點η為例,該結點包括有指向其父結點、即第一層分支結點12中的結點a的指針域,還包括有指向一個子結點、即葉結點g的指針域,還包括有一個指向其右兄弟結點ο的一個指針域。在該實施例中,同屬于同一層的兄弟結點依次鏈接形成一個鏈表,父結點通過指向一個子結點的指針域指向其所有子結點構成的鏈表。具體來說,同屬于根結點11的第一層分支結點12中的四個結點a、b、c、d作為兄弟結點,依次鏈接形成鏈表,根結點11通過指向其子結點a的指針域而指向其所有子結點構成的鏈表;同屬于第一層分支結點12中的父結點a的第二次分支結點13中的三個結點i、n、o作為兄弟結點,依次鏈接形成鏈表,父結點a通過一個指向其子結點i的指針域而指向其所有子結點構成的鏈表。采用這種存儲結構之后,不管父結點有多少個子結點,均可以通過一個指針域而指向所有的子結點,大大降低了父結點的指針域,減少了對存儲空間的占用。在由兄弟結點依次鏈接形成鏈表時,可以通過結點指向一個兄弟結點的指針域進行鏈接。指向兄弟結點的指針域可以是指向右兄弟結點的指針域,也可以是指向左兄弟結點的指針域,優選為指向右兄弟結點的指針域,以便于進行鏈表查找。以第一層分支結點12 為例,其中的一個結點a包括有執行右兄弟結點b的指針域,結點b包括有一個指向其右兄弟結點c的一個指針域,結點c又包括有一個指向其右兄弟結點d的指針域,…,通過所述指向右兄弟結點的指針域,第一層分支結點12中的結點a、結點b、結點c及結點d依次鏈接形成了鏈表。而且,在該實施例中,屬于同一層的兄弟結點依次鏈接形成的鏈表中,可以根據結點的關鍵字的使用頻率對結點進行排序,形成有序的鏈表,以減少從父結點到子結點進行字母匹配查找的過程,提高拼音的查找速度。此外,該實施例中,為實現對拼音相對應的漢字進行快速定位,樹形結構中除根結點11之外的其他結點還包括有與該結點所包含的拼音字母相對應的關鍵字、由根結點至該結點的路徑構成的拼音對應的漢字在字庫中的起始位置值及相同拼音的漢字個數值等共3個值域。請參考圖2,該圖2示出了本發明拼音輸入方法一個實施例的流程圖。該實施例的拼音輸入方法基于圖1實施例的拼音存儲結構進行拼音的查找,具體流程如下步驟21 流程開始。
步驟22 根據漢字拼音規則構建樹形結構。
該步驟是根據現有存在的300多個漢字拼音及其拼寫規則填充圖1實施例所述的樹形結構中的各個結點,除根結點之外,每個結點包括有一個字母,形成存儲有拼音的樹形結構。
步驟23 從樹形結構的根結點出發,根據給定的拼音逐層向下查找。
用戶輸入待查詢的拼音,以此拼音作為給定的拼音,從樹形結構中查找與給定的拼音相匹配的結點值。在查找時,從根結點出發,每個拼音字母對應一層結點,沿著與給定的拼音相應的指針逐層向下查找。例如,以圖1實施例的樹形結構為例,給定的拼音為 “ang”,則從根結點11出發,根據根結點11指向其子結點的指針域而獲得其子結點構成的鏈表,并依次查找鏈表中的結點,找到與給定拼音中的第一個字母“a”相等的關鍵字對應的結點,也即找到了第一層分支結點12中的結點a。然后,根據該結點a指向其子結點的指針域向下查找,再從其子結點構成的鏈表中查找與給定拼音中的第二個字母“η”相等的關鍵字對應的結點,從而找到了結點η。由于還未查找到與給定拼音“ang”相等的結點,則再從結點η繼續向其子結點查找,找到了結點η的葉結點g的關鍵字與給定拼音“ang”中的第三個字母“g”相等,則停止查找。有的情況下,可能無需查找到葉結點即可獲得與給定拼音相等的結點,則也停止查找。
步驟M 判斷是否查找到結點。若是,轉至步驟沈;若否,執行步驟25。
根據是否找到與給定的拼音相等的結點來判斷是否查找到需要的結點,當然,這里的與給定的拼音相等是指從根結點開始一直到最后一個結點經過的路徑中的所有結點組合起來后的值與給定的拼音相等。
步驟25 若沒有找到相等的結點,則提示拼音輸入錯誤,然后轉至步驟觀。
步驟沈若查找到相等的結點,則獲取相應結點的起始位置值即同拼音的漢字個數值。
這里,結點的起始位置是指該結點所包含的、由根結點至該結點的路徑構成的拼音對應的漢字在字庫中的起始位置值,而且,該結點也包括有與根結點至該結點的路徑所構成的拼音相同的漢字個數值。在找到結點后,可以直接讀取該結點的這兩個值。
步驟27 根據起始位置值及漢字個數值從漢字庫中讀取漢字并顯示。
—般的,在漢字庫中,相同拼音的漢字連續存放,且對外提供一個起始位置指針, 因此,通過獲取的起始位置值及漢字個數值就可方便地從漢字庫中得到拼音相同的漢字。
上述實施例的拼音輸入方法基于圖1實施例中的拼音存儲結構,能夠實現拼音的動態查找,且查找速度快,所用拼音結構占用的存儲空間少,尤其適合于應用在數字機頂盒、手機等嵌入式系統設備中,以減少對嵌入式系統設備有限資源的占用。
以上實施例僅用以說明本發明的技術方案,而非對其進行限制;盡管參照前述實施例對本發明進行了詳細的說明,對于本領域的普通技術人員來說,依然可以對前述實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或替換,并不使相應技術方案的本質脫離本發明所要求保護的技術方案的精神和范圍。
權利要求
1.一種用于存儲拼音的存儲結構,其特征在于,所述存儲結構為一樹形結構,樹形結構的根結點包括有指向其一個子結點的指針域,樹形結構中除根結點和葉結點之外的其他結點各包括有指向其父結點的指針域、指向其一個子結點的指針域及指向一個兄弟結點的指針域,屬于同一層的兄弟結點依次鏈接形成一個鏈表,樹形結構中的葉結點包括有指向其父結點的指針域。
2.根據權利要求1所述的存儲結構,其特征在于,所述樹形結構中除根結點之外的其他結點還包括有與該結點所包含的拼音字母相對應的關鍵字、由根結點至該結點的路徑構成的拼音對應的漢字在字庫中的起始位置值及相同拼音的漢字個數值。
3.根據權利要求1或2所述的存儲結構,其特征在于,所述屬于同一層的兄弟結點依次鏈接形成的鏈表中,根據結點的關鍵字的使用頻率對結點排序,形成有序的鏈表。
4.根據權利要求3所述的存儲結構,其特征在于,所述指向一個兄弟結點的指針域為指向右兄弟結點的指針域。
5.根據權利要求3所述的存儲結構,其特征在于,所述指向一個兄弟結點的指針域為指向左兄弟結點的指針域。
6.一種拼音輸入方法,其特征在于,該方法基于上述權利要求1至5中任一項所述的用于存儲拼音的存儲結構,該方法包括下述步驟根據漢字拼音規則構建樹形結構,以存儲拼音;從樹形結構的根結點出發,每個拼音字母對應一層結點,沿著與給定的拼音相應的指針逐層向下查找;在找到與給定的拼音相等的結點后,獲取由根結點至該結點的路徑構成的拼音對應的漢字在字庫中的起始位置值及相同拼音的漢字個數值;根據起始位置值及漢字個數值從漢字庫中讀取漢字并顯示。
7.根據權利要求6所述的拼音輸入方法,其特征在于,若查找到樹形結構的葉結點仍未找到與給定的拼音相等的結點,則提示拼音輸入錯誤。
8.根據權利要求6或7所述的拼音輸入方法,其特征在于,所述拼音輸入方法應用于嵌入式系統設備中。
9.根據權利要求8所述的拼音輸入方法,其特征在于,所述嵌入式系統設備為數字機頂盒。
10.根據權利要求8所述的拼音輸入方法,其特征在于,所述嵌入式系統設備為手機。
全文摘要
本發明公開了一種用于存儲拼音的存儲結構及拼音輸入方法。所述存儲結構為一樹形結構,樹形結構的根結點包括有指向其一個子結點的指針域,樹形結構中除根結點和葉結點之外的其他結點各包括有指向其父結點的指針域、指向其一個子結點的指針域及指向一個兄弟結點的指針域,屬于同一層的兄弟結點依次鏈接形成一個鏈表,樹形結構中的葉結點包括有指向其父結點的指針域。應用本發明的存儲結構及拼音輸入方法,可以減少存儲結構所占的存儲空間,提高查找拼音及根據拼音查找漢字的速度。
文檔編號G06F17/30GK102521418SQ20111045783
公開日2012年6月27日 申請日期2011年12月31日 優先權日2011年12月31日
發明者田友強 申請人:青島海信寬帶多媒體技術有限公司