掌桥专利:专业的专利平台
掌桥专利
首页

一种OFD文档中快速检索文本的方法、装置和电子设备

文献发布时间:2023-06-19 19:30:30


一种OFD文档中快速检索文本的方法、装置和电子设备

技术领域

本发明涉及数据检索技术领域,更具体的说,尤其涉及一种OFD文档中快速检索文本的方法、装置和电子设备。

背景技术

在日常阅读OFD文档时,检索文本功能是基本需求,是每个OFD文档阅读器必备的功能。而对于一些有上百页的单页面包含成百甚至上千文字的OFD文档来说,如何快速在文档中检索到指定的模式字符串,就成为了用户的迫切需求。

在OFD文档中检索文本,通常的技术方案一:先是从首页到尾页逐一提取每一页的文本字符串,再将每页的文本字符串拼接在一起组成全文字符串,最后通过字符串匹配算法快速定位模式字符串在全文字符串中的位置;改进的技术方案二:以页为单位,先提取第一页的文本字符串,再通过字符串匹配算法快速定位模式字符串在当前页的文本字符串中的位置,然后递增一页取第二页的文本字符串,通过字符串匹配算法定位模式字符串在第二页文本字符串中的问题,以此类推,直到匹配完文档的最后一页为止,现有技术方案如果遇到页数多,单页文本字数多的时候,检索时间都会比较长。

发明内容

本发明为了解决现有技术的算法存在时间复杂度高、实现起来困难、文本检索效率低的问题,本发明通过在解析和提取OFD文档的文本时,生成记录待检索模式字符串首字符的位置的索引数组,再根据索引数组记录的位置,减少了文本字符串的遍历次数,降低了后续检索匹配的处理量,以达到快速检索OFD文本的目的。

为了解决上述技术方案,本发明提供了一种方案:

第一方面,本发明实施例提供了一种OFD文档中快速检索文本的方法,包括:

获取待检索的模式字符串;

提取待检索的文本字符串,并生成一个记录索引位置的索引数组;

遵循首字符对应的原则,将模式字符串的首字符与文本字符串进行对比匹配,记录首字符对应成功匹配的索引位置;

提取文本字符串对应的索引数组的索引位置上与模式字符串等长的待匹配字符串,遍历索引数组中的每个索引位置,得到待匹配字符串集;

判断模式字符串与待匹配字符串集中的待匹配字符串是否匹配,若匹配成功,则将匹配成功的待匹配字符串放入结果字符串集,若匹配失败,则进行下一个待匹配字符串的匹配。

结合第一方面,在第一方面的第一种实现方式中,提取待检索的文本字符串的具体步骤为:遍历OFD文档页面Content.xml中的每个TextObject节点;遍历每个TextObject节点下TextCode中的每个字符,并记录当前字符的偏移量和大小,获取当前字符的编码值。

结合第一方面,在第一方面的第二种实现方式中,在获取待检索的模式字符串后,获取模式字符串的每个字符的编码值。

结合第一方面,在第一方面的第三种实现方式中,根据字符的编码值,在模式字符串的首字符与文本字符串进行对比匹配;将文本字符串中字符的编码值与模式字符串的首字符的编码值对比匹配。

结合第一方面,在第一方面的第四种实现方式中,在将匹配成功的待匹配字符串放入结果字符串集之后,判断模式字符串与待匹配字符串集中的待匹配字符串是否匹配没有结束,继续遍历完整个索引数组为止。

结合第一方面,在第一方面的第五种实现方式中,方法还包括:将结果字符串集中的所有待匹配字符串确定为待检索的模式字符串的检索结果;返回检索结果。

结合第一方面,在第一方面的第六种实现方式中,方法还包括:判断结果字符串集是否为空,若结果字符串集为空,则显示未找到检索相关数据;若结果字符串集不为空,则高亮显示检索结果。

第二方面,本发明实施例提供了一种OFD文档中快速检索文本的装置,包括:

接收模块,用于接收待检索的模式字符串;

