用 Python 实现英文单词纠错功能

单词纠错

  在我们平时使用Word或者其他文字编辑软件的时候,常常会遇到单词纠错的功能。比如在Word中:

640?wx_fmt=png
单词拼写错误

单词纠错算法

  首先,我们需要一个语料库,基本上所有的NLP任务都会有语料库。单词纠错的语料库为bit.txt,里面包含的内容如下:

  • Gutenberg语料库数据;

  • 维基词典;

  • 英国国家语料库中的最常用单词列表。

下载的网址为:https://github.com/percent4/-word- 。

Python实现

  实现单词纠错的完整Python代码(spelling_correcter.py)如下:

# -*- coding: utf-8 -*-
import re, collections

def tokens(text):
    """
    Get all words from the corpus
    """
    return re.findall('[a-z]+', text.lower())

with open('E://big.txt', 'r') as f:
    WORDS = tokens(f.read())
WORD_COUNTS = collections.Counter(WORDS)

def known(words):
    """
    Return the subset of words that are actually
    in our WORD_COUNTS dictionary.
    """
    return {w for w in words if w in WORD_COUNTS}


def edits0(word):
    """
    Return all strings that are zero edits away
    from the input word (i.e., the word itself).
    """
    return {word}


def edits1(word):
    """
    Return all strings that are one edit away
    from the input word.
    """
    alphabet = 'abcdefghijklmnopqrstuvwxyz'

    def splits(word):
        """
        Return a list of all possible (first, rest) pairs
        that the input word is made of.
        """
        return [(word[:i], word[i:]) for i in range(len(word) + 1)]

    pairs = splits(word)
    deletes = [a + b[1:] for (a, b) in pairs if b]
    transposes = [a + b[1] + b[0] + b[2:] for (a, b) in pairs if len(b) > 1]
    replaces = [a + c + b[1:] for (a, b) in pairs for c in alphabet if b]
    inserts = [a + c + b for (a, b) in pairs for c in alphabet]
    return set(deletes + transposes + replaces + inserts)


def edits2(word):
    """
    Return all strings that are two edits away
    from the input word.
    """
    return {e2 for e1 in edits1(word) for e2 in edits1(e1)}


def correct(word):
    """
    Get the best correct spelling for the input word
    """
    # Priority is for edit distance 0, then 1, then 2
    # else defaults to the input word itself.
    candidates = (known(edits0(word)) or
                  known(edits1(word)) or
                  known(edits2(word)) or
                  [word])
    return max(candidates, key=WORD_COUNTS.get)


def correct_match(match):
    """
    Spell-correct word in match,
    and preserve proper upper/lower/title case.
    """

    word = match.group()

    def case_of(text):
        """
        Return the case-function appropriate
        for text: upper, lower, title, or just str.:
        """
        return (str.upper if text.isupper() else
                str.lower if text.islower() else
                str.title if text.istitle() else
                str)

    return case_of(word)(correct(word.lower()))


def correct_text_generic(text):
    """
    Correct all the words within a text,
    returning the corrected text.
    """
    return re.sub('[a-zA-Z]+', correct_match, text)

测试

  有了上述的单词纠错程序,接下来我们对一些单词或句子做测试。如下:

original_word_list = ['fianlly', 'castel', 'case', 'monutaiyn', 'foresta', \
                      'helloa', 'forteen', 'persreve', 'kisss', 'forteen helloa', \
                      'phons forteen Doora. This is from Chinab.']

for original_word in original_word_list:
    correct_word = correct_text_generic(original_word)
    print('Orginial word: %s\nCorrect word: %s'%(original_word, correct_word))

输出结果如下:

