正则判断字符串相似度_简言翻译记忆的原理(三):自动计算两个字符串间的相似度...

在上一篇文章中,我们介绍了简言翻译记忆的原理(二):用动态规划算法求解最短编辑距离,相比我之前写的文章,这篇文章的阅读数唰得一下就下来了,可见这篇文章“又臭又长”a39bc0d7bc06c0d892139791a258dcca.png

对于文科背景的同学来说,这篇确实不是那种适合休闲阅读的文章,但如果想知道翻译记忆的原理,还是得耐心阅读,好好理解这背后的道理。

今天的这篇文章恐怕读者人数就更少啦,因为我要介绍如何编写自动计算最小编辑距离的程序,让计算机自动计算出两个字符串之间的最小编辑距离,进而计算翻译工具中常见的“翻译记忆匹配率”。

同时附赠一个新鲜出炉的网站,供大家在线感受如何计算最短编辑距离:

http://translation.education/bied

07babf22c240a5c13792c574e16c3062.png

正文

在上一篇文章中我们说计算最小编辑距离要用“动态规划”算法,然后我画了一张表格,用这个表格来计算“EXECUTION”和“INTENTION”之间的最小编辑距离,如下:

63507735495c45dce82f5bb7aca92e05.png

所谓的“动态规划”,直白来说就是先找到并解决子问题,然后用子问题的结果推导大问题的结果。

在上图中,我们从表格的左上角开始算,然后向表格的右下角来推导。如果我们希望计算机来做这件事儿,计算机也应该是这样来完成。

以下是我们给计算机发出的一系列指令:

注:以下程序均是用PHP写的,如果大家想跟着一起操作,可以前往以下网址:

https://c.runoob.com/compile/1

第一步:接收两个待计算的字符串

<?php $source = "EXECUTION";$target = "INTENTION";?>

如下图:

00ca1fdcd939ddb20556291a9cf247a4.png

第二步:将上面的那个字符串放到一个网格中。

如果我们想用代码生成一个像下图中的网格:

187c6f9f5ef40ae0f910f6acd50e20fb.png

我们一般不会直接把这个表格显示出来,而是将这个表格“存储”在计算机之中,但我们可以将其脑补成上面这种表格。

在PHP中,我们会用“数组”的形式来构建这样的表格,我们称这种表格为“矩阵”(Matrix)。

先举一个简单的例子:

<?php $matrix = array();$matrix[0][0] = 1;$matrix[0][1] = 2;$matrix[1][0] = 3;$matrix[1][1] = 4;?>

我们上面这5行代码创建了一个2x2的矩阵,可以想象成这是一个包含有4个单元格的表格,如下:

29dc361ee788a5c98b35568b99072f21.png

上面两个图是我把实际的数据用形象的方式给画了出来,并不是说上面的代码产生了这两张图。

上面的图是为了告诉大家[0][0]、[0][1]、[1][0]、[1][1]对应的位置,第一次接触这个东西的人会无法理解为什么左上角的单元格是[0][0]而不是[1][1]。

我们说一个表格有行有列,其中行是自上而下的,列是自左到右的。最左上角的那个单元格就是:第一行第一列,但是在程序语言中,都是从0开始数,所以这个单元格是:第0行第0列。

右上角的单元格是:第0行第1列;

左下角的单元格是:第1行第0列;

右下角的单元格是:第1行第1列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值