提取识别模块,用于提取待检索的文本字符串,并生成一个记录索引位置的索引数组;

提取识别模块,还用于遍历OFD文档页面Content.xml中的每个TextObject节点;遍历每个TextObject节点下TextCode中的每个字符,并记录当前字符的偏移量和大小,获取当前字符的编码值;在获取待检索的模式字符串后,获取模式字符串的每个字符的编码值;

检索匹配模块,用于在遵循首字符对应的原则,将模式字符串的首字符与文本字符串进行检索;

检索匹配模块,还用于提取文本字符串对应的索引数组的索引位置上与模式字符串等长的待匹配字符串,遍历索引数组中的每个索引位置,得到待匹配字符串集;

检索匹配模块,还用于判断模式字符串与待匹配字符串集中的待匹配字符串是否匹配,若匹配成功,则将匹配成功的待匹配字符串放入结果字符串集;若匹配失败,则进行下一个待匹配字符串的匹配;

检索结果显示模块,用于判断结果字符串集是否为空,若结果字符串集为空,则显示未找到检索相关数据;若结果字符串集不为空,则高亮显示检索结果。

结合第二方面,在第二方面的第一种实现方式中,提取识别模块,还用于获取模式字符串的每个字符的编码值。

第三方面,电子设备,设备包括处理器以及存储器:存储器用于存储程序代码,并将程序代码传输给处理器;处理器用于根据程序代码中的指令执行本发明任意实施例提供的一种OFD文档中快速检索文本的方法。

本发明有益效果:在OFD文档中查找待检索的模式字符串的结果字符串时,在提取识别文本字符串和模式字符串的过程中,生成一个记录索引位置的索引数组,高亮显示文本检索结果;在待检索的模式字符串进行检索过程中,本发明遵循首字符对应的原则,将模式字符串的首字符与文本字符串进行对比匹配,记录首字符对应成功匹配的索引位置;提取文本字符串对应的索引数组的索引位置上与模式字符串等长的待匹配字符串,遍历索引数组中的每个索引位置,生成待匹配字符串集,降低了后续检索匹配的处理量;判断模式字符串与待匹配字符串集中的待匹配字符串是否匹配,将匹配成功的待匹配字符串放入结果字符串集。(1)本发明通过生成记录索引位置的索引数组,达到高亮显示文本检索结果的效果;(2)遵循首字符对应的原则,从文本字符串中筛选出待匹配字符串集,降低了下一轮检索匹配的处理量;(3)在判断模式字符串与待匹配字符串集中的待匹配字符串是否匹配时,从左到右进行对应位置字符的检索匹配,若出现一个字符不匹配时,则进行下一个待匹配字符串的检索匹配,降低了字符串匹配的复杂度,实现起来简单,提高了文本检索效率。

附图说明

图1是本发明实施例提供的一种OFD文档中快速检索文本的方法流程示意图;

图2a是本发明实施例提供的一种检索过程示意图之一;

图2b是本发明实施例提供的一种检索过程示意图之二;

图2c是本发明实施例提供的一种检索过程示意图之三;

图2d是本发明实施例提供的一种检索过程示意图之四;

图2e是本发明实施例提供的一种检索过程示意图之五;

图2f是本发明实施例提供的一种检索过程示意图之六;

图3是本发明实施例提供的一种OFD文档中快速检索文本的装置的结构图。

图标:101-接收模块,102-提取识别模块,103-检索匹配模块,104-检索结果显示模块。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。

本发明实施例出现的英文缩写注解:

Xml:eXtensible Markup Language,可扩展标记语言;

OFD:Open Fixed-layout Document,开放版本文档;

Content:内容;TextObject:文本对象;TextCode:文本内容;

HEX:HEXadecimal,十六进制;BIN:Binary,二进制。

