詞語糾錯原理簡介(corrector, do you mean?)

當在google百度輸入錯誤的時候,百度google等都能給出一個最相近的糾錯的提示。這個功能很是好用,也以爲特別有意思,因此在設計一個搜索小站的時候,想把這個功能加上。 html

在google上搜"spelling corrector"會獲得不少有用的信息,大概有兩種實現:一種是基於N-GRAM,另一種是基於狀態跳轉來實現。python的Whoosh庫2.4版本以前使用的是N-GRAM方式,而2.5以後使用的是FST狀態跳轉的方式。我的以爲基於FST可能會更好一些,下面簡單介紹它的原理: python

假設詞庫裏有:劉德華 劉青雲 劉嘉玲 劉俊傑 劉玉玲 劉易斯 劉松仁 劉以達,用戶輸入的是劉牛德,這個時候應該給用戶的輸入進行一次較正,以更合適本站的搜索信息。校訂方法: git

一、刪除法,把劉牛德變成-->劉牛 牛德,再對庫裏的詞典進行搜索 github

二、交換法,把劉牛德變成 劉德牛等,再進行搜索 算法

三、替換法,把劉牛德變成 劉羊德,劉馬德,劉牛法等 app

四、插入法,變成劉牛德國等 less

經過設計一外良好的狀態圖,以更好的實現上邊的算法,就是如這個連接所示 測試

循環的使用上邊的四種狀態的跳轉,每增長一次變化,詞的距離也相識的+1,好比劉牛德變成了劉德華,就通過一次交換,再一次替換,詞距也增長到了2. google

更詳細的原理介紹:此英文文章 .net

藉助Whoosh的corrector實現一個更友好速度更快的中文糾錯算法

測試地址

將計劃加入到這個開源項目裏

相關文章
相關標籤/搜索