無意中刷微博看到這篇文章作者用很簡短的語句寫了乙個拼寫檢查的python程式。看完之後發現原來拼寫檢查的原理是這樣的,之前感覺應該是很高深的東西。但是由於對python中lambda表示式的不怎麼理解於是,我就又憑著自己的理解簡單的寫了一遍。沒有原文中作者的優化部分,只是簡單的實現了功能。而且是只有文章中提到的編譯距離1以內的情況。
def words(text):
text=text.lower()
pat=re.compile(r'[a-z]+')
return pat.findall(text)
def probability_model(words):
res=collections.defaultdict(int)
for item in words:
res[item]+=1
return res
f=open(r'haha.txt','r')
text=f.read()
model=probability_model(words(text))
這是用來建立單詞拼寫的概率模型的部分,需要首先那一些文字對概率模型進行訓練,所謂的訓練其實就是統計一下單詞出現的次數。collections.defaultdict(int)是對字典進行乙個預設值的確定,引數中的int說明這個是乙個計數的字典,遇到未出現的鍵值就賦值0。
alphabet='abcdefghijklmnopqrstuvwxyz'
def edits(word):
n=len(word)
res=
#刪除乙個字元
for i in range(n):
res+=[word[0:i]+word[i+1:]]
#插入乙個字元
for i in range(n):
for a in alphabet:
res+=[word[0:i]+a+word[i:]]
#替換乙個字元
for i in range(n):
for a in alphabet:
res+=[word[0:i]+a+word[i+1:]]
#將相鄰兩個字元交換
for i in range(n-1):
res+=[word[0:i]+word[i+1]+word[i]+word[i+2:]]
#only one
return set(res)
這是產生編譯距離為1的所有可能的情況,最後用set去除重複出現的單詞。
完整**:
#coding:utf-8
import re,collections
alphabet='abcdefghijklmnopqrstuvwxyz'
def edits(word):
n=len(word)
res=
#刪除乙個字元
for i in range(n):
res+=[word[0:i]+word[i+1:]]
#插入乙個字元
for i in range(n):
for a in alphabet:
res+=[word[0:i]+a+word[i:]]
#改變乙個字元
for i in range(n):
for a in alphabet:
res+=[word[0:i]+a+word[i+1:]]
#交換相鄰字元
for i in range(n-1):
res+=[word[0:i]+word[i+1]+word[i]+word[i+2:]]
#only one
return set(res)
def words(text):
text=text.lower()
pat=re.compile(r'[a-z]+')
return pat.findall(text)
def probability_model(words):
res=collections.defaultdict(int)
for item in words:
res[item]+=1
return res
f=open(r'haha.txt','r')
text=f.read()
model=probability_model(words(text))
def correct(word):
words=edits(word)
if model[word]:
return word;
res=''
for w in words:
if model['w']>model[res]:
res=w
return w
單詞拼寫檢查
給定n個單詞 n 10000 給定m個查詢 輸出無法查詢見的單詞的個數 分析 貌似是雜湊表的入門題?我覺得好難。做雜湊表需要一些技巧的,大概就是對單詞的首 中 尾的字元順序碼加權,方便插入也方便查詢。遇到be和bee這種單詞可能費一些時間,不過總的來說還是很快的。單詞拼寫檢查 include inc...
python PyEnchant(拼寫檢查)
本文主要是記錄了一下pyenchant包的安裝以及簡單使用。這個包主要功能是對英語單詞進行拼寫檢查,並可以對拼寫錯誤的單詞推薦一些可能的正確單詞。使用pip直接安裝即可,指令如下 pip install pyenchant使用上述指令,如果安裝沒有錯誤就是安裝成功了,一般情況下 mac ubuntu...
拼寫檢查器
class spellcheck object 拼寫糾錯 def init self,file name content open file name read self.words re.findall a za z content self.alphabet abcdefghijklmnopqr...