现有技术方案如果遇到页数多,单页文本字数多的时候,检索时间都会比较长,拿改进后的技术方案来说,用时间复杂度来分析该技术方案的效率,从两部分来分析,第一部分是提取页面中的文本字符串,第二部分是在页面文本字符串中匹配模式字符串;第一部分,因为最终要高亮显示文本检索结果,所以提取页面文本字符串时需要计算并记录文本字符串中每个字符的偏移量和大小,假设页面文本字符串的长度为N,那么,这一步逻辑的时间复杂度为O(N);第二部分主要看字符串匹配算法的时间复杂度,字符串匹配算法有Rabin-Karp算法、Boyer-Moore算法、KMP算法、Sunday算法等,比如Sunday算法的平均性能的时间复杂度为O(N),那么该技术方案的时间复杂度即为O(2N);这些现有技术的算法性能的时间复杂度很高,实现起来困难,文本检索的效率比较低。

第一实施例:

为了解决现有技术存在的技术问题,本发明提供了一种OFD文档中快速检索文本的方法,请参见图1,图1是本实施例提供的一种OFD文档中快速检索文本的方法流程示意图,该方法包括以下步骤:

S1:获取待检索的模式字符串;

在本步骤里,待检索的模式字符串可以是中文、英文、数字等任一种文字,也可以是中文与英文,以及数字之间的任意组合,本发明的检索场景主要引用于检索OFD文档中的文本,待检索的模式字符串是用户输入的需要检索的文本。

S2:提取待检索的文本字符串,并生成一个记录索引位置的索引数组;

在本步骤中,待检索的文本字符串是OFD文档中从首页到尾页的所有文字内容,在提取待检索的文本字符串过程中,以页为单位,先提取当前页面的文本字符串,同时生成一个索引位置的数组,该数组记录了页面文本字符串中与模式字符串首字符匹配成功的索引位置,提取待检索的文本字符串的步骤为:遍历OFD文档页面xml中的每个TextObject节点;遍历每个TextObject节点下TextCode中的每个字符,并记录当前字符的偏移量和大小,获取当前字符的编码值。

下面举例说明提取待检索的文本字符串的过程,假设某个OFD文档中某一页的Content.xml中有两个TextObject节点,第一个TextObject节点下的文本字符串为“OFD”,第二个TextObject节点下的文本字符串为“阅读器”。那么按照步骤,首先解析xml,遍历第一个TextObject节点,读取之间的文本字符串为“OFD”。

因为xml指定了是"UTF-8"的编码格式,UTF-8编码最短的为一个字节、最长的目前为四个字节,从首字节就可以判断一个UTF-8编码有几个字节:

1)如果首字节以0开头,肯定是单字节编码,即单个单字节码元;

2)如果首字节以110开头,肯定是双字节编码,即由两个单字节码元所组成的双码元序列;3)如果首字节以1110开头,肯定是三字节编码,即由三个单字节码元所组成的三码元序列,以此类推。

按照以上编码规则,“OFD”对应二进制内存为:0100 1111 0100 0110 0100 0100,首字节是0开头,所以是单字节编码,单字节编码时直接读取一个字节数据“0100 1111”对应的编码就是0x4F;再读取一个字节“0100 0110”,也是0开头,对应编码为0x46;读取“01000100”得到对应编码0x44;

再读取第二个TextObject节点的TextCode节点,得到文本字符串“阅读器”,内存数据如下:

首字节是1110开头,对应的是三字节编码,假设第一个字节c=0xE9,第二个字节c1=0x98,第三个字节c2=0x85,根据公式:code=((((c<<6)|(c1^0x80))<<6)|(c2^0x80))&0xFFFF即可得到第一个字“阅”对应的编码值为0x9605,依次类推,“读”对应编码值0x8BFB,“器”对应编码值0x5668。

S3:遵循首字符对应的原则,将模式字符串的首字符与文本字符串进行对比匹配,记录首字符对应成功匹配的索引位置。

S4:提取文本字符串对应的索引数组的索引位置上与模式字符串等长的待匹配字符串,遍历索引数组中的每个索引位置,得到待匹配字符串集。

S5:判断模式字符串与待匹配字符串集中的待匹配字符串是否匹配,若匹配成功,则将匹配成功的待匹配字符串放入结果字符串集,若匹配失败,则进行下一个待匹配字符串的匹配。