Orginial word: fianlly

  接着,我们对如下的Word文档(Spelling Error.docx)进行测试(下载地址为:https://github.com/percent4/-word-),

640?wx_fmt=png
有单词错误的Word文档

对该文档进行单词纠错的Python代码如下:

from docx import Document
from nltk import sent_tokenize, word_tokenize
from spelling_correcter import correct_text_generic
from docx.shared import RGBColor

# 文档中修改的单词个数
COUNT_CORRECT = 0
#获取文档对象
file = Document("E://Spelling Error.docx")

#print("段落数:"+str(len(file.paragraphs)))

punkt_list = r",.?\"'!()/\\-<>:@#$%^&*~"

document = Document()   # word文档句柄

def write_correct_paragraph(i):
    global COUNT_CORRECT

    # 每一段的内容
    paragraph = file.paragraphs[i].text.strip()
    # 进行句子划分
    sentences = sent_tokenize(text=paragraph)
    # 词语划分
    words_list = [word_tokenize(sentence) for sentence in sentences]

    p = document.add_paragraph(' '*7)  # 段落句柄

    for word_list in words_list:
        for word in word_list:
            # 每一句话第一个单词的第一个字母大写,并空两格
            if word_list.index(word) == 0 and words_list.index(word_list) == 0:
                if word not in punkt_list:
                    p.add_run(' ')
                    # 修改单词,如果单词正确,则返回原单词
                    correct_word = correct_text_generic(word)
                    # 如果该单词有修改,则颜色为红色
                    if correct_word != word:
                        colored_word = p.add_run(correct_word[0].upper()+correct_word[1:])
                        font = colored_word.font
                        font.color.rgb = RGBColor(0x00, 0x00, 0xFF)
                        COUNT_CORRECT += 1
                    else:
                        p.add_run(correct_word[0].upper() + correct_word[1:])
                else:
                    p.add_run(word)
            else:
                p.add_run(' ')
                # 修改单词,如果单词正确,则返回原单词
                correct_word = correct_text_generic(word)
                if word not in punkt_list:
                    # 如果该单词有修改,则颜色为红色
                    if correct_word != word:
                        colored_word = p.add_run(correct_word)
                        font = colored_word.font
                        font.color.rgb = RGBColor(0xFF, 0x00, 0x00)
                        COUNT_CORRECT += 1
                    else:
                        p.add_run(correct_word)
                else:
                    p.add_run(word)

for i in range(len(file.paragraphs)):
    write_correct_paragraph(i)

document.save('E://correct_document.docx')

print('修改并保存文件完毕!')
print('一共修改了%d处。'%COUNT_CORRECT)

输出的结果如下:

修改并保存文件完毕!

修改后的Word文档如下:

640?wx_fmt=png
单词纠错后的Word文档

其中的红色字体部分为原先的单词有拼写错误,进行拼写纠错后的单词,一共修改了19处。

总结

  单词纠错实现起来并没有想象中的那么难,但也不是那么容易~https://github.com/percent4/-word- 。

Python中文社区
关注 关注
  • 11
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
python 单词纠错_用 Python 实现英文单词纠错功能
weixin_35960357的博客
01-28 1646
单词纠错在我们平时使用Word或者其他文字编辑软件的时候,常常会遇到单词纠错功能。比如在Word中:单词拼写错误单词纠错算法首先,我们需要一个语料库,基本上所有的NLP任务都会有语料库。单词纠错的语料库为bit.txt,里面包含的内容如下:Gutenberg语料库数据;维基词典;英国国家语料库中的最常用单词列表。下载的网址为:https://github.com/percent4/-word- ...
英文单词纠错程序
05-08
自然语言理解上的作业,源码
Python实现单词拼写检查
09-22
主要介绍了Python实现单词拼写检查,本文讲解了单词拼写检查的一些知识并给出两种实现方法,需要的朋友可以参考下
spell_check.zip
03-02
该资源为一个压缩包,包括一个python 文件以及一个文档格式为txt的数据信息,主要为一些英语单词文章数据,通过统计该文章从而对输入单词实现一个拼写纠错功能
通过Python实现对.c和.h注释部分英文单词匹配和纠错
最新发布
07-26
通过Python实现对test下C语言注释部分英文单词匹配和纠错。具体根据自身需求进行修改文件路径。
python 单词纠错_自然语言处理1——语言处理与Python(内含纠错
weixin_39811036的博客
12-09 410
学习Python自然语言处理,记录一下学习笔记。运用Python进行自然语言处理需要用到nltk库,关于nltk库的安装,我使用的pip方式。pip nltk或者下载whl文件进行安装。(推荐pip方式,简单又适用)。安装完成后就可以使用该库了,但是还需要下载学习所需要的数据。启动ipython,键入下面两行代码:>>>importnltk>>>nltk.dow...
10 个杀手级的 Python 自动化脚本
z099164的博客
11-25 3767
真不错哦
input限制输入长度_如何实现输入框的拼写纠错功能
weixin_39657125的博客
12-01 147
在使用搜索引擎时,当我们输入错误的关键词时,当然这里的错误是拼写错误,搜索引擎的下拉框中仍会显示以正确关键词为前前辍的提示,当你直接回车搜索错误的关键词时,搜索引擎的结果中仍包括正确关键词的结果。你有没有想过它是如何实现的呢?前文如何如何实现搜索框的关键词提示功能分享了如何使用前辍树实现搜索框的关键词提示功能。今天分享一个拼写纠错功能实现,其关键在于给定一个错误的关键词,如何返回一个正确的关键词...
python 单词纠错_Python 简单单词纠错识别
weixin_39933484的博客
12-13 733
Python找到错误单词的最可能的正确形式首先使用dp,计算两个字符串的最长字串长度然后将错误 单词和词库中的单词注意对比,找到相似度最为符合的单词,输出前6个单词供用户选择相似度的计算目前没有找到更加合理的方法,只能用最长字串长度除以两个单词的最长的长度,感觉有点不太合理。。。基本符合要求 # 最长单词长度max_len = 33dp = [[0 for i in range(max_len)...
python脚本实现英文单词纠错
不凡不弃的博客
05-18 4795
GitHub地址:https://github.com/fanorfan/EnglishWordErrorCorrection 目录单词纠错算法python实现1. 英文单词纠错(CorrectWords.py)2. word文档纠错(CorrectDocx.py)编辑距离动态规划算法python实现(DynamicProgramming.py) 单词纠错算法 准备一个语料库,里面包含的内容如下: Gutenberg语料库数据 维基词典 英国国家语料库中的最常用单词列表 下载地址:https://g
基于python英文电子词典
03-05
基于python的电子词典,分为客户端和服务端,采用mongodb存储英文单词和解释,支持用户在线查询单词
Python-一份英文中文字典的双解词典数据库
08-10
这是一份英文->中文字典的双解词典数据库,根据各类考试大纲和语料库词频收录数十万条各类单词英文和中文释义,并按照各类考试大纲和词频进行标注。
Python打造的英汉词典
03-10
Python写的英汉词典,可以查大于7000个英语单词,界面简单好用。
python英汉词典,在线翻译器,带GUI界面
02-06
python英汉词典,在线翻译器,带GUI界面,支持自定义单词搜索
python单词拼写检查库pyenchant
11-19
python单词拼写检查库pyenchant,支持python3,版本3.1.1,wheel安装包
spell-errors.txt
06-07
拼写纠错配套资源:该文件记录了很多用户写错的单词和对应正确单词,可以通过该文件确定每个正确单词所对应的错误拼写方式,并计算出每个错误拼写方式出现的概率
python与自然语言处理3朴素贝叶斯
qq_37634812的博客
08-18 380
1. 引言 上一篇文章我们主要从理论上梳理了朴素贝叶斯方法进行文本分类的基本思路。这篇文章我们主要从实践上探讨一些应用过程中的tricks,并进一步分析贝叶斯方法,最后以情绪褒贬分析和拼写纠错为例展示这种简单强大的方法在自然语言处理问题上的具体应用。 2. 为什么不直接匹配关键词来识别垃圾邮件? 看了上一篇文章的一些同学可能会问:“何必费这么大劲算那么多词的概率?直接看邮件中有没...
编程语言分类与python简介
人丑就要多读书的博客
11-11 933
编程语言分类: 一、机器语言 机器语言是站在计算机(奴隶)的角度,说计算机能听懂/理解的语言,而计算机能直接理解的就是二进制指令,所以机器语言就是直接用二进制编程,这意味着机器语言是直接操作硬件的,因此机器语言属于低级语言,此处的低级指的是底层、贴近计算机硬件(贴近代指需要详细了解计算机硬件细节、直接控制硬件),详解如下: 用二进制代码0和1描述的指令称为机器指令,由于计算机内部是基于二进制指令工作的,所以机器语言是直接控制计算机硬件。 用机器语言编写程序,编程人员要首先熟记所用计算机的部指令代码以及代码
Python进阶】7-数据分析概述及常用工具介绍
我们会很适合 慢慢来 总会遇见你的
03-25 2915
当今世界对信息技术的依赖程度在不断加深,每天都会有大量的数据产生,我们经常会感到数据越来越多,但是要从中发现有价值的信息却越来越难。 这里所说的信息,可以理解为对数据集处理之后的结果,是从数据集中提炼出的可用于其他场合的结论性的东西,而**从原始数据中抽取出有价值的信息**的这个过程我们就称之为**数据分析**,它是数据科学工作的一部分。 数据分析师的职责和技能栈 我们通常将从事数据分析、数据科学和数据相关产品的岗位都统称为数据分析岗位,但是根据工作性质的不同,又可以分为 数据分析方向 数据挖掘方向 数据
如何用python实现英语作文的语法纠错
03-26
要用Python实现英语作文的语法纠错,需要用到自然语言处理(NLP)技术和机器学习算法。以下是一个基本的实现步骤: 1. 收集并准备语料库:收集大量标记好的语料库,用于训练机器学习模型。 2. 分词:将英语句子分解成单词,即进行分词操作。 3. 词性标注:对每个单词标注其对应的词性,如名词、动词、形容词等。 4. 实体识别:识别句子中的人名、地名、组织机构名等实体。 5. 依存句法分析:分析句子中单词之间的依存关系,如主谓宾关系、修饰关系等。 6. 错误检测与纠正:使用机器学习算法,通过对语料库的学习,分析出句子中存在的错误,并给出纠正建议。例如,在句子中发现了主谓不一致的错误,建议修改动词或主语。 7. 输出错误纠正后的句子:将纠正后的句子输出给用户。 以上是一个常规的实现流程,具体实现还需要根据具体情况调整。通常会使用现有的NLP库,如nltk、spaCy等来进行实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 用 Python 对数据进行相关性分析 91741
  • 用 Python 进行多元线性回归分析(附代码) 87414
  • Python 调用 kafka 构建完整实例分析与应用 84995
  • Python 中删除文件的几种方法 57419
  • Java 10的10个新特性,将彻底改变你写代码的方式! 54732

最新评论

  • 用 python-docx 创建浮动图片

    不染pigpig: 真的牛,解决了

  • NLP 学习:从文本中提取时间

    兮知: ’现在是什么时候‘ 这个’现在‘ 识别不了时间{'error': 'no time pattern could be extracted.'}

  • 3000代码不如一梦,女神情定这位开发大神?

    2406_84629339: /#/home-comic/decial/150214?pc=BFSH4CBB&dc=h5share

  • ​用 Python 做一个超全的疫情大屏

    Tony小周: 你好大哥有没有源码

  • 用 python-docx 创建浮动图片

    weixin_41750450: 太厉害了,不过要是能在表格中随意插入图片,然后固定在该页面上就更好了,现在插入多个,最后都叠加在一起落在最后一页上了

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 朝夕光年困境:字节跳动游戏业务前途未卜
  • 收藏!35句提示词,数据科学的灵感源泉
  • Chatbot开发三剑客:LLAMA、LangChain和Python
2023年10篇
2022年36篇
2021年281篇
2020年276篇
2019年352篇
2018年291篇
2017年48篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源饭店起甚么名字吸引人rj.baidu.com劳动心得体会500字冯字起名四个字给小孩起名字大全魔兽争霸三冰封王座三画的起名吉利字混凝土公司起名农业科技有限公司起名参考西西大胆国模人体艺科技生物公司起名大全集巴黎恐怖袭击非主流女生意境头像赵本山个人资料男神和他的猫乡村爱情14全集免费观看起名用的字典下载粮油公司名字起名大全dxlive今天女孩起名字2021牛年刘姓男宝宝起名免费 起名叶不凡都市古仙医温度检测软件无暇赴死彩蛋海字起什么名字好听nba2konline名字农村家庭装修效果图公司起名大气点的中字开头店铺起名大全网免费淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化