關於中午輸入法的資料結構

2021-04-22 14:37:02 字數 2795 閱讀 1780

最近一直在研究中文輸入法的一些問題。google了一下,發現一篇被轉貼多次的文章,覺得還不錯,乾脆就再多轉它一次。

發布者:

杭州啟揚智慧型科技****

引言目前,以lcd和數字鍵盤實現的人機互動式介面在智慧型終端中廣泛採用。在不同的應用場合,對人機介面的要求也不同,一些情況下只要求簡單引數的顯示和選擇,而在一些資訊終端中,還要求文字的輸入。

在使用高效能cpu和標準顯示裝置的情況下,實現友好的人機介面可採用商用嵌入式系統( 如linux或wince)所支援的gui程式。但很多情況下,智慧型終端使用mcu,且其顯示裝置是非標準介面的小型lcd。此時,必須找到占用較少資源的低成本實現方法。

簡單的中文拼音輸入法

漢字輸入法的實質是建立一種按鍵組合到漢字編碼的對映關係,因此,使用數字鍵盤的嵌入式系統的輸入法與使用標準鍵盤的pc機的輸入法沒有本質的不 同,其區別主要在於嵌入式應用中處理器、儲存器等資源比較有限。如對應漢字「你」,拼音輸入法下pc鍵盤按鍵組合為「ni」,而在一般數字鍵盤下,其按鍵 組合則為「64」。

在多數手持式裝置(如智慧型**)中,以0~9數字鍵與幾個簡單的控制鍵實現漢字輸入,比較著名的是在手機中廣泛採用的t9 和itap 輸入法。這裡我們介紹一種簡單的拼音輸入法的實現方法。

一般終端鍵盤包括12個按鍵,分別是0~9數字鍵和「*」、「#」兩個特殊鍵。按通用規則,數字1對應空格,其功能基本等同於pc機中的空格鍵,用於輸入空格或作為當前漢字的確認鍵;2~9數字鍵分別對應下述漢語拼音字母:

2:a b c   3:d e f     4:g h i

5:j k l    6:m n o   7:p q r s 

8:t u v   9:w x y z

而「0」、「*」、「#」鍵則作為輸入法中的控制鍵。我們將「#」作為「選擇鍵」,用於選取同一數字鍵組合下的不同拼音組合。

輸入法中使用了兩個重要資料結構,分別是py_node和py_subnode。每個py_node對應乙個數字鍵組合,py_subnode則對 應一組拼音組合。由於乙個數字組合可對應多個拼音組合(如「226」對應「ban」、「bao」、「can 」、「cao」),因此這兩個結構實現的是乙個兩級的對應表。

py_node按樹組織,而py_subnode按雙向鍊錶組織。二者的基本關係如圖1所示。

以下是兩個結構的定義:

typedef struct py_nodepy_node;

typedef rom struct py_subnodepy_subnode;

設計中我們所參照的漢語拼音表中共有412種組合,這樣系統中必須有412個py_subnode與其一一對應;系統中共建立了250個py_node。建立此部分資料的工作比較繁瑣,分以下5個步驟進行:

1、 漢字按拼音進行分組,按常用程度排序,並將漢字轉化為unicode碼或國標碼,碼型視系統要求而定;

2、 將有效拼音轉換為數字鍵盤值組合,如拼音「cui」轉為數字值「284」,這些值對應了部分py_node;

3、 增加中間py_node,用於表示本身無效但後續輸入有效的拼音,如「b」、「c」、「don」、「dua」等節點;

4、 將數字鍵組合相同的py_subnode編成鍊錶,由某一py_node中的ptrpy指標指向表頭;

5、 按數字鍵組合的關係,將py_node組成樹。

圖1中所示組織關係並不複雜,但其工作量不小,一般情況下可編寫轉換程式自動建立。圖2為拼音輸入法資料結構的乙個片斷。

在改變當前py_node時,一般應伴有一些顯示操作,因應用不同各有差異,此處不做過多說明。

