这几天在翻旧代码时发现以前写的注释部分有很多单词拼写错误,这些单词错得不算离谱,应该可以用工具自动纠错绝大部分。用 Python 写个拼写检查脚本很容易,如果能很好利用 aspell/ispell 这些现成的小工具就更简单了。

要点

1、输入一个拼写错误的单词,调用 aspell -a 后得到一些候选正确单词,然后用距离编辑进一步�鹧〕龈�精确的词。比如运行 aspell -a,输入 "hella' 后得到如下结果:

hell, Helli, hello, heal, Heall, he'll, hells, Heller, Ella, Hall, Hill, Hull, hall, heel, hill, hula, hull, Helga, Helsa, Bella, Della, Mella, Sella, fella, Halli, Hally, Hilly, Holli, Holly, hallo, hilly, holly, hullo, Hell's, hell's

2、什么是距离编辑(Edit-Distance,也叫 Levenshtein algorithm)呢?就是说给定一个单词,通过多次插入、删除、交换、替换单字符的操作后枚举出所有可能的正确拼写,比如输入 "hella',经过多次插入、删除、交换、替换单字符的操作后变成:

"helkla', "hjlla', "hylla', "hellma', "khella', "iella', "helhla', "hellag', "hela', "vhella', "hhella', "hell', "heglla', "hvlla', "hellaa', "ghella', "hellar', "heslla', "lhella', "helpa', "hello', …

3、综合上面2个集合的结果,并且考虑到一些理论知识可以提高拼写检查的准确度,比如一般来说写错单词都是无意的或者误打,完全错的单词可能性很小,而且单词的第一个字母一般不会拼错。所以可以在上面集合里去掉第一个字母不符合的单词,比如:'Sella', "Mella', khella', "iella' 等,这里 VPSee 不删除单词,而把这些单词从队列里取出来放到队列最后(优先级降低),所以实在匹配不了以 h 开头的单词才去匹配那些以其他字母开头的单词。

4、程序中用到了外部工具 aspell,如何在 Python 里捕捉外部程序的输入和输出以便在 Python 程序里处理这些输入和输出呢?Python 2.4 以后引入了 subprocess 模块,可以用 subprocess.Popen 来处理。

5、Google 大牛 Peter Norvig 写了一篇 How to Write a Spelling Corrector很值得一看,大牛就是大牛,21行 Python 就解决拼写问题,而且还不用外部工具,只需要事先读入一个词典文件。本文程序的 edits1 函数就是从牛人家那里 copy 的。

代码

#!/usr/bin/python

# A simple spell checker

import os, sys, subprocess, signal

alphabet = 'abcdefghijklmnopqrstuvwxyz'

def found(word, args, cwd = None, shell = True):

child = subprocess.Popen(args,

shell = shell,

stdin = subprocess.PIPE,

stdout = subprocess.PIPE,

cwd = cwd,

universal_newlines = True)

child.stdout.readline()

(stdout, stderr) = child.communicate(word)

if ": " in stdout:

# remove

stdout = stdout.rstrip(" ")

# remove left part until :

left, candidates = stdout.split(": ", 1)

candidates = candidates.split(", ")

# making an error on the first letter of a word is less

# probable, so we remove those candidates and append them

# to the tail of queue, make them less priority

for item in candidates:

if item[0] != word[0]:

candidates.remove(item)

candidates.append(item)

return candidates

else:

return None

# copy from http://norvig.com/spell-correct.html

def edits1(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])

def correct(word):

candidates1 = found(word, 'aspell -a')

if not candidates1:

print "no suggestion"

return

candidates2 = edits1(word)

candidates = []

for word in candidates1:

if word in candidates2:

candidates.append(word)

if not candidates:

print "suggestion: %s" % candidates1[0]

else:

print "suggestion: %s" % max(candidates)

def signal_handler(signal, frame):

sys.exit(0)

if __name__ == '__main__':

signal.signal(signal.SIGINT, signal_handler)

while True:

input = raw_input()

correct(input)

更简单的方法

当然直接在程序里调用相关模块最简单了,有个叫做 PyEnchant的库支持拼写检查,安装 PyEnchant 和 Enchant 后就可以直接在 Python 程序里 import 了:

>>> import enchant

>>> d = enchant.Dict("en_US")

>>> d.check("Hello")

True

>>> d.check("Helo")

False

>>> d.suggest("Helo")

['He lo', 'He-lo', 'Hello', 'Helot', 'Help', 'Halo', 'Hell', 'Held', 'Helm', 'Hero', "He'll"]

>>>

