贝叶斯拼写检查器

本拼写检查器是基于朴素贝叶斯的基础来写的,贝叶斯公式以及原理就不在详述。直接上代码

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 = ‘abcdefghijklmnopqrstuvwxyz‘
NWORDS = train(words(open(‘D:/big.txt‘).read()))

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 alphabet] +  # alteration
        [word[0:i] + c + word[i:] for i in range(n + 1) for c in alphabet]
    )

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):
    cindidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]
    return max(cindidates, key=lambda w: NWORDS[w])

print(correct(‘tess‘))

以我现在的水平,现在看贝叶斯的原理还是懂的,但是编辑距离还不是很懂,以后慢慢变懂

原文地址:https://www.cnblogs.com/xushu/p/8580664.html

时间: 2024-11-08 23:11:07

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

机器学习-贝叶斯拼写纠正器实战

#python版本3.7 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(ope

一个简单的拼写检查器

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

用贝叶斯实现拼写检查器

贝叶斯公式 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) # 词频的默认出现数为1 for f in features: model[f] += 1 return model NWORDS = trai

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&

贝叶斯方法

学习资料:http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/ 概率论只不过是把常识用数学公式表达了出来. ——拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时:有一次,在书店看到一本书,名叫贝叶斯方法.当时数学系的课程还没有学到概率统计.我心想,一个方法能够专门写出一本书来,肯定很牛逼.后来,我发现当初的那个朴素归纳推理成立了——这果然是个牛逼的方法. ——题记 目录 0. 前言 1. 历史  

数学之美番外篇:平凡而又神奇的贝叶斯方法

转载自:http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/ 概率论只不过是把常识用数学公式表达了出来. ——拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时:有一次,在书店看到一本书,名叫贝叶斯方法.当时数学系的课程还没有学到概率统计.我心想,一个方法能够专门写出一本书来,肯定很牛逼.后来,我发现当初的那个朴素归纳推理成立了——这果然是个牛逼的方法. ——题记 目录 0. 前言 1. 历史   

【转载】数学之美番外篇:平凡而又神奇的贝叶斯方法

数学之美番外篇:平凡而又神奇的贝叶斯方法 BY 刘未鹏 – SEPTEMBER 21, 2008POSTED IN: 数学, 机器学习与人工智能, 计算机科学 概率论只不过是把常识用数学公式表达了出来. ——拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时:有一次,在书店看到一本书,名叫贝叶斯方法.当时数学系的课程还没有学到概率统计.我心想,一个方法能够专门写出一本书来,肯定很牛逼.后来,我发现当初的那个朴素归纳推理成立了——这果然是个牛逼的方法. ——题记 目