python实现贝叶斯拼写检查

贝叶斯:英国数学家

贝叶斯方法解决“逆概”问题。

贝叶斯公式:

 

拼写纠正实例:假如用户输入的是错误的D,那用户真正想要输入的是哪个单词呢?可能的是h1,也可能是h2,...,hn

那每种情况出现的概率是P(h1|D),P(h2|D),...,P(hn|D)统一为P(h|D)。

P(h|D)=P(h)*P(D/h)/P(D)

模型比较理论:

最大似然:最符合观测数据(P(D|h))的最有优势

奥卡姆剃刀:P(h)较大的模型有较大的优势

最大似然:当我们投一枚硬币,当时正面的时候,正面的概率是1,那就说下次出现正面的概率是100%

奥卡姆剃刀:有n个点拟合数据,一阶多项式穿过一些点,二阶穿过更多的点,三阶,n阶,那么哪个模型最靠谱呢?越是高阶的模型越是不常见。

贝叶斯拼写检查器:

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

 

调用correct()结果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贝叶斯算法是一种基于概率论的分类算法,可以用于文本分类、垃圾邮件过滤等领域。在Python中,可以使用第三方库scikit-learn来实现贝叶斯算法。 下面是一个简单的例子,演示了如何使用朴素贝叶斯算法进行文本分类: ```python from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import MultinomialNB # 准备训练数据和测试数据 train_data = [ ('Chinese Beijing Chinese', 'yes'), ('Chinese Chinese Shanghai', 'yes'), ('Chinese Macao', 'yes'), ('Tokyo Japan Chinese', 'no') ] test_data = [ 'Chinese Chinese Chinese Tokyo Japan' ] # 将训练数据和测试数据转换为特征向量 vectorizer = CountVectorizer() train_features = vectorizer.fit_transform([data[0] for data in train_data]) test_features = vectorizer.transform(test_data) # 训练朴素贝叶斯分类器 classifier = MultinomialNB() classifier.fit(train_features, [data[1] for data in train_data]) # 预测测试数据的类别 predicted = classifier.predict(test_features) # 输出预测结果 print(predicted) ``` 运行上面的代码,会输出`['yes']`,表示测试数据属于“是”的类别。 在上面的例子中,我们使用了`CountVectorizer`来将文本转换为特征向量,然后使用`MultinomialNB`来训练朴素贝叶斯分类器。最后,我们使用训练好的分类器来预测测试数据的类别。 需要注意的是,上面的例子只是一个简单的演示,实际应用中需要更加复杂的数据处理和特征提取方法,以及更加精细的模型调参等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值