发明内容
有鉴于此,本公开提供一种文档解析方法和装置,以提高文档解析效率。
具体地,本说明书一个或多个实施例是通过如下技术方案实现的:
第一方面,提供一种文档解析方法,所述方法用于由待解析的文档中获取目标数据;所述方法包括:
提取所述文档对应的文档模板中的目标变量;其中,所述文档模板中对应所述目标数据的位置设置所述目标变量作为占位符;
解析所述文档模板,得到所述目标变量的变量路径;
根据所述变量路径,由所述文档中获取对应所述目标变量的目标数据。
第二方面,提供一种文档解析装置,所述装置用于由待解析的文档中获取目标数据;所述装置包括:
变量提取模块,用于提取所述文档对应的文档模板中的目标变量;其中,所述文档模板中对应所述目标数据的位置设置所述目标变量作为占位符;
路径获取模块,用于解析所述文档模板,得到所述目标变量的变量路径;
数据提取模块,用于根据所述变量路径,由所述文档中获取对应所述目标变量的目标数据。
第三方面,提供一种文档解析设备,所述设备用于由待解析的文档中获取目标数据;所述设备包括存储器、处理器,以及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行指令时实现以下步骤:
提取所述文档对应的文档模板中的目标变量;其中,所述文档模板中对应所述目标数据的位置设置所述目标变量作为占位符;
解析所述文档模板,得到所述目标变量的变量路径;
根据所述变量路径,由所述文档中获取对应所述目标变量的目标数据。
本说明书一个或多个实施例的文档解析方法和装置,通过在利用该方法解析复杂的文档时,只需要构建文档对应的文档模板,并将模板中对应目标数据的位置设置为目标变量作为占位符,即可自动解析得到目标变量的变量路径,根据该路径去文档中自动提取目标数据即可,显著提高了文档解析速度。
具体实施方式
为了使本技术领域的人员更好地理解本说明书一个或多个实施例中的技术方案,下面将结合本说明书一个或多个实施例中的附图,对本说明书一个或多个实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是一部分实施例,而不是全部的实施例。基于本说明书一个或多个实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。
可以通过文档解析来获取文档中特定的数据,例如,可以解析一个HTML(HyperText Markup Language,超文本标记语言)文档,该文档的内容可以是新闻,可以获取该文档中包括的新闻标题、新闻时间、新闻作者等关键属性。具体提取文档中的哪些数据可以根据实际业务需求确定。
待解析的文档有的较为简单,比如,文档的内容较少,并且待提取的数据也较少,此时可以直接编写文档解析代码获取文档数据,例如,可以指定获取文档第一行第二列的数据即可得到想要的数据。但是,有时待解析的文档特别复杂,内容较多,或者也可能是文档的结构格式较为复杂,此时若仍然按照上述方式编写文档解析代码,耗费人力和时间成本较高。本说明书一个或多个实施例提供的文档解析方法,以期解决上述问题,提高复杂文档的解析速度,当然,即使简单的文档也可以按照本方法进行解析。
图1示例了本说明书一个或多个实施例提供的一种文档解析方法的流程,该方法用于解析的文档可以包括多种类型,例如,可以是任一种格式的文档:excel、xml(Extensible Markup Language,可扩展标记语言)、HTML、json JavaScript ObjectNotation,JS对象标记)。如图1所示,该方法可以包括:
在步骤100中,提取待解析文档对应的文档模板中的目标变量。
其中,待解析文档对应的文档模板,可以是一个用于表示文档结构格式的模板性的文件。示例来说,假设有五个HTML文档,这些文档采用了统一的文档格式,比如,第一行第二列都是文档描述的对象名称,第二行第二列都是上述对象的身份标识号码。那么这五个文档可以对应同一个文档模板,该文档模板用于描述文档的结构格式,可以并不记载具体的数据。
例如,如下表1示例了一种文档模板,如表1所示,根据该模板,第一行第二列是对象名称,第三行第二列是性别,等。
表1文档模板示意
本步骤中,在解析一个文档之前,可以先检查下是否有该文档对应的文档模板。如果存在文档对应的文档模板,可以对该模板执行本步骤的处理;否则,如果尚不存在,则可以构建一个文档对应的模板。或者,假设之前已经存在文档对应的文档模板,当文档的结构格式发生变更后,比如,上述表1中,可以在对象名称和对象地址之间再插入一行,例如,可以是对象所属行政区,那么相应的,也要变更原文档模板,使之与文档对应。
在确定文档对应的文档模板之后,还可以考虑本次文档解析的目的是要获取哪些数据。例如,仍以表1为例,可以将文档中的所有数据,名称、地址等,都获取为解析得到的结果数据;也可以只获取文档中的部分数据,比如,只由文档中提取对象的名称和身份标识,而地址和性别可以不获取。要获取的数据可以称为目标数据。
确定目标数据后,可以将文档模板中对应所述目标数据的位置,设置成目标变量作为占位符。举例来说,假设表1中的对象名称Name是目标数据,可以将文档模板中的该位置替换为占位符${object.name}。如下表2所示:
表2设置占位符的文档模板
上述表2只是示例,还可以设置对象名称之外的其他数据作为目标数据,并替换为对应的占位符。可以将该占位符称为目标变量,例如,上述的${object.name}即为一个目标变量。
本步骤中,在解析一个文档之前,可以对该文档对应的文档模板进行解析,提取出该文档模板中的所有目标变量。
在步骤102中,解析所述文档模板,得到所述目标变量的变量路径。
本步骤中,在提取出文档模板中的目标变量之后,可以通过解析该文档模板自动得到各个目标变量对应的变量路径。例如,对于HTML文档来说,根据W3C的HTML DOM标准,HTML文档中的所有内容都是节点,比如,每个HTML元素是元素节点,HTML元素内的文本是文本节点,可以通过DOM对HTML文档进行解析,生成HTML tree树状结构,也可以称为DOMTree。而XPath是一种路径语言,可以基于上述生成的树状结构,提供在数据结构树中找寻节点的能力,可以获取到文档中的节点对应的路径表达式。
例如,通过解析文档模板中的某个目标变量${variable},可以得到该目标变量对应的变量路径是html/body/table/tr[1]/td[1]。由此可以得到文档模板中的各个目标变量以及对应的变量路径组成的键值对,如下表3所示:
表3示例变量和XPath的键值对
目标变量 |
变量路径 |
${variable} |
/html/body/table/tr[1]/td[1] |
…… |
…… |
需要说明的是,如上是以HTML文档中节点的XPath路径为例描述,实际实施中,不同类型的文档,其中节点的路径表达方式也可以不同。比如,当文档类型是JSON文档时,文档中节点对应的路径表达可以是JSONPath。
在步骤104中,根据所述变量路径,由所述文档中获取对应所述目标变量的目标数据。
由于待解析的文档与文档模板的结构是相同的,所以待解析文档中的各个节点的路径与文档模板中的节点路径也是相同的。本步骤中,可以基于步骤102中得到的目标变量的变量路径,由待解析文档中提取该变量路径对应的数据,这个数据即为目标数据,目标数据和目标变量位于文档中同一位置,且目标数据相当于目标变量的具体变量值。经过本步骤可以得到变量和数据的键值对。比如,上述的表3可以转变成如下的表4:
表4示例变量和数据的键值对
目标变量 |
目标数据 |
${variable} |
北京市某某区 |
…… |
…… |
此外,可以用数据模型来描述文档解析要获取的目标数据,那么在得到变量对应的目标数据后,可以实例化数据模型,将得到的目标数据设置到模型中,即可得到本次文档解析的解析结果。
本例子的文档解析方法,在利用该方法解析复杂的文档时,只需要构建文档对应的文档模板,并将模板中对应目标数据的位置设置为目标变量作为占位符,即可自动解析得到目标变量的变量路径,根据该路径去文档中自动提取目标数据即可,显著提高了文档解析速度。
此外,该方法可以较好的适应解析文档的变化。
例如,当要解析一个新的结构格式的文档时,可以构建该新文档对应的文档模板,并将模板中要获取的目标数据对应的位置设置占位符即目标变量。后续可以解析自动获取占位符的路径,并据此路径由待解析文档中获取目标数据。即对于新文档的解析仍然能够很快速方便的完成。
又例如,还可能的情况是,文档模板未变,只是要获取的目标数据有所变更。假设文档模板中有A、B、C、D四个数据,初始要获取的目标数据是A,后续可能会变更目标数据为A和C、以及D三个数据,那么只需要改动文档模板中的占位符即可。初始是只有数据A的位置设置占位符,变更后可以在A、C、D三个位置设置占位符,解析时自动获取这三个位置对应的路径即可。
再例如,如果文档模板和获取的目标数据都未变,为了提高解析速度,可以在首次解析文档模板后,将步骤102中得到的变量和XPath的键值对进行存储,待解析一个新的HTML文档时(该文档的文档模板和目标数据未变,即该新文档符合文档模板),可以直接根据存储的目标变量和变量路径的对应关系,由新文档中获取对应所述目标变量的目标数据。
此外,在另一个例子中,还可能出现的情况是,目标变量对应的目标数据,是一个包括多个子数据的数据集。比如,假设目标变量是name,其对应的目标数据可以是一个表格,表格中包括一个有多个名称的数据序列,这种情况下,该目标变量实际对应的变量路径是多个,每个路径可以对应一个数据。
例如,可以将目标变量转换为多个子变量,所述多个子变量分别对应不同的子数据;解析所述文档模板,分别提取每个子变量对应的变量路径,得到所述子变量和变量路径的对应关系。仍以name为例,可以定义目标变量是${name[i]},在解析时,可以根据表格中的数据数量自动拆分为name[1]、name[2]、name[3]等,每个可以称为一个子变量。每个子变量可以对应表格中的一个数据,可以自动解析得到该数据对应的变量路径。
为了实现上述文档解析方法,本说明书一个或多个实施例还提供了一种文档解析装置。该装置可以用于由待解析的文档中获取目标数据。如图2所示,该装置可以包括:变量提取模块21、路径获取模块22和数据提取模块23。
变量提取模块21,用于提取所述文档对应的文档模板中的目标变量;其中,所述文档模板中对应所述目标数据的位置设置所述目标变量作为占位符;
路径获取模块22,用于解析所述文档模板,得到所述目标变量的变量路径;
数据提取模块23,用于根据所述变量路径,由所述文档中获取对应所述目标变量的目标数据。
在一个例子中,所述文档包括如下任一种格式的文档:excel、xml、HTML、json。
在一个例子中,路径获取模块22,还用于:当所述目标变量对应的目标数据,是一个包括多个子数据的数据集时,将所述目标变量转换为多个子变量,所述多个子变量分别对应不同的子数据;解析所述文档模板,分别提取每个子变量对应的变量路径,得到所述子变量和变量路径的对应关系。
在一个例子中,数据提取模块23,还用于:当加载一个待解析的符合所述文档模板的新文档时,根据存储的所述目标变量和变量路径的对应关系,由所述新文档中获取对应所述目标变量的目标数据。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述方法实施例所示流程中的各个步骤,其执行顺序不限制于流程图中的顺序。此外,各个步骤的描述,可以实现为软件、硬件或者其结合的形式,例如,本领域技术人员可以将其实现为软件代码的形式,可以为能够实现所述步骤对应的逻辑功能的计算机可执行指令。当其以软件的方式实现时,所述的可执行指令可以存储在存储器中,并被设备中的处理器执行。
例如,对应于上述方法,本说明书一个或多个实施例同时提供一种文档解析设备,该设备用于由待解析的文档中获取目标数据。该设备可以包括处理器、存储器、以及存储在存储器上并可在处理器上运行的计算机指令,所述处理器通过执行所述指令,用于实现如下步骤:
提取所述文档对应的文档模板中的目标变量;其中,所述文档模板中对应所述目标数据的位置设置所述目标变量作为占位符;
解析所述文档模板,得到所述目标变量的变量路径;
根据所述变量路径,由所述文档中获取对应所述目标变量的目标数据。
上述实施例阐明的装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本领域内的技术人员应明白,本说明书一个或多个实施例可提供为方法、系统、或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于服务端设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。