用贝叶斯实现拼写检查器

贝叶斯公式

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(A1)*p(D|A1),p(A2)*p(D2|A)。其中p(D|A),例如在写A=good,错写为D=gooe是的概率。是根据增删减距离获得。

若 p(A1)*p(D|A1)=p(A2)*p(D2|A),则根据实际生活中先验概率的选择p(A1),p(A2)大小选择。

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
NWORDS=train(words(open(‘big.txt‘).read()))
alphabelt=‘abcdefghijklmnopqrstuvwxyz‘
def edits1(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 alphabelt]+ #alteration
           [word[0:i]+c+word[i:] for i in range(n+1)for c in alphabelt]) #insertion
def known_edits2(word):
    return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)

def known(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])
    return max(candidates,key=lambda w:NWORDS[w])

print(correct(‘goode‘))

good

原文地址:https://www.cnblogs.com/6530265oule/p/9245439.html

时间: 2024-08-29 15:22:16

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

贝叶斯实现拼写检查器

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 = trai

贝叶斯拼写检查器

本拼写检查器是基于朴素贝叶斯的基础来写的,贝叶斯公式以及原理就不在详述.直接上代码 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)