赞
踩
单词纠错
在我们平时使用Word或者其他文字编辑软件的时候,常常会遇到单词纠错的功能。比如在Word中:
单词拼写错误
单词“Chinab”有红色的下划线,说明该单词拼写有误,在“拼写检查”中,给出了几个可能的单词来帮助用户纠正拼写。那么,我们是否能够自己来实现这个功能呢?
Why not?
关于单词纠错的思路,可以参考Peter Norvig的鼎鼎大名的网站:http://norvig.com/spell-correct.html 。主要涉及到的相关概念为字符串的编辑距离,读者可以参考文章:用动态规划算法计算字符串的编辑距离
私信博主001 领取完整项目代码!
单词纠错算法
首先,我们需要一个语料库,基本上所有的NLP任务都会有语料库。单词纠错的语料库为bit.txt,里面包含的内容如下:
下载的网址为:https://github.com/percent4/-word- 。
接着,我们取出里面的所有英语单词,并统计其出现次数。对于一个给定的英语单词(不管其是否拼写有误),依次找到和它编辑距离为0,1,2的单词,这些单词的优先顺序为编辑距离为0的单词(即该单词本身) > 编辑距离为1的单词 > 编辑距离为2的单词。最后按照这些单词是否在语料库中出现及单词的优先顺序及在语料库中的出现次数考虑,考虑的顺序为:是否在语料库中出现,单词的优先顺序,在语料库中的出现次数,最后选取在预料库中出现,优先顺序最高,在语料库中出现次数最多的单词作为该单词的纠正结果。当然,也有可能是它本身,即单词正确。
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。