前言

cutoff是一个比较冷门的概念,相比于DP经典算法的编辑距离,cutoff距离只局限于自然语言处理领域。提出cutoff距离的起因很简单,因为经典的编辑距离无法很好地衡量在字符串搜索过程中的编辑距离。
比如我们要对一个错误的字符串进行纠正,我们会用编辑距离去衡量可能正确字符串和错误字符串之间的差异。但是编辑距离有一个很大的问题就是对于自动机匹配过程存在缺陷,在自动机匹配的过程中编辑距离会变得很大。(很明显对于词库比较大的情况,必须要使用自动机)比如hello很有可能是hellx的正确单词,但是h和hellx的编辑距离是4,很明显就会存在自动机匹配难以进行的问题。

什么是cutoff?

针对上面提出的问题,kemal oflazer提出了cutoff算法。对于问题串stra和预测串strb,我们首先需要设置一个阈值,这个阈值作为编辑距离的限制条件。(也就是说符合编辑距离多少的为可能正确的单词)
定义strb的长度为blen,stra的长度为alen。l = max(1, blen - t),作为cutoff距离计算的下边界,u = min(alen, blen + t),作为cutoff距离计算的上边界。我们在计算cutoff距离的时候,就只需要计算min(ed(substr(stra,0,x),strb))(x>=l&&x<=u)即可。(此处substr表示截取0到x的字符为子串,包含x。ed表示编辑距离。min表示取最小值。)
例如reprter和repo的cutoff距离,计算过程如下:

如何实现?

这里给出cutoff算法的Python实现。

def ed_dis(stra, strb):alen = len(stra)blen = len(strb)dp = [[0 for x in range(50)] for y in range(50)]dp[0][0] = 0for i in range(alen):dp[i + 1][0] = i + 1for j in range(alen):dp[0][j + 1] = j + 1for i in range(alen):for j in range(blen):if stra[i] == strb[j]:dp[i + 1][j + 1] = min(min(dp[i + 1][j] + 1, dp[i][j + 1] + 1), dp[i][j])else:dp[i + 1][j + 1] = min(min(dp[i + 1][j] + 1, dp[i][j + 1] + 1), dp[i][j] + 1)return dp[alen][blen]def cutoff_dis(stra, strb):""":param stra: 错误串:param strb: 预测串:return: CUTOFF距离"""t = 1  # thresholdalen = len(stra)blen = len(strb)l = max(1, blen - t)u = min(alen, blen + t)min_ed = 1e10for i in range(l, u + 1):suba = stra[0:i + 1]min_ed = min(min_ed, ed_dis(suba, strb))return min_edprint(cutoff_dis('reprter', 'repo'))

cutoff距离如何使用?

计算出cutoff距离以后,究竟如何在自动机上使用cutoff距离?

具体的流程可以参考作者官方论文中给出的流程图。这个流程图是针对ababa这个问题串,对于aba和bab串形成的闭包进行单词推测。自动机的具体流程就不再详细描述了,一个很基础的自动机匹配流程,每次计算cutoff值作为权值即可。在大于阈值的权值结点处停止。
匹配的过程中对于一些特殊节点需要特殊标记,这种节点要求权值==阈值,且所有子节点无法继续扩展,也就是所有子节点权值大于阈值。可以看到图中有三个权值为1的结点符合这种要求。
对于这三个节点所对应的字符串,我们需要再次进行编辑距离计算,如果编辑距离恰好符合阈值,则该字符串是符合条件的字符串,也就是可能正确的字符串。

参考论文

Oflazer K. Error-tolerant finite-state recognition with applications to morphological analysis and spelling correction[J]. Computational Linguistics, 1996, 22(1): 73-89.

转载于:https://www.cnblogs.com/zhenlingcn/p/8386214.html