在當前節點下,可以用某一指定控制鍵(如「#」鍵)來選擇此py_node下屬的py_subnode以縮小漢字的選取範圍。

增加功能

① 增加常用字功能

在上述輸入法中,增加常用漢字。只考慮國標碼中的約7000常用漢字情況下,輸入法所占用的儲存空間增加14kb。

② 增加聯想功能

為使輸入更為友好,很多輸入法設有聯想功能,即在輸入乙個漢字後,此漢字常用的後續漢字自動成為候選項由使用者選擇。

③ 筆劃輸入法

筆劃輸入法較之拼音輸入法的優勢在於重碼少,輸入不常用漢字時也不必多次翻頁查詢。

以五筆劃輸入法為例,通過五個按鍵即可輸入漢字。該輸入法將漢字筆劃分為5種筆劃,即:「一」、「丨」、「丿」、「丶」和「-」五種筆劃,分別對應 數字鍵「7」、「8」、「9」、「*」、「0」,如「你」字的組合為「丿」、「丨」、「丿」、「-」、「丨」、「丿」、「丶」。

筆劃輸入法與拼音輸入法的區別在於人的感覺而非機器的操作,本質上只是按鍵組合與漢字碼表對應關係有所不同,如「你」在拼音輸入法下對應「64」,而在筆劃輸入法下則對應「989089*」。

④ 關於特殊符號、英文和數字

對於一些常用的特殊符號、英文和數字的輸入,較常用的做法是將以單獨的輸入法實現。

軟、硬體設計

輸入法的效能優劣,更多的不是體現在演算法,而是是否符合實際需求。因此它的優化工作是對前述py_node和py_subnode組織的優化,如漢 字次序的安排、聯想功能中後序字的組織、以及操作介面的設計是否適合人們的使用習慣。因演算法本身很簡單,所以用c語言可實現較高的**效率,以及較好的可 移植性。

對於很多8位mcu,位址空間不大於64kb。這樣小的空間對於漢字介面中的漢字型檔和輸入法中的大量資料結構是遠遠不夠的(如

一、二級常用字的 16×16點陣漢字型檔至少需要約220kb),因此常使用位址分頁方式實現位址擴充套件。在mcu外部設一鎖存器作為「頁」暫存器,每頁大小根據mcu特性和 實際需求確定,如mcs51系列最大可為64kb一頁。由於頁暫存器的操作為獨佔型的,因此在中斷內不能進行操作;而在基於rtos的多工環境下,應避 免多個任務同時使用頁暫存器。

結語杭州啟揚智慧型科技****

沒有廣告的輸入法 關於輸入法的若干問題

其實,對我個人來講,輸入法還是很少讓我產生困惑的。因為我可能是現在的少有的還會用五筆的一批人中的乙個。其實學五筆完全是個人原因,我的發音在平舌音與翹舌音的區分上真是很難區分開。所以在拼音輸入法上,天然就不舒服,還是無意間發現的 五筆 輸入法這個神器。只要會寫就能輸入了。於是確實是下了一定的力氣,學會...

linux 關於輸入法的安裝

fcitx 小企鵝輸入法 free chinese input toy for x是乙個以gpl方式發布的 基於xim的簡體中文輸入法集合 原為g五筆 包括五筆 五筆拼音 二筆 倉頡 晚風 冰蟾全息 拼音 全拼和雙拼 區位以及碼表輸入模組。fcitx是非常輕巧的輸入法,但是原作者於2007年夏終止了...

關於搜狗輸入法的評價

使用者介面 記住使用者選擇 當使用者使用搜狗輸入法時,搜狗可以記住使用者當前的打字習慣,當再次輸入相同的字母時,會將使用者上次選擇的偏好置為首選項。短期刺激 提醒使用者關於搜狗 的更新。長期使用的好處和壞處 好處 記住使用者的偏好,使使用者可以更快 更準確的打字。壞處 當使用者輸入錯誤時,不會顯示正...