首页 > 编程语言 >nlp入门(三)基于贝叶斯算法的拼写错误检测器

nlp入门(三)基于贝叶斯算法的拼写错误检测器

时间:2023-08-09 09:33:36浏览次数:44  
标签:nlp word 语料库 贝叶斯 单词 拼写错误 return correct def

源码请到:自然语言处理练习: 学习自然语言处理时候写的一些代码 (gitee.com)

数据来源:norvig.com/big.txt

贝叶斯原理可看这里:机器学习算法学习笔记 - 过客匆匆,沉沉浮浮 - 博客园 (cnblogs.com)

一、数据预处理

将输入的数据全部变为小写方便后续处理

def words(text):
    return re.findall('[a-z]+', text.lower())

二、根据语料库统计不同单词出现的词频

单词字典每个单词词频默认为1,因为如果单词字典默认值为为0,那么出现了语料库中没有的单词,就会默认概率为0,导致新的单词无法被识别

def train(features):
    model = collections.defaultdict(lambda: 1)  # 如果默认为0则出现语料库中没有的新词会不识别,所以默认为1
    for f in features:
        model[f] += 1
    return model

三、打开语料库与构建字母表

NWORDS = train(words(open('data/big.txt').read()))
alphabet = 'abcdefghijklmnopqrstuvwxyz'

四、返回编辑距离为1的单词

单词a经过n次修改可以得到新的单词b,那我们叫b为a的编辑距离为1的单词,下面函数就返回编辑距离为1的单词

# 返回编辑距离为1的单词
def editsl(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的单词

# 考虑编辑距离为2的单词
def known_edits2(word):
    return set(e2 for e1 in editsl(word) for e2 in editsl(e1) if e2 in NWORDS)

六、判断单词是否在语料库中

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

七、纠正拼写错误的单词

优先考虑原单词a是否在语料库中,如果存在就返回原单词,不存在就考虑编辑距离为1的单词,返回使用频率最高的那个如果编辑距离为1的单词也不在语料库中,那么就考虑编辑距离为2的单词,同样,如果编辑距离为2的单词都不在语料库中,那么这可能是一个新的单词,直接返回单词本身

def correct(word):
    candidates = known([word]) or known(editsl(word)) or known_edits2(word) or [word]
    return max(candidates, key=lambda w: NWORDS[w])

八、测试结果

print(correct('appl'))
print(correct('appla'))
print(correct('learw'))
print(correct('tess'))
print(correct('morw'))

 

标签:nlp,word,语料库,贝叶斯,单词,拼写错误,return,correct,def
From: https://www.cnblogs.com/zhangshihang/p/17615999.html

相关文章

  • nlp入门(二) :商品信息可视化与文本分析实战
    源码请到:自然语言处理练习:学习自然语言处理时候写的一些代码(gitee.com)数据来源:麦卡里价格建议挑战MercariPriceSuggestionChallenge|Kaggle如果不会使用魔法可以使用百度云链接:https://pan.baidu.com/s/1EM2MwjX4bLlypLSIJYZqeg?pwd=xqs0提取码:xqs0一、加载数据集......
  • TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、
    TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用TextBrewer是一个基于PyTorch的、为实现NLP中的知识蒸馏任务而设计的工具包,融合并改进了NLP和CV中的多种知识蒸馏技术,提供便捷快速的知识蒸馏框架,用于以较低的......
  • DataWhale NLP第二期 第一次打卡
    理解赛题,跑通竞赛实践全流程跑通实践基线Baseline,获得自己的成绩提交任务一打卡,查看个人成绩排行榜赛题理解赛题链接本赛题要求构建一个文本分类器,来区分真实对话和由AI产生的对话,训练的数据包括一系列真实对话和ChatGPT生成的对话样本,参赛选手需要设计并训练一个模型,使其......
  • R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型|附代码数据
    原文链接:http://tecdat.cn/?p=9390原文出处:拓端数据部落公众号 最近我们被客户要求撰写关于贝叶斯向量自回归(BVAR)的研究报告,包括一些图形和统计输出。介绍向量自回归(VAR)模型的一般缺点是,估计系数的数量与滞后的数量成比例地增加。因此,随着滞后次数的增加,每个参数可用的信息......
  • 从机器学习、NLP到GNN,与李开复、陆奇、清华刘知远等共话AI,现开放报名!
     Datawhale会议 人工智能重磅会议:北京智源大会自2009年深度学习崛起以来,第三波人工智能浪潮席卷全球,深度学习、符号主义、联邦学习等等概念推动了新一波技术革命。2020年,是一个十年的结束,也是下一个十年的开始。第二届北京智源大会将于6月21-24日线上开幕。GeoffreyHinto......
  • 周志华《机器学习》课后习题(第七章):贝叶斯分类
    作者| 我是韩小琦7.1试使用极大似然法估算回瓜数据集3.0中前3个属性的类条件概率.答:以第一个属性色泽为例,其值计数如下:色泽乌黑浅白青绿好瓜否243是413令  表示好瓜中色泽为“乌黑”的概率,  为好瓜中“浅白”的概率,  ,  ,  表示好瓜的样本,其他类同,于是色泽......
  • 自然语言处理(Natural Language Processing,NLP)
    自然语言处理(NaturalLanguageProcessing,NLP)是人工智能领域的一个重要分支,旨在使计算机能够理解、处理和生成人类自然语言。NLP的目标是让计算机能够像人类一样有效地理解和交流,从而实现更自然、更智能的人机交互。NLP的理解概括:文本理解和分析:NLP技术能够从文本中提取有价值......
  • 使用python进行贝叶斯统计分析|附代码数据
    原文链接:http://tecdat.cn/?p=7637最近我们被客户要求撰写关于贝叶斯统计的研究报告,包括一些图形和统计输出。本文讲解了使用PyMC3进行基本的贝叶斯统计分析过程. ( 点击文末“阅读原文”获取完整代码数据******** )。  #Importsimportpymc3aspm#python的概率......
  • 贝叶斯网络python实战(以泰坦尼克号数据集为例,pgmpy库)
    贝叶斯网络python实战(以泰坦尼克号数据集为例,pgmpy库)leida_wt 2019-03-2423:05:36  16815  收藏 140分类专栏: 机器学习 文章标签: pgmpy 贝叶斯网络 泰坦尼克 机器学习 图网络版权 文章目录贝叶斯网络简介贝叶斯推断思路贝叶斯网络贝叶斯网络的实现应用步骤泰坦尼克......
  • 自然语言处理 Paddle NLP - 词法分析技术及其应用
    词法分析就是利用计算机对自然语言的形态(morphology)进行分析,判断词的结构和类别等。”简单而言,就是分词并对每个词进行分类,包括:分词、词性标注、实体识别三个任务问答知识图谱,类似一张表,里面放了姚明(人)、妻子(属性)对应的是谁这张表来源于网页挖掘,也是词法分析,进行对应识别对话......