在录入文本里,有2种字符:“有效字符”和“多打字符”。“有效字符”是指它在标准文本里可以找到唯一的“对应字符”。“对应字符”当然与它相同,但是,相同的字符不一定就是“对应字符”。例如:
    标准文本:我们班里的学生大多数是女生。
    录入文本:我们班里喜欢数学的学生大多数是女生。
录入文本的第一个“数”字,在标准文本里是找不到“对应字符”的。
    我的算法思路是这样的:对于录入文本里的每一个字符(包括看不见但是占位置的全、半角空格;包括看不见又不占位但长度又不为零的回车),在标准文本里寻找“对应字符”。(如何确认“对应字符”是个难点,我在后面会提出解决方法,那其实是本文的重点。寻找“对应字符”首先是寻找“相同字符”,只有“相同字符”才有资格做“对应字符”)
    根据寻找的结果(有或没有),自然就解决了“漏”和“多”的问题,既可以得到字符(串)的内容,又可以统计数字。至于“错字”,其实就是“漏”与“多”在对应位置所出现的综合事件,比如把“你说”错打成了“他说”,漏了“你”;多了“他”。在下面的描述中我会细说的。
    下面用文字和图片来描述一次“寻找”的过程。

图1中n1、n2分别是寻找的第一个字符的位置,内容是zn1、zn2 。我称为“起始字符”。如果相同,那比较简单。(不是本文的重点,后面会提出一个小细节)。在图1中两个字不相同。那么把标准文本里的下一个字符与zn2进行比较(标准文本的起始字符仍然记住是zn1)。如果最终找到(z1)。(并确定是“对应字符”,下同)。那么从n1(包括zn1)到z1(不包括z1)的字符(串)就是“漏字符(串)”,标准文本下一轮寻找(比对)从z1之后的那个字符开始;录入文本下一轮寻找从zn2之后的那个字符开始。(即zn2是“有效字符”)。
如果zn2始终没找到“对应字符”(图2)

,那么zn2就是“多”字符,标准文本下一轮寻找仍然从n1开始;录入文本下一轮寻找从zn2之后的那个字符开始。(录入文本始终是一个一个的往后“走”,不管这个字是“有效”还是“多打”)。     这里说一下“错字”的问题。在每次发生“多”结果时,要有一个变量记录连续“多”的累计字符数(不是最终评分的累计数),一旦发生了“漏”结果,就要马上算出“错”字符内容和个数(当然也可以算出准确字符的内容,调整“漏”和“多”的内容和数量,包括重新涂颜色)然后把“多”的累计字符数清零。这里的细节就不多说了。
下面借助几张截图来说说怎样判断“对应字符”。这是本文的重点。

图3:录入文本里的加红圈的字被误判为“有效字符”;图4里标准文本里的加红圈的字被误判为“对应字符”,造成的后果虽然不影响总分,但是看上去别扭且不大合理,本来连续的漏或错被分成了2段,中间夹了一个对应字符和有效字符。
而图5

更是误判了,录入文本里原本有效的“BCD”成了“多”字符,而标准文本里的“BCD”又成了“漏字符”。真实情况是“多打”了1个“E”。造成这个结果,是因为标准文本里的那个“E”被误判成录入文本第一个“E”字符的“对应字符”了。那是我用“人脑”发现的。怎样让程序来判断呢? 我以本文开头的2行文字为例:图6

先定义2个12个字符的字符串:在标准文本里的  串1=“数是女生。    ”和录入文本的  串2=“数学的学生大多数是女生。”(它们的首字符就是被判断是否“对应字符”的字符“数”)
用一个十多行左右代码的函数判断“有几个不颠倒、可以有间隔的共同字符”。上面的共同字符数是5。
下一步,我先把上述标准文本里的“BCD”+“E”表述成“疑漏字符串”,图6中标准文本里“的学生大多数”。把录入文本在n2后面的区域表述为“未比对区域”。
接着,用For 循环分别把“疑漏字符串”中的每个字符在“未比对区域”寻找相同的字符,若找到,就用该字符为首字符用标准文本和录入文本组成2个也是12个字符的字符串3和字符串4(图6右下方的上下2个)。

然后用同样的函数求出它们的共同字符数。一旦发生“第2个共同字符数大于第1个共同字符数”(图6这里是10)时,那个疑似“对应字符”(数)即被否定。退出For 循环,确认标准文本上的这个“数”字符不是“对应字符”而继续在标准文本里找,也就是说,这一轮寻找还没有结束。这样就避免了误判。等到这一轮寻找结束,确定是“多”还是“漏”,本轮寻找才算结束,然后更新“起始字符”,进入下一轮寻找“对应字符”.....。

将这样的“寻找”在录入文本里从头到尾走一遍,就完成了“文本比对”。

如果你对上面的描述已经理解的话,你试试在图1中找出2对(4个)字符串,看会不会发生“第2个共同...大于...数”,从而否定“E”(z1)是“对应字符”。

前面图3图4里的问题,也是用“继续找相同字”--“比较2个共同字符数”的方法(不再赘述),不过寻找的区域不同,也不用For 循环,因为只有1个要找的字符。前面为什么要for每个字要找,是因为那个“未比对区域”有可能恰好漏打了某个字,以致找不到。

