百度筆試題目剖析——拼寫糾錯

zz from http://summerbell.iteye.com/blog/492343

更多百度筆試題彙總參見http://summerbell.iteye.com/blog/486677(百度筆試題彙總)

以及http://summerbell.iteye.com/blog/486792(百度筆試題目剖析——尋找熱門查詢 )

 

 

網上流傳的百度筆試題目部分附有答案。但一家之言,難免偏頗。

 

題目:

 

在用戶輸入英文單詞時,經常發生錯誤,我們需要對其進行糾錯。假設已經有一個包含了正確英文單詞的詞典,請你設計一個拼寫糾錯的程序。

(1)請描述你解決這個問題的思路;

(2)請給出主要的處理流程,算法,以及算法的複雜度;

(3)請描述可能的改進(改進的方向如效果,性能等等,這是一個開放問題)。

 

網上流傳解答:

 (1)思路:

字典以字母鍵樹組織,在用戶輸入同時匹配

 

(2)流程:

每輸入一個字母:

沿字典樹向下一層,

a)若可以順利下行,則繼續至結束,給出結果;

b)若該處不能匹配,糾錯處理,給出拼寫建議,繼續至a);

 

算法:

1.在字典中查找單詞

字典採用27叉樹組織,每個節點對應一個字母,查找就是一個字母一個字母匹配.算法時間就是單詞的長度k。

 

2.糾錯算法

情況:當輸入的最後一個字母不能匹配時就提示出錯,簡化出錯處理,動態提示可能處理方法:

(a)當前字母前缺少了一個字母:搜索樹上兩層到當前的匹配作爲建議;

(b)當前字母拼寫錯誤:當前字母的鍵盤相鄰作爲提示;(只是簡單的描述,可以有更多的)根據分析字典特徵和用戶單詞已輸入部分選擇(a),(b)處理

 

複雜性分析:影響算法的效率主要是字典的實現與糾錯處理

(a)字典的實現已有成熟的算法,改進不大,也不會成爲瓶頸;

(b)糾錯策略要簡單有效,如前述情況,是線性複雜度;

 

(3)改進

策略選擇最是重要,可以採用統計學習的方法改進。

 

剖析:

 

         先看一下通過搜索示例分析Google中文糾錯功能的實現過程。

 

 

 

 

鍵入關鍵詞

糾錯提示

1

氯華鈉

氯化鈉

2

氯哈鈉

-

3

擺渡

-

4

擺度

百度

 

         從上例可知,Google是通過同音詞的對比來糾錯的,音不同則無法糾錯。也就是說,只有錯誤的同音詞纔會被糾正,而正確的同音詞是不會有糾錯提示的。

 

         考慮到中文輸入法一般可以分成拼音輸入法和字形輸入法,糾錯提示任務依然任重而道遠。甚至英文也不會讓人舒服:考慮手寫輸入情況下,英文單詞之間的單詞空格也不會那麼容易辨認——或許採用英文分詞是個好辦法。

 

         ……

 

         首先討論如何發現錯誤的位置,再討論如何糾錯。如1992年由施得勝等提出的基於統計的中文錯字偵測法,主要是提出文章中自動偵測錯字所在位置的方法。該論文是以統計的方法,在訓練大量的文句庫後,得到單詞詞詞頻表及連續強度表,再以這兩個表爲基礎,經由評分函數計算出被懷疑的單字詞所得之分數,若小於門限值,則標示爲錯字。其實驗數據顯式檢錯率可達70%以上。

         張照煌博士於1994年提出一種自動偵錯被訂正中文文書中錯別字的方法。其方法爲事先整理含字形、字音、字義或輸入碼相近字所形成的‘綜合近義子集’代換原文,產生候選字串,其次利用語言模型評分,找出評分最高的候選字串,即可自動偵測文書中的錯別字;但是事先準備的‘綜合近義子集’會因爲蒐集不足、過量的子集會造成誤判,另外近似子集代換後,所產生的候選字串數量龐大,在中文的檢錯方面勢必造成軟體的負擔。

 



 

 

 

         常見的英文單詞糾錯法有:,主要有誤拼詞典法、詞形距離法、最小編輯距離法、相似鍵法、骨架鍵法、N-gram法、基於規則的技術、詞典及神經網絡技術。

(1)誤拼字典法。收集大規模真實文本中拼寫出錯的英文單詞並給出相應的正確拼寫,建造一個無歧義的誤拼字典。在進行英文單詞拼寫檢查時,查找誤拼字典,如命中,則說明該單詞拼寫有誤,該詞的正確拼寫字段爲糾錯建議。該方法的特點是偵錯和糾錯一體化,效率高。但英文拼寫錯誤具有隨機性,很難保證誤拼字典的無歧義性和全面性,因此查準率低、校對效果差。

