贝叶斯实现拼写检查器

import re,collections
# 把语料中的单词全部抽取出来,转成小写,并且取出单词中间的特殊符号
def words(text):
  return re.findall(‘[a-z]+‘,text.lower())

def train(features):
  model = collections.defaultdict(lambda:1) # 词频的默认出现数为1
  for f in features:
    model[f] += 1
  return model

NWORDS = train(words(open(big.txt‘).read()))

apphabet = ‘abcdefghijklmnopqrstuvwxyz‘
# 返回所有与单词w编辑距离为1的集合
def editsl(word):
  n = len(word)
  return set([word[0:i]+word[i+1:] for i in range(n)] +                          # deletion             [word[0:i]+word[i+1]+word[i]+word[i+2:] for i in range(n-1)] +      # transposition             [word[0:i]+c+word[i+1:] for i in range(n) for c in apphabet] +      # alteration             [word[0:i]+c+word[i:] for i in range(n+1) for c in apphabet])       # insertion
# 返回所有与单词w编辑距离为2的集合# 在这些编辑距离小于2的词中间,只把那些正确的词作为候选词def edits2(word):  return set(e2 for e1 in editsl(word) for e2 in edits1(el) if e2 in NWORDS)

def known_edits2(words):return set(w for w in words if w in NWORDS)

def correct(word):  candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word] # 编辑距离为0的优先,>1,>2  return max(candidates,key=lambda w:NWORDS[w])
时间: 2024-10-04 08:27:36

贝叶斯实现拼写检查器的相关文章

用贝叶斯实现拼写检查器

贝叶斯公式 p(A|D)=p(A)*p(D|A)/p(D); 可以应用于垃圾邮件的过滤和拼写检查 例如:对于拼写检查,写出一个单词D,判断该单词为正确单词A的概率.为上述条件概率的描述. 其中p(A)为先验概率,可以根据现有的数据库中的单词,来获得A单词的概率p(A).由于正确的单词不仅仅有A,还有可能有A1,A2.... 最终比较p(A1|D),p(A2|D),p(A3|D)...由于分母比较时相同,可以只比较分子p(A)*p(D|A) p(A|D)正比于p(A)*p(D|A) 分别计算p(A

贝叶斯拼写检查器

本拼写检查器是基于朴素贝叶斯的基础来写的,贝叶斯公式以及原理就不在详述.直接上代码 import re, collections def words(text): return re.findall('[a-z]+', text.lower()) def train(features): model = collections.defaultdict(lambda : 1) for f in features: model[f] += 1 return model alphabet = 'abc

一个简单的拼写检查器

记得以前就看过这篇文章:How to write a spelling corrector,文章将贝叶斯原理运用于拼写检查,二十几行简单的Python的代码就实现了一个拼写检查器. 感叹数学的美妙之外,也很喜欢类似这样的文章,将一个问题的原理讲清楚,再配上一些代码实例做说明,从小见大,从浅入深,对人很有启发. 这里简单的介绍下基于贝叶斯原理的拼写检查原理,再给出一个java版和C#版的实现. 拼写检查器的原理:给定一个单词,选择和它最相似的拼写正确的单词,需要使用概率论,而不是基于规则的判断.给

How to Write a Spelling Corrector用java 写拼写检查器 Java实现 以备查验

import java.io.*;import java.util.*;import java.util.regex.*; class Spelling { private final HashMap<String, Integer> nWords = new HashMap<String, Integer>(); public Spelling(String file) throws IOException { BufferedReader in = new BufferedRe

Leetcode-966 Vowel Spellchecker(元音拼写检查器)

1 #define _for(i,a,b) for(int i = (a);i < (b);i ++) 2 class Solution 3 { 4 public: 5 vector<string> spellchecker(vector<string>& wordlist, vector<string>& queries) 6 { 7 vector<string> rnt; 8 set<string> ws; 9 map&

MindManager中的拼写检查功能如何用

MindManager2016思维导图中的拼写检查功能如同大部分标准拼写检查器,运行拼写检查(相关文章请参考详解MindManager 15中文版思维导图设置选项之拼写检查),检查导图上的所有主题文本和备注文本,还可以使用自动拼写功能,在输入文本和使用自动更正功能,用修正版本自动替换明显拼错的单词时检查拼写,本文主要为大家讲解如何在MindManager2016中拼写检查导图. 启动拼写检查 在审阅选项卡上,验证组里,点击拼写检查或者按F7. 拼写检查可以检查导图里的所有主题(常规主题.标注和浮

机器学习Matlab打击垃圾邮件的分类————朴素贝叶斯模型

该系列来自于我<人工智能>课程回顾总结,以及实验的一部分进行了总结学习机 垃圾分类是有监督的学习分类最经典的案例,本文首先回顾了概率论的基本知识.则以及朴素贝叶斯模型的思想.最后给出了垃圾邮件分类在Matlab中用朴素贝叶斯模型的实现 1.概率 1.1 条件概率 定义:事件B发生的情况下,事件A发生的概率记作条件概率P(A|B) P(A|B)=P(A∧B)P(B) 条件概率也叫后验概率.无条件概率也叫先验概率(在没有不论什么其他信息存在的情况下关于命题的信度) 能够得到乘法规则: P(A∧B)

solr入门之solr的拼写检查功能的应用级别尝试

今天主要是收集了些拼写检查方面的资料和 尝试使用一下拼写检查的功能--=遇到了不少问题 拼写检查的四种配置目前我只算是成功了半个吧 --------------------------------- 拼写检查功能,能在搜索时,提供一个较好用户体验,所以,主流的搜索引擎都有这个功能.在这之前,笔者先简单的说一下什么是拼写检查,其实很好理解,就是你输入的搜索词,可能是你输错了,也有可能在它的检索库里面根本不存在这个词,但是这时候它能给你返回,相似或相近的结果来帮助你校正. 举个例子,假如你在百度里面

机器学习Matlab实战之垃圾邮件分类————朴素贝叶斯模型

本系列来自于我<人工智能>课程复习总结以及机器学习部分的实验总结 垃圾邮件分类是监督学习分类中一个最经典的案例,本文先复习了基础的概率论知识.贝叶斯法则以及朴素贝叶斯模型的思想,最后给出了垃圾邮件分类在Matlab中用朴素贝叶斯模型的实现 1.概率 1.1 条件概率 定义:事件B发生的情况下,事件A发生的概率记作条件概率P(A|B) P(A|B)=P(A∧B)P(B) 条件概率也叫后验概率,无条件概率也叫先验概率(在没有任何其它信息存在的情况下关于命题的信度) 可以得到乘法规则: P(A∧B)