文本比对的一种算法探索、比对算法中的难点及解决方法---学习笔记记录相关推荐

  1. 乙腈和水共沸_一种从乙腈水混合物中回收乙腈的方法与流程

    本发明涉及一种从乙腈水混合物中回收乙腈的方法. 背景技术: 乙腈是制药.化工生产中常用的大极性非质子溶剂.在许多场合乙腈是不可替代的优秀溶剂.但是很多使用乙腈进行化学反应的场合,都需要使用无水乙腈,使 ...

  2. 根据《关于“k-means算法在流式细胞仪中细胞分类的应用”的学习笔记总结》撰写的中期报告...

    XXXX大学2014届本科毕业设计(论文)中期报告 毕业设计(论文)题目:K-means算法在流式细胞仪中细胞分类的应用 专业(方向):生物医学工程 学生信息:XXXXXX.XX.生医XXX 指导教师 ...

  3. Hash函数与算法、哈希查找、哈希冲突解决方法总结

    Hash哈希知识点导航 1.基本概念 2. 哈希函数   2.1 直接寻址法   2.2 数字分析法   2.3 平方取中法   2.4 折叠法   2.5 随机数法   2.6 除留余数法 3. 哈 ...

  4. 导致溢出_1篇文章搞清楚8种JVM内存溢出(OOM)的原因和解决方法

    前言 撸Java的同学,多多少少会碰到内存溢出(OOM)的场景,但造成OOM的原因却是多种多样. 堆溢出 这种场景最为常见,报错信息: 原因 1.代码中可能存在大对象分配 2.可能存在内存泄露,导致在 ...

  5. python脚本在linux上运行的两种方式_python脚本当作Linux中的服务启动实现方法

    脚本服务化目的: python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据.但是网上买的服务器会不定时进行维护,服务器会被重启.这样我们的爬虫服务就无法运行.这个 ...

  6. 苹果邮箱登录入口_LOL手游只有一种登录方式怎么办?只有拳头账号登录入口解决方法...

    LOL手游只有一种登录方式怎么办?众所周知,英雄联盟手游一共有3个登陆入口,分别是拳头账号.FB账号和谷歌/苹果账号,但今天有玩家发现自己的登陆界面只有一个账号登陆入口,而且还进不去,这是怎么回事呢? ...

  7. 文本自动化摘要方法学习笔记

    1 介绍 文本自动摘要,是指对文本信息内容进行概括,提取主要内容进而形成摘要的过程.人们利用计算机对文本信息进行处理,用简明扼要的文字概括其主要内容,指明文本中概念.实体间的关系,生成基本反映文章主题 ...

  8. 机器学习算法----聚类 (K-Means、LVQ、GMM、DBSCAN、AGNES) (学习笔记)

    文章目录 聚类简介 聚类和分类的区别 基础概念 外部指标 内部指标 距离度量和非距离度量 距离度量方法 有序属性和无序属性 原型聚类 k均值算法(K-means) 学习向量化(LVQ) 高斯混合聚类( ...

  9. 人工智能:一种现代方法学习笔记(第六章)——约束满足问题

    定义 每一次赋值都会影响下一次的选择范围 约束满足问题指的是针对给定的一组变量及其需要满足的一些限制或一些约束条件,找出符合这些满足这些约束关系的一个解.全部解或是最优解. CSP可分为两个子领域也就 ...

最新文章

  1. CentOS开机启动脚本的顺序
  2. 掌握AI核心技巧,一站式数据采集处理与智能识别公开课
  3. nginx整合php+lua+oracle环境搭建
  4. [elk]elasticsearch dsl语句
  5. HTML5在手机端实现视频全屏展示
  6. 修改了模板文件tpl如何立即生效_Python3操作Office之Word模板技术
  7. Qt:During startup program exited with code 0xc0000135
  8. 操作系统学习笔记(一)
  9. 电商项目中遇到的经典问题
  10. 翼支付门户架构之搭建SpringMvc环境
  11. Tina-TI电路仿真初体验(德州仪器电路仿真软件)
  12. Science Advances | 南方医院整形外科王高峰组揭示皮肤共生微生物促进毛囊再生
  13. 什么是响应式设计?如何实现?
  14. 华硕电脑黑屏 怎么按都开不了机解决方法
  15. Zookeeper学习提纲:助你一臂之力
  16. 生成Excel的” 源代码
  17. LightningChart数据可视化工具图形控件教程24-Bands(数据带)
  18. Morto蠕虫病毒分析报告
  19. 计算机房空调设计要求,计算机机房空调设计规范
  20. [读书笔记]《SQL基础教程》

热门文章

  1. 酷比魔方iwork1x 使用体验
  2. 云扩RPA研习社 | 解析流程开发主要步骤
  3. 【Java入门】统计字符串中“ a ~ z “各个字符出现的次数
  4. 阿里云和华为云谁更牛逼
  5. linux系统有哪些电脑,常见的Linux操作系统有哪些 常见的Linux操作系统介绍
  6. java的swing和awt_java的SWING与AWT的区别
  7. 迅捷CAD编辑器中我们怎么快速选择工具,提高绘图效率?
  8. mysql80从入门到精通配套源码
  9. 【技术宅拯救世界】小米3小米4刷Android7.1 Nougat AOSP并安装Google套件教程与资源下载
  10. 位列第五大生产要素,大数据该如何突破隐私安全魔咒?