T9輸入法的實現

2021-06-05 10:18:05 字數 1965 閱讀 8939

t9輸入法,名字聽起來陌生,可是大家卻經常使用它。可以說t9輸入法是輸入法歷史中的一次革命。至少自t9輸入法開始,輸入法有長足的進步。

如圖手機中九個數字鍵。26個英文本母被分配到2至9這8個數字鍵上。以前想輸入英文單詞的時候總是需要連續多次按某個鍵,才能得到目標字母。比如想輸入「hello」,就需要按兩次4,兩次3,三次5,三次5,三次6.輸入乙個單詞需要數十次的按鍵,更何況還有經常按錯的情況。編輯一條簡訊非常麻煩。

t9輸入法很好的解決了這一問題。使用者利用9個數字鍵輸入非常雜的英文單詞並且不用重複按某個字元。系統將會根據已有詞庫找出可能性最大的單詞。例如,目標單詞為「hello」,只需輸入4,3,5,5,6即可,系統會自動過濾掉不合法的單詞如「gdjjm」。排除非法單詞,只考慮合法單詞,這樣大大加速了輸入速度。

然而這只是第一步,因為每次輸入數字之後,可能有多個候菜單詞字首與此匹配。這就需要按可能性提供可能性最大的(最常用)的英文單詞。比如系統已知兩個單詞:"idea","hello"。idea最常用(可能度最高)。那麼當依次輸入4,3,5,5,6時,對於每次按鍵系統給出的候菜單詞應該是:

i (4)

id (3)

hel (5)

hell (5)

hello (6)

這樣的話,通過t9輸入法就可以大大提高輸入速度和簡潔度。

如何實現t9輸入法呢?

(1)建立詞庫

將大量單詞儲備起來便於快速查詢,字典樹無疑是很好的選擇。每個節點將儲存此字首的可能度,結構如下:

/*

* 字典樹

*/public class trie }

public void insert(string str, int probablity) else

} }public int search(string str) else

} return p.probablity; }

}

(2)查詢

建立好的字典樹,每個節點最多有26個孩子分別代表下乙個字元。當給出乙個查詢串「43556」的時候,利用廣度優先遍歷來搜尋長度x的所有字首的可能度。找出最大的即可。廣搜的時候要用到佇列。

舉例模擬過程:

當輸入4(g,h,i)之後,通過字典樹遍歷發現只有"h","i",找出可能讀最大的輸出(i),並將h,i都入隊。

輸入3(d,e,f)後,拿出佇列中的"h",分別組成"hd","he","hf",去字典樹中查,將其中合法串入隊,記錄最大可能度對應串。再將h出隊。對"i"做同樣操作。最終找出最大的可能讀最大串。

……可以看出廣搜的過程中大量剪枝,以及常用單詞的長度最多不過十幾個字母。所以字典樹的深度也是十幾,加上大量剪枝,效能還不錯。

static int ref = ,

, ,//按鈕2,三個字母a,b,c

, ,, ,

, , };

public static queuequeue = new linkedlist(); //用於廣度優先遍歷過程中的佇列

public static trie trie; //字典樹

public static void bfs(string str)

if(trie.search(tempstr) > max_probablity)

}queue.poll();

} if("".equals(probastr)) else

} while('1' != str.charat(i++))

}

思考:1.以上模擬過程只是給出最大可能度的串,也可以按可能度將所有匹配串按順序都給出,然後由使用者選擇。

2.感覺t9輸入法打破了之前輸入法的僵局,雖然只是用在手機輸入。但是個人認為當前流行的智慧型鍵盤輸入法也採用了類似的處理。比如利用搜狗輸入法依次輸入"hao""zi""wei""zhi"

給出的最大候選依次為:「好」「耗子」「好滋味」「好自為之」。是不是有點t9輸入法的味道?如果有興趣的話可以交流討論!

智慧型T9英文輸入法

智慧型t9英文輸入法 time limit 1s memory limit 1000k total submit 1556 accepted 534 某款新型手機為了方便使用者,希望開發一種新的英文輸入法.要求在輸入英文的時候輸入法不但能夠做到自動聯想,還能進行自動 糾錯.譬如使用者希望輸入hell...

乙個轉來的簡單T9輸入法

關於t9輸入法的核心程式 由朋友nix提供 共兩個檔案,乙個是nixinputmethod.h,還有乙個是t9.c 參見附錄。具體輸入法的實現方法如下 1 首先建立乙個對話方塊,然後在其中放入兩個控制項 idc edit1 和 idc word static控制項 2 為了實現在edit中一邊輸入,...

T9手機輸入法的發明者Martin King

martin king是曾經最流行的手機文字輸入法t9的發明者,2010年9月21日因癌症醫治無效去世,享年60歲,他長期抗爭的疾病來自越南戰爭時期美軍試用的橙劑所誘發。他的生命如同隕星短暫地掃過天空,整個世界都從他的才智中受益非淺。martin king最大的貢獻就是為所有手機使用者熟知的t9輸入...