本发明提出的技术方案:以页为单位,我们要在提取当前页面的文本字符串的同时生成一个索引位置的数组,该数组记录了页面文本字符串中与模式字符串首字符匹配成功的索引位置,再遍历索引数组中的每个索引位置,将模式字符串与该索引位置上的页面文本字符串的等长子串做对比和匹配,最后将匹配成功的索引位置做高亮显示。

具体从实现角度来说,分两个部分,第一部分是提取文本并生成索引数组,第二部分是遍历索引数组与模式字符串做匹配,匹配成功则高亮显示,匹配失败则继续下一个索引位置的匹配。第一部分,先遍历OFD文档页面Content.xml中的每个TextObject节点,遍历每个TextObject节点下TextCode中的每个字符,记录下当前字符的偏移量和大小,同时,将该字符的编码值与模式字符串的首字符的编码值做对比匹配,如果相等则把该字符在当前页文本字符串中的索引位置写入到索引数组中。这一过程实际等价于把页面文本字符串中的每个字符都遍历了一次,所以该过程的时间复杂度为O(N),其中N为页面文本字符串的长度。第二部分,得到索引数组后,循环遍历该数组中的每个索引值,假设索引数组A的长度为k,当前遍历到第i个索引值A[i],假设页面文本字符串T的长度为N,模式字符串P的长度为M,那么此时T[A[i]]的字符与P[0]的字符一定是匹配的,所以我们可以跳过T[A[i]],直接对比T[A[i]+1]与P[1],若是匹配成功,继续对比T[A[i]+j]与P[j],若匹配失败,则继续遍历第i+1个索引值A[i+1],并对比T[A[i+1]+1]与P[1]。这一过程的时间复杂度为O(k(M-1)),在实际使用场景中,O(k(M-1))大部分情况下是小于O(N)的。

下面举例说明文本检索的过程,设置OFD文档的页面Content.xml中有三个TextObject,对应的三个TextCode内容分别为“BBC”、“ABCDAB”“ABCDABCDABDE”,待检索的模式字符串P为“ABCDABD”。

参见图2a,图2a是本发明实施例提供的一种检索过程示意图之一,第一步,提取待检索的文本字符串并生成索引数组;流程如下:首先是第一部分,即提取待检索的文本字符串并生成记录索引位置的索引数组,先遍历第一个TextCode中的字符串“BBC”,提取TextCode中的字符“B”插入到文本字符串T中,比较字符“B”与模式字符串首字符P[0],两者不匹配,继续提取和比较下一个字符,直到遍历结束时,可知三个字符与P[0]都不匹配,所以索引数组A为空。

参见图2b,图2b是本发明实施例提供的一种检索过程示意图之二,继续遍历第二个TextCode中的字符串“ABCDAB”,在提取第一个字符“A”时,因为“A”的坐标位置与T的最后一个字符的坐标位置间距较大,所以此处会插入一个空格到T中,同样与P[0]做匹配,匹配失败所以继续插入字符“A”到T中,并与P[0]做匹配,这里匹配成功,所以索引数组A[0]置为4,然后继续提取和匹配下一个字符,直到匹配完TextCode字符串的最后一个字符,此时索引数组A={4,8}。

参见图2c,图2c是本发明实施例提供的一种检索过程示意图之三,同样的逻辑遍历第三个TextCode中的字符串“ABCDABCDABDE”,在提取第一个字符“A”时,因为“A”的坐标位置与T的最后一个字符的坐标位置间距较大,所以此处会插入一个空格到T中,同样与P[0]做匹配,匹配失败所以继续插入字符“A”到T中,并与P[0]做一次对比,匹配则将索引值写入索引数组A,然后继续提取和匹配下一个字符,直到匹配完TextCode字符串的最后一个字符,最后得到文本字符串T以及索引数组A={4,8,11,15,19}。

