#coding=utf-8
#!/usr/bin/python import sys, re, collections #读入文件
def read_file(filename):
try:
fp = open(filename)
text = fp.read()
except IOError:
print ("Error opening or reading input file: ",filename)
sys.exit()
return text #分割文件为单词,并将字母都转换为小写
def words(text):
return re.findall('[a-z]+', text.lower()) # 该函数计算输入文本每个单词出现的次数
def train(features):
# 生成了一个默认value=1的带key的数据字典
model = collections.defaultdict(lambda: 1)
for f in features:
model[f] += 1
return model # big文本中每一个单词及其出现的次数
NWORDS = train(words(read_file('/home/aistudio/data/data12892/big.txt'))) alphabet = 'abcdefghijklmnopqrstxyz'
# 变换输入单词形式,得到那种是最可能的错误
def edist1(word):
n = len(word)
return set([word[0:i]+word[i+1: ] for i in range(n)] + #删除
[word[0:i]+word[i+1]+word[i]+word[i+2: ] for i in range(n-1)] + #错位
[word[0:i]+c+word[i+1: ] for i in range(n) for c in alphabet] + #变换
[word[0:i]+c+word[i: ] for i in range(n+1) for c in alphabet]) #添加
# 在edist1的基础上进一步变换,要去是出现在字典内的词
def known_edist2(word):
return set(e2 for e1 in edist1(word) for e2 in edist1(e1) if e2 in NWORDS)
# big.txt中已知的单词集合
def known(words):
wordintxt = set([])
for w in words:
if w in NWORDS:
wordintxt.add(w)
return wordintxt
# return set(w for w in words if w in NWORDS) def correct(word):
candidates = known([word]) or known(edist1(word)) or known_edist2(word) or [word]
return max(candidates, key=lambda w:NWORDS[w]) print (correct("acacss"))

最新文章

  1. MyBatis - MyBatis使用log4j2显示sql和结果集
  2. HTML5的form表单属性
  3. sourceTree 更新svn提示can't locate SVN/Core.pm
  4. .NET Framework 4 和 .NET Framework 4 Client Profile
  5. 【转】ASP.NET 高效分页存储过程
  6. jsp多条件查询及查询结果在同一页面显示(原创)
  7. 【HTML XHTML CSS基础教程(第6版)】笔记之HTML XHTML笔记(1~6章)
  8. 通过Java反射调用方法
  9. java基础:数组查询,同一数组一个元素最多出现两次
  10. [Python Study Notes] python面试题总结
  11. 勤拂拭软件系列教程 - java web开发
  12. KMP初步
  13. 移动端h5调试方法
  14. mssql sqlserver存储过程专题
  15. selenium +chromdriver模块
  16. IE和Chrome执行javascript对鼠标双击事件的不同响应
  17. 走进JVM之一 自己编译openjdk源码
  18. 在javascript中substr和substring的区别是什么
  19. Tensorflow中的tf.argmax()函数
  20. 谈缓存和Redis

热门文章

  1. Nowcoder Monotonic Matrix ( Lindström–Gessel–Viennot lemma 定理 )
  2. HGOI 20190816 省常中互测8
  3. python3.6+Xadmin2.0系列(一) xadmin下载及安装
  4. 使用VSCODE开发UE4
  5. java中的基本数据类型简谈
  6. vue2.0 父子组件之间的通信问题
  7. TensorFlow线性回归
  8. ffmpeg剪切视频
  9. Android Studio设置国内镜像代理
  10. leetcode 347前k个高频元素