单词拼写检查之cutoff距离相关推荐

  1. 列表根据下标取值_散列表(上):Word文档中的单词拼写检查功能是如何实现的?...

    Word这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在Word里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误".Word的这个单词拼写 ...

  2. WPF 4 单词拼写检查(SpellCheck)

    WPF 4 单词拼写检查(SpellCheck) 原文:WPF 4 单词拼写检查(SpellCheck) 在WPF中 Textbox 和RichTextBox 控件都内置了拼写检查属性,但该属性目前默 ...

  3. 18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?

    问题引入 在 Word 里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误",Word 文本编辑器的拼写检查功能是如何实现的呢?散列表(Hash Table) 散列表 散列 ...

  4. 【散列表(哈希表) Hash Table(上)】:Word文档中的单词拼写检查功能是如何实现的?

    Word 这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在 Word 里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误".Word 的这个 ...

  5. 散列表(上):Word文档中的单词拼写检查功能是如何实现的?

    [思考题]:在Word里面输入一个错误的英文单词,它会用标红的方式提示"拼写错误".Word的这个单词拼写检查功能,虽然很小但是却非常实用.你有没有想过,这个功能是如何实现的? 1 ...

  6. 朴素贝叶斯实战应用---单词拼写检查器(结合html直观展示)

    博文写于2020-05-10,于2020-07-07再次编辑 1.一个小小的引子: 写这篇博文的时候,日子有点特殊,啥日子大家应该都知道.用一篇某高二学生母亲节的英语作文,先祝天下所有母亲身体健康,母 ...

  7. idea中取消单词拼写检查波浪线

    取消单词拼写检查的4种方法,任选一种即可 1.快捷添加单词到词典 2.词典管理 3.修改主题的设置 4.修改全局设置 1.快捷添加单词到词典 alt + enter,选择 Save '' to dic ...

  8. 散列表(上):Word 文档中单词拼写检查功能是如何实现的?

    本文是学习算法的笔记,<数据结构与算法之美>,极客时间的课程 在平时我们使用Word的时候,输入一个错误的单词,它就会用标红的方式提示"拼写错误".Word的这个单词拼 ...

  9. 18散列表(上):Word文档中的单词拼写检查功能是如何实现的

    文章目录 1.散列思想 2. 散列函数 3. 散列冲突 4. 解答开篇 问题:Word的这个单词拼写检查功能是如何实现的? 1.散列思想 散列表:Hash table. **散列表利用数组支持按照下标 ...

  10. 一道腾讯面试题:英语单词拼写检查

    方法一:p神根据编辑距离(1和2)的算法 import re, collectionsdef words(text): return re.findall('[a-z]+', text.lower() ...

最新文章

  1. 城市生态的机器人革命
  2. c++11 线程:让你的多线程任务更轻松
  3. 基于JavaWeb实现网上花店商城系统
  4. Bootstrap系列 -- 34. 按钮下拉菜单
  5. JZOJ 1277. 最高的奶牛
  6. 调用GOOGLE语音
  7. 485. Max Consecutive Ones
  8. 来鹅厂干大事!腾讯广告技术类岗位高能来袭~
  9. java - 常见对象object
  10. 【Shell 脚本】Mysql 定时备份
  11. python常用模块初始
  12. 【学习笔记】浅识差分隐私
  13. modbus调试工具
  14. ubuntu20.04安装qq音乐并解决闪退问题
  15. django+vue实现机器学习代码生成系统(数据清洗、数据探索、机器学习模型构建、模型评估)
  16. 宇视NVR设备接入EasyCVR平台,离线后无法上线该如何解决?
  17. php 的绝对引用,excel单元格引用分为哪三种
  18. 愚人节的背后:技术在一面打假,一面造假
  19. TweenMax.to()的使用
  20. 韩服游戏IP用哪里的比较稳定怎么选择服务器

热门文章

  1. cocos creator3.x 触控方向键实现
  2. 《龙腾世纪2》图文流程攻略
  3. CASE WHEN THEN 判断
  4. [渝粤教育] 广东-国家-开放大学 21秋期末考试土木工程施工10516k1
  5. 电脑只能上QQ不能开网页
  6. 记一次走心One 2 One沟通
  7. mongodb mysql数据类型_插入mongodb类型
  8. Cesium 源码解析 Model(二)
  9. 老中医治蛋变成绿色了
  10. Redis 缓存穿透、缓存雪崩、热点Key问题分析和解决方案