python 英语拼写-Python实现单词拼写检查相关推荐

  1. python英语翻译-python制作英语翻译小工具

    用python爬虫可以制作英语翻译小工具.来看下代码吧- import requests,json #函数封装 def translator(): session=requests.session() ...

  2. python英语翻译-python制作英语翻译小工具代码实例

    这篇文章主要介绍了python制作英语翻译小工具代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 用python爬虫可以制作英语翻译小工具.来 ...

  3. 机器学习:单词拼写纠正器python实现

    01 朴素贝叶斯分类实战 前面介绍了贝叶斯的基本理论,朴素贝叶斯分类器,拉普拉斯修正,文章的链接如下: 机器学习:说说贝叶斯分类 朴素贝叶斯分类器:例子解释 朴素贝叶斯分类:拉普拉斯修正 在这3篇推送 ...

  4. Python背单词记单词小程序,可自定义词库,支持多种记忆模式,根据词义拼写、选择单词,根据词意选择单词

    Python背单词记单词小程序,可自定义词库,支持多种记忆模式,根据词义拼写.选择单词,根据词意选择单词,可乱序抽查,可对错题进行反复抽查 完整程序源代码下载:Python背单词记单词小程序 词库生成 ...

  5. 朴素贝叶斯实战应用---单词拼写检查器(结合html直观展示)

    博文写于2020-05-10,于2020-07-07再次编辑 1.一个小小的引子: 写这篇博文的时候,日子有点特殊,啥日子大家应该都知道.用一篇某高二学生母亲节的英语作文,先祝天下所有母亲身体健康,母 ...

  6. WPF 4 单词拼写检查(SpellCheck)

    WPF 4 单词拼写检查(SpellCheck) 原文:WPF 4 单词拼写检查(SpellCheck) 在WPF中 Textbox 和RichTextBox 控件都内置了拼写检查属性,但该属性目前默 ...

  7. 列表根据下标取值_散列表(上):Word文档中的单词拼写检查功能是如何实现的?...

    Word这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在Word里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误".Word的这个单词拼写 ...

  8. python英语单词-干货|3天教你掌握Python必备常用英语词汇

    对于一个英语不太好的童鞋来说,学习Python的过程中常常会遇到各种问题,虽然现在各种翻译器很厉害,但是也不如把单词记在脑海里省时省事,今天小编针对学习Python英语基础不太好的童鞋,整理了一套必备 ...

  9. python英语单词 扇贝英语安卓下载_扇贝单词app下载-扇贝单词英语版 安卓版v3.6.503-pc6手机下载...

    扇贝单词app是一款可以和小伙伴一起学英语背单词的app,扇贝单词英语版属于千万用户的背单词神器,让你的英语水平突飞猛进,你确定不要来试一试吗? 软件介绍 扇贝单词英语版是一款很实用的英语单词学习软件 ...

  10. 18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?

    问题引入 在 Word 里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误",Word 文本编辑器的拼写检查功能是如何实现的呢?散列表(Hash Table) 散列表 散列 ...

最新文章

  1. android wear 兼容问题,【悲剧了】仅 1/4 安卓手机兼容 Android Wear - 爱应用
  2. SQL 调优专题总结
  3. 剑指offer 顺时针打印矩阵
  4. 无监督学习 k-means_无监督学习-第2部分
  5. python36中文手册_python36中文手册_python_36_文件操作4
  6. php cookie 二级域名,php如何设置cookie对整个域名有效及二级域名
  7. eclipse断点Source not found解决方案1,2,3
  8. KMP算法、AC自动机算法的原理介绍以及Python实现
  9. extjs 右下角弹出消息框
  10. CCNA学习指南 第七章 下载
  11. 从单个静止图像进行 3d 深度重建(论文2007)
  12. 【尚硅谷_数据结构与算法】十二、算法
  13. hadoop培训感想
  14. 参加第五届“软件杯”记录
  15. 苹果自带的清理软件_软件| 卸载软件、清理文件,你只需Revo Uninstaller Pro(自带注册程序)...
  16. Windows 2000 单词表
  17. c语言 遍历搜索文件夹(获取文件夹中所有内容)
  18. 前端使用pdf.js插件在线浏览pdf
  19. C# 发送邮件之QQ邮箱
  20. 【引用】免费论文检测 系统 软件 论文免费检测 论文抄袭检测大师 万方数据论文相似性检测系统 万方论文检测...

热门文章

  1. HDU-1869 六度分离 (矩阵的幂运算求通路个数)
  2. 引导页如何在pc端实现
  3. 一个月薪 12000 的北京程序员的真实生活 !
  4. matlab 太阳系仿真,三维仿真太阳系
  5. win10远程连接ubuntu18.4
  6. matlab最简矩阵,Matlab中,将矩阵A化为行最简阶梯型矩阵,需借助指令:
  7. 《计算机网络》读书笔记
  8. 雅虎终于死了:从市值 1000 亿到贱卖 48 亿,到最后连名字都没保住
  9. 硬件学习之滤波电容的阻抗特性
  10. 银耳椰椰——冲刺计划