当前位置: 首页 > 面试题库 >

拼写纠错是如何实现的?

祖浩淼
2023-03-14
本文向大家介绍拼写纠错是如何实现的?相关面试题,主要包含被问及拼写纠错是如何实现的?时的应答技巧和注意事项,需要的朋友参考一下

 

1、拼写纠错是基于编辑距离来实现;编辑距离是一种标准的方法,它用来表示经过插入、删除和替换操作从一个字符串转换到另外一个字符串的最小操作步数;

 

2、编辑距离的计算过程:比如要计算 batyu 和 beauty 的编辑距离,先创建一个7×8 的表(batyu 长度为 5,coffee 长度为 6,各加 2),接着,在如下位置填入黑色数字。其他格的计算过程是取以下三个值的最小值:

 

如果最上方的字符等于最左方的字符,则为左上方的数字。否则为左上方的数字+1。(对于 3,3 来说为 0)

左方数字+1(对于 3,3 格来说为 2)

上方数字+1(对于 3,3 格来说为 2)

 

最终取右下角的值即为编辑距离的值 3。

 

img

 

对于拼写纠错,我们考虑构造一个度量空间(Metric Space),该空间内任何关

系满足以下三条基本条件:

 

d(x,y) = 0 -- 假如 x 与 y 的距离为 0,则 x=y

d(x,y) = d(y,x) -- x 到 y 的距离等同于 y 到 x 的距离

d(x,y) + d(y,z) >= d(x,z) -- 三角不等式

 

1、根据三角不等式,则满足与 query 距离在 n 范围内的另一个字符转 B,其与 A

的距离最大为 d+n,最小为 d-n。

 

2、BK 树的构造就过程如下:每个节点有任意个子节点,每条边有个值表示编辑距离。所有子节点到父节点的边上标注 n 表示编辑距离恰好为 n。比如,我们有棵树父节点是”book”和两个子节点”cake”和”books”,”book”到”books”的边标号 1,”book”到”cake”的边上标号 4。从字典里构造好树后,无论何

时你想插入新单词时,计算该单词与根节点的编辑距离,并且查找数值为d(neweord, root)的边。递归得与各子节点进行比较,直到没有子节点,你就可以创建新的子节点并将新单词保存在那。比如,插入”boo”到刚才上述例子的树中,我们先检查根节点,查找 d(“book”, “boo”) = 1 的边,然后检查标号为1 的边的子节点,得到单词”books”。我们再计算距离 d(“books”, “boo”)=2,则将新单词插在”books”之后,边标号为 2。

 

3、查询相似词如下:计算单词与根节点的编辑距离 d,然后递归查找每个子节点标号为 d-n 到 d+n(包含)的边。假如被检查的节点与搜索单词的距离 d 小于 n,则返回该节点并继续查询。比如输入 cape 且最大容忍距离为 1,则先计算和根的编辑距离 d(“book”, “cape”)=4,然后接着找和根节点之间编辑距离为 3 到5 的,这

个就找到了 cake 这个节点,计算 d(“cake”, “cape”)=1,满足条件所以返回 cake,然后再找和 cake 节点编辑距离是 0 到 2 的,分别找到 cape 和cart 节点,这样就得到 cape 这个满足条件的结果。

 

 

img

 类似资料:
  • 问题内容: 我想将数据从亚马逊运动流传输到S3日志或Bunyan日志。 该示例适用于文件写入流或stdout。我如何才能体现自己的可写流? 表示没有“打开”方法是行不通的 我必须为自己的自定义可写流实现哪些方法,文档似乎表明我需要实现“写”而不是“开” 问题答案: 要创建自己的可写流,您有三种可能。 为此,您需要1)扩展Writable类2)在您自己的构造函数中调用Writable构造函数3)在流

  • 问题内容: 每当抛出javascript异常时,我们还想做一些额外的事情。 从以下文档: 角度表达式中任何未捕获的异常都委托给此服务。默认的实现只是将$ log.error委托给浏览器控制台。 它说“默认实现”的事实使我认为有一种方法可以为服务提供我们自己的实现,并在引发异常时做我们想要的事情。我的问题是,你如何做到这一点?我们如何使所有异常都保留给该服务,然后提供我们希望发生的功能? 问题答案:

  • 本文向大家介绍什么是拼写检查?相关面试题,主要包含被问及什么是拼写检查?时的应答技巧和注意事项,需要的朋友参考一下 浏览器中输入区欧盟,输入错误,会被拼写检查为去欧盟,实际上原理是采用了贝叶斯原理,由贝叶斯公式可知P(c|w),w表示拼写错误的情况,而c表示实际想要拼写的单词,等于P(w|c)P(c)/P(w),也就是在若干备选中选择最大的P(c|w),而P(w)都是相同的,即找到使得P(w|c)

  • 问题内容: 我不太确定是否由于尝试执行以下MySQL程序而关闭了与此类似的问题。 在bash命令行上并得到此错误 我该如何解决此问题? 我实际上是从Python程序运行此命令,但将其拉出以尝试在bash命令行上摆弄它。 我已经看到了如何修改my.cnf(本地文件),但是如果可以避免的话,我不希望对全局进行更改。 这是MySQL版本。 问题答案: 如“ 安全问题”中所述: 为了解决这些问题,我们更改

  • 我想将一个道具传递给React组件,以父组件状态中的布尔值为条件,该组件希望将作为

  • null 如果我们等待的时间足够长,就会出现超时,导致客户端上出现以下消息。 这就是我在使用长轮询时所面临的问题。它停止进程以防止服务器过载,不是吗?