(2)詞形距離法。這是一種基於最大相似度和最小串間距離的英文校對法。其核心思想是構造單詞的似然性函數,如該單詞在詞典中,則單詞拼寫正確;否則,按照似然性函數,在詞典中找到一個與誤拼單詞最相似的詞作爲糾錯候選詞。該方法的特點是節省存儲空間,能反映一定的常見拼寫錯誤統計規律,是一種模糊校對法。

(3)最小編輯距離法。通過計算誤拼字符串與詞典中某個詞間的最小編輯距離來確定糾錯候選詞。所謂最小編輯距離是指將一個詞串轉換爲另一個詞串所需的最少的編輯操作次數(編輯操作是指插入、刪除、易位和替換等)。還有人提出了反向最小編輯距離法,這種方法首先對每個可能的單個錯誤進行交換排列,生成一個候選集,然後,通過查詞典看哪些是有

效的單詞,並將這些有效的單詞作爲誤拼串的糾錯建議。

(4)相似鍵法。相似鍵技術是將每個字符串與一個鍵相對應。使那些拼寫相似的字符串具有相同或相似的鍵。當計算出某個誤拼字符串的鍵值之後,它將給出一個指針。指向所有與該誤拼字符串相似的單詞,並將它們作爲給誤拼字符串的糾錯建議。

(5)骨架鍵法。通過構建骨架鍵詞典,在英文單詞出現錯誤時,先抽取出該錯誤單詞的骨架鍵,然後再去查骨架鍵詞典,將詞典中與該單詞具有相同骨架鍵的正確單詞作爲該單詞的糾錯建議。

(6)N-gram法。基於n元文法,通過對大規模英文文本的統計得到單詞與單詞問的轉移概率矩陣。當檢測到某英文單詞不在詞典中時。查轉移概率矩陣,取轉移概率大於某給定閾值的單詞爲糾錯建議。

(7)基於規則的技術。利用規則的形式將通常的拼寫錯誤模式進行表示,這些規則可用來將拼寫錯誤蠻換爲有效的單詞。對於一個誤拼字符串,應用所有合適的規則從詞典中找到一些與之對應的單詞作爲結果,並對每個結果根據事先賦予生成它的規則的概率估計計算一個數值,根據這個數值對所有候選結果排序。

 

現有的基於上下文的文本錯誤校對方法有三類:①利用文本的特徵,如字形特徵、詞性特徵或上下文特徵;②利用概率統計特性進行上下文接續關係的分析;③利用規則或語言學知識,如語法規則、詞搭配規則等。

(1)利用文本上下文的同現與搭配特徵可以將文本的校對過程描述爲詞排歧過程。若稱待校對的詞爲目標詞,則建立混淆集C={W1,…,Wn},其中的每個詞均與文本中的目標詞容易發生混淆或歧義。如假設C={from,form},如果在文本中出現from或from時,就將它看作是一個from與from之間的歧義,校對的任務就是根據上下文決定哪個詞是我們想要的詞。上下文相關的校對問題由語句和語句中要被校正的詞構成,Bayesian方法和基於Winnow的方法都是將這樣的問題表示成有效特徵表,每一個有效特徵表示目標詞的上下文中有一個特殊的語言學模式存在。目前常使用的特徵有兩種類型:上下文的詞和詞的搭配。上下文詞特徵用來檢查在目標詞周圍的±k個詞的範圍內是否有特殊詞存在;詞搭配則用來檢測在目標詞的周圍f個相鄰詞和/或詞性標註的狀態。如假設目標詞的混淆集爲{weather,whether},

若置k=10,f=2,目標詞的可用特徵包括:

①目標詞前後10個詞範圍內的cloudy;

②當前詞後爲to+動詞。

特徵①就預示着當前詞應爲weather;而②則用來檢查詞搭配,它表明當前詞後緊接着一個“to+動詞”的結構,表明當前詞應取whether(如I don’t know whether to laugh or cry)。在這種方法中,主要要解決的問題包括混淆集的求取;目標詞所在上下文中特徵的表示,即如何將語句的初始文本表示轉換爲有效特徵。

基於詞語同現與搭配特徵的校對方法有很多種,較好的有Bayesian方法和基於Winnow方法。各種N-gram模型,如長距離N-gram、觸發對N-gram等模型,都可以利用目標詞上下文中的詞同現特徵或搭配特徵,採用最大似然估計法、互信息、相關度等方法檢測文本中的錯誤,並通過相鄰詞間的轉移概率確定糾錯候選詞,實現對目標詞的校正。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章