参见图2d,图2d是本发明实施例提供的一种检索过程示意图之四,接下来进入第二部分,遍历索引数组与模式字符串做匹配;现在已知模式字符串首字符P[0]在文本字符串T中的索引位置,在文本字符串T中提取与模式字符串P[0]等长的待匹配字符串,遍历整个索引数组,把所有待匹配字符串标记为待匹配字符串集,将模式字符串P[0]对齐文本字符串的T[A[i]],从j=1开始对比T[A[i]+j]与P[j],如图2d所示,i=0,j=1,A[0]=4,对比T[5]与P[1],两个字符匹配,继续对比直到j=6时,对比T[10]与P[6]两者不匹配。

参见图2e,图2e是本发明实施例提供的一种检索过程示意图之五,上一步匹配失败了,所以递增i得i=1,A[i]=8,将模式字符串P[0]对齐文本字符串的T[8],从对比T[9]与P[1]开始,直到当j=2时T[10]与P[2]匹配失败,继续递增i直到i=3,A[i]=15,将模式字符串P[0]对齐文本字符串的T[15],对比T[15+j]与P[j],j从1开始一直到6每个字符都匹配成功,则将该索引位置的待匹配字符串放入结果字符串集。

参见图2f,图2f是本发明实施例提供的一种检索过程示意图之六,上一步匹配成功了不代表可以结束,继续递增i直到遍历完整个索引数组为止,最后判断结果字符串集是否为空,很显然,结果字符串集中存在首字符为A[1]=8的待匹配字符串,则判定首字符为A[1]=8的待匹配字符串为结果字符串,高亮显示首字符为A[1]=8的结果字符串。

第二实施例:

基于图1对应实施例所提供的一种OFD文档中快速检索文本的方法,本发明提供了一种OFD文档中快速检索文本的装置,参见图3,图3是本发明实施例提供的一种OFD文档中快速检索文本的装置的结构图,该装置包括接收模块,接收模块连接提取识别模块,提取识别模块连接检索匹配模块,检索匹配模块连接检索结果显示模块。

接收模块,用于接收待检索的模式字符串;

提取识别模块,用于提取待检索的文本字符串,并生成一个记录索引位置的索引数组;

提取识别模块,还用于遍历OFD文档页面xml中的每个TextObject节点;遍历每个TextObject节点下TextCode中的每个字符,并记录当前字符的偏移量和大小,获取当前字符的编码值;

提取识别模块,还用于在接收待检索的模式字符串后,获取模式字符串的每个字符的编码值;

检索匹配模块,用于在遵循首字符对应的原则,将模式字符串的首字符与文本字符串进行检索;

检索匹配模块,还用于提取文本字符串对应的索引数组的索引位置上与模式字符串等长的待匹配字符串,遍历索引数组中的每个索引位置,得到待匹配字符串集;

检索匹配模块,还用于判断模式字符串与待匹配字符串集中的待匹配字符串是否匹配,若匹配成功,则将匹配成功的待匹配字符串放入结果字符串集;若匹配失败,则进行下一个待匹配字符串的匹配;

检索结果显示模块,用于判断结果字符串集是否为空,若结果字符串集为空,则显示未找到检索相关数据;若结果字符串集不为空,则高亮显示检索结果;

提取识别模块,还用于获取模式字符串的每个字符的编码值。

本发明实施例还提供了电子设备,包括处理器以及存储器:存储器用于存储程序代码,并将程序代码传输给处理器;处理器用于根据程序代码中的指令执行本发明任意实施例提供的一种OFD文档中快速检索文本的方法。

相关技术
  • 一种在线文档检索方法、装置、存储介质及电子设备
  • 一种医学文档的处理方法、装置、介质及电子设备
  • 一种文本标识的方法、装置、电子设备及存储介质
  • 一种文本信息的过滤方法、装置和电子设备
  • 一种文本行区域检测方法、装置、介质和电子设备
  • OFD文档快速渲染方法、装置、电子设备及存储介质
  • OFD文档处理方法、装置及电子设备
技术分类

06120115937921