机器学习——贝叶斯算法
Posted ke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习——贝叶斯算法相关的知识,希望对你有一定的参考价值。
一、什么是贝叶斯算法
二、实战代码单词拼写检查器
re 库是关于正则表达式的一个库。这里面包含了多种字符串匹配的方法。
re.findall(pattern, string[,flags] ) 查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表。
import re
#读取内容
text = open("../big.txt").read()
#首先把文章中所有的单词取出来,转化成小写,并去除单词中的特殊符号。
text = re.findall("[a-z]+",text.lower())
# 统计每个单词出现的次数
dic_words =
for t in text:
dic_words[t] = dic_words.get(t, 0) + 1
#返回所有与单词 word 编辑距离为 1 的集合
alphabet = 'abcdefghijklmnopqrstuvwxyz'
def edits1(word):
n = len(word)
return set([word[0:i]+word[i+1:] for i in range(n)] + # 少一个字母的情况
[word[0:i]+word[i+1]+word[i]+word[i+2:] for i in range(n-1)] + # 字母调换的情况
[word[0:i]+c+word[i+1:] for i in range(n) for c in alphabet] + # 修改字母情况
[word[0:i]+c+word[i:] for i in range(n+1) for c in alphabet]) # 插入字母的情况
#为了提高正确率,在这里虑编辑距离为 2 的单词
def edits2(word):
return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in dic_words)
#最后选择输出单词的方法为:编辑距离为1的正确单词比编辑距离为2的优先级高, 而编辑距离为0的正确单词优先级比编辑距离为1的高,优先级高的先输出。
def know(word):
return set(w for w in word if w in dic_words)
# 先计算编辑距离,再根据编辑距离找到最匹配的单词
def correct(word):
# 获取候选单词
# 如果know(set)非空, candidates 就会选取这个集合, 而不继续计算后面的
candidates = know([word]) or know(edits1(word)) or know(edits2(word)) or [word]
# 字典中不存在相近的词
if word == candidates:
return word
# 返回频率最高的词
max_num = 0
for c in candidates:
if dic_words[c] >= max_num:
max_num = dic_words[c]
candidate = c
return candidate
result = input(f"输入错误单词")
print("拼写检查器纠错后单词为:",correct(result))
# 输入错误单词tha
# 拼写检查器纠错后单词为: the
以上是关于机器学习——贝叶斯算法的主要内容,如果未能解决你的问题,请参考以下文章