文本预处理:拼写纠错

拼写纠错

拼写纠错步骤主要检查并改正两类文本错误,即单词的拼写错误(书写错误)和单词的语法使用错误。拼写错误纠正,首先检测词库外的单词识别为拼写错误单词,然后找出词库中与错误单词编辑距离最小的词作为改正项,替换它。而语法使用错误纠正,需借助语言模型实现。

1.1 单词拼写错误纠正实现

1.1.1 单词拼写错误纠正的原理性方法

在这里插入图片描述
编辑距离计算法方法:

import sys
from collections import defaultdict

class StrEditDistance():
    """
    计算两英文字符串的编辑距离
    """
    # 初始化
    def __init__(self, edit_costs={'insert':1, 'delete':1, 'replace':1}):
        self.str1 = ''
        self.str2 = ''
        self.c_dic = defaultdict(int)   # 这是最稳定的DP结果记录数据结构
        self._edit_costs = edit_costs

    # 动态规划核心程序
    def editCostFun(self, i, j):
        # 判断是否已计算过
        if self.c_dic[str(i)+','+str(j)] == -1:
            # 基础条件
            if i*j==0 and i+j==0:
                self.c_dic[str(i)+','+str(j)] = 0
            elif i*j==0 and i+j>0:
                self.c_dic[str(i)+','+str(j)] = sys.maxsize
            # 循环条件
            else:
                if self.str1[:i]==self.str2[:j]:
                    self.c_dic[str(i)+','+str(j)] = 0
                else:
                    self.c_dic[str(i)+','+str(j)] = min([
                        self._edit_costs['insert'] + self.editCostFun(i, j-1),
                        self._edit_costs['insert'] + self.editCostFun(i-1, j),
                        self._edit_costs['insert'] + self.editCostFun(i-1, j-1)
                    ])
        return self.c_dic[str(i)+','+str(j)]

    # 动规结果应用外壳
    def transform(self, str1, str2):
        # 初始化
        self.str1 = str1
        self.str2 = str2
        m = len(self.str1)
        n = len(self.str2)
        for i in range(m+1):
            for j in range(n+1):
                self.c_dic[str(i)+','+str(j)] = -1  # 数值极小时容易出现内存溢出,导致数值出现错误
        #
        return self.editCostFun(m, n)

#
sed  = StrEditDistance()
sed.transform('app', 'apple')

1.1.2 单词拼写错误纠正的工程实现方法

在这里插入图片描述
与给定字符串指定编辑距离的新字符串生成代码:

# 与给定字符串指定编辑距离的新字符串生成方法
def gen_editOne_str(str_: str):
	"""
	生成所有与给定字符串,编辑距离为1的字符串
	"""
	letters = 'abcdefghijklmnopqrstuvwxyz'
	splits = [(str_[:i], str_[i:]) for i in range(len(str_)+1)]
	inserts = [L+c+R for L,R in splits for c in letters]
	deletes = [L+R[1:] for L,R in splits]
	replaces = [L+c+R[1:] for L,R in splits for c in letters]
	return set(inserts + deletes + replaces)


def gen_editTwo_str(str_: str):
	"""
	生成所有与给定字符串,编辑距离为2的字符串
	"""
	return {edTwo_str for edOne_str in gen_editOne_str(str_) for edTwo_str in gen_editOne_str(edOne_str)}
		
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
显象: 文本预处理是自然语言处理中的重要步骤,它可以帮助我们将自然语言文本转化为计算机可以理解和处理的形式。在文本预处理过程中,我们常常会进行分词、词性标注、停用词去除、词干化与词形还原等操作。 真象: 在文本预处理中,我们需要处理的是自然语言文本。自然语言文本可以包含不同的场景和需求,比如新闻文章、社交媒体评论、电子邮件等。这些文本可能涉及到不同的实体、概念和术语。 特征: 分词是将连续的文本划分成一个个独立的词语或标记的过程。词性标注是为每个词语标注其在句子中的词性,比如名词、动词、形容词等。停用词指那些在文本中频繁出现但通常不携带太多信息的词语,如“的”、“是”、“在”等。去除停用词可以减少噪音,提高后续处理的效果。词干化和词形还原是将单词还原为其原始形式或词干的过程,减少不同形式的单词对模型造成的干扰。 现象: 文本预处理的功能包括提取关键词、构建词袋模型、计算词频、构建词向量等。通过文本预处理,我们可以更好地理解文本内容,从而进行下一步的文本分析和处理。对于分词、词性标注、去除停用词等操作,其评价标准可以是准确性、速度和适用性等。 变化: 在实际应用中,我们可以根据具体需求和场景选择不同的文本预处理方法和工具进行组合。例如,可以使用分词工具库如jieba、NLTK等进行分词操作,使用词性标注工具库如NLTK、Stanford NLP等进行词性标注。停用词列表可以根据领域特定的需求进行定制,词干化和词形还原可以选择不同的方法和库进行实现。整个文本预处理过程可以形成一个流程,按照特定的顺序和规则进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值