CN111913693A - 一种服务接口子类模板确定方法与系统 - Google Patents

一种服务接口子类模板确定方法与系统 Download PDF

Info

Publication number
CN111913693A
CN111913693A CN202010753686.7A CN202010753686A CN111913693A CN 111913693 A CN111913693 A CN 111913693A CN 202010753686 A CN202010753686 A CN 202010753686A CN 111913693 A CN111913693 A CN 111913693A
Authority
CN
China
Prior art keywords
template
subclass
data
node
extracted
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202010753686.7A
Other languages
English (en)
Other versions
CN111913693B (zh
Inventor
易超
张舒汇
贺赞贤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Shulide Technology Co ltd
Original Assignee
Beijing Shulide Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Shulide Technology Co ltd filed Critical Beijing Shulide Technology Co ltd
Priority to CN202010753686.7A priority Critical patent/CN111913693B/zh
Publication of CN111913693A publication Critical patent/CN111913693A/zh
Application granted granted Critical
Publication of CN111913693B publication Critical patent/CN111913693B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Between Computers (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供了一种服务接口子类模板确定方法与系统。通过该方法,首先根据用户选定的模板大类,按照优先级获得模板大类下的各个子类模板;利用各个子类模板对web页面中的待提取数据进行提取操作,获得针对各个子类模板的提取结果;根据提取结果和待提取数据所在的原始DOM块之间的结构相似性,对每个子类模板的适应性进行评估;选择适应性高于指预设阈值的预设数量个子类模板进一步分析,分析内容包括:key‑value饱和度、key值语义含量、key值重复度以及与预期结果的结构相似性;根据分析结果获得待推荐的子类模板。该方法提升子类模板选择的准确率与效率,可针对Web页面的结构推荐出数据提取效果最好的子类模板,进而提升数据提取的准确率与效率。

Description

一种服务接口子类模板确定方法与系统
技术领域
本发明涉及数据处理技术领域,特别是涉及一种服务接口子类模板确定方法与系统。
背景技术
在大数据时代,应用中存在大量有价值的数据,而提取不同应用中的数据并进行集成分析往往能产生更大的价值,应用之间数据开放和互联互通的需求越来越强。其中,Web应用由于其无需安装、访问便捷等原因已成为最主流的应用模式之一。目前已有一些方法对Web应用中的数据进行提取并开放,但随着Web应用的结构越来越复杂且多样化,现有的方法已经很难高效且普适性地适用于众多Web应用。
例如,针对动态Web页面,现有的API(Application Programming Interface,应用程序接口)生成方法无法适用,必须要用户人工辅助来进行数据提取。在相关技术中,可以通过模板提取动态Web页面中的数据,这一过程的首要步骤就是定位动态Web页面中的待提取数据,之后通过模板对待提取数据进行提取转换,而针对某一动态Web页面可以适用的模板有多个,如何选择最佳的模板实现数据的提取转换面临较大的困难。而随着数据开放的需求越来越高,API开发的需求量和及时性要求也在提高,无法处理动态页面这一问题严重拖累了API数据开放的效率。
发明内容
本申请实施例提供了一种服务接口子类模板确定方法与系统,可以解决在提取动态Web页面的数据的场景下,结构相似的Web页面存在多个可用模板时选取适用于当前页面的数据提取的最佳模板较为困难的问题,能有效提高API数据开放的效率。
本申请实施例第一方面提供了一种服务接口子类模板确定方法,包括:
根据用户选定的模板大类,按照优先级获得所述模板大类下的各个子类模板;
利用所述各个子类模板对web页面中的待提取数据进行提取操作,获得针对所述各个子类模板的提取结果;
根据所述提取结果和所述待提取数据所在的原始DOM块之间的相似性,对每个子类模板的适应性进行评估;
选择适应性高于指预设阈值的预设数量个子类模板;
对所述数量个子类模板进一步分析,分析内容包括:key-value饱和度、key值语义含量、key值重复度以及与预期结果的结构相似性;
根据分析结果获得待推荐的子类模板。
本申请实施例第二方面提供了一种服务接口子类模板确定系统,包括:
第一获得模块,用于根据用户选定的模板大类,按照优先级获得所述模板大类下的各个子类模板;
第二获得模块,用于利用所述各个子类模板对web页面中的待提取数据进行提取操作,获得针对所述各个子类模板的提取结果;
评估模块,用于根据所述提取结果和所述待提取数据所在的原始DOM块之间的相似性,对每个子类模板的适应性进行评估;
选择模块,用于选择适应性高于指预设阈值的预设数量个子类模板;
分析模块,用于对所述数量个子类模板进一步分析,分析内容包括:key-value饱和度、key值语义含量、key值重复度以及与预期结果的结构相似性;
第三获得模块,用于根据分析结果获得待推荐的子类模板。
通过本申请的服务接口子类模板确定方法,首先根据用户选定的模板大类,按照优先级获得所述模板大类下的各个子类模板。然后利用各个子类模板对web页面中的待提取数据进行提取操作,获得针对各个子类模板的提取结果;接着根据提取结果和待提取数据所在的原始DOM块之间的结构相似性,对每个子类模板的适应性进行评估。再选择适应性高于指预设阈值的预设数量个子类模板。然后对数量个子类模板进一步分析,分析内容包括:key-value饱和度、key值语义含量、key值重复度以及与预期结果的结构相似性;最后根据分析结果获得待推荐的子类模板。该方法提升子类模板选择的准确率与效率,可针对Web页面的结构推荐出数据提取效果最好的子类模板,进而提升数据提取的准确率与效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例示出的一种服务接口子类模板确定方法的流程图;
图2是本申请一实施例示出的模板规则框架的架构图;
图3是本申请一实施例示出的模板规则框架工作流程;
图4是本申请一实施例示出的一种模板应用过程示意图;
图5是本申请一实施例示出的一种编辑距离计算过程示意图;
图6是本申请一实施例示出的模板选择过程示意图;
图7是本申请一实施例示出的一种接口信息示意图;
图8是本申请一实施例示出的数据提取结果示意图;
图9是本申请一实施例示出的JSON结构转化结果示意图;
图10是本申请一实施例示出的DOM结构转化结果示意图;
图11是本申请一实施例示出的一种服务接口子类模板确定系统的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在大数据时代,应用中存在大量有价值的数据,而提取不同应用中的数据并进行集成分析往往能产生更大的价值,应用之间数据开放和互联互通的需求越来越强。其中,Web应用由于其无需安装、访问便捷等原因已成为最主流的应用模式之一。目前已有一些方法对Web应用中的数据进行提取并开放,但随着Web应用的结构越来越复杂且多样化,现有的方法已经很难高效且普适性地适用于众多Web应用。
由于Web应用的服务器端往往是完全不可见的、客户端部分(前端)总是可见的,本申请采用从Web应用的表现层(即页面)入手对数据进行提取的思路。而由于Web应用在表现层上是最为多样化的,本申请考虑为相似的Web页面提供通用模板进行数据提取的方法,通过丰富模板库进而覆盖多样化的Web页面,在这一过程中主要面临以下挑战:1)目标数据难以定位:需要提取的数据很可能不在当前操作的页面中,需要在操作流程的请求序列中快速准确地找到需要提取的数据;2)目标结构多样化:Web页面相互之间差异很大,细化会出现非常多子类,如果每个子类都手写解析代码,穷举覆盖到所有子类需要的代价过大;3)目标模板难以选择:结构相似的Web页面存在多个可用模板,需要选取适用于当前页面的数据提取的最佳模板。
数据开放通常基于信息系统的服务化来实现。对于Web应用,信息系统服务化的结果通常是若干个Web API。Web API是信息系统提供的数据访问接口,基于HTTP协议(HyperText Transfer Protocol,超文本传输协议),以XML(Extensible MarkupLanguage,可扩展标记语言)或者JSON(JavaScript Object Notation,JavaScript对象简谱)传输数据。
从系统架构模型的角度考虑,互联网信息系统可以分为移动应用/服务器(Application/Server,A/S)架构、浏览器/服务器(Browser/Server,B/S)架构与桌面客户端/服务器(Client/Server,C/S)架构三类。上述三种架构都包括客户端和服务器两部分。本申请主要针对的是B/S架构的情况:即客户端为浏览器,服务器为Web服务器,两者通过HTTP协议进行交互。
目前,相关技术中已针对B/S架构应用的数据开放选择从浏览器客户端入手,在云-端融合系统的资源反射机制及高效互操作技术的支持下,研发出了一款成熟的面向大数据的数据融合开放平台。在该平台的辅助下,用户可以较为高效的制作、部署、管理B/SAPI。但是随着数据开放的需求越来越高,为了打破信息孤岛和实现数据互操作,需要更大量的API支持来实现接口化。也因此导致API开发的需求量提高,及时性要求也在提高,越来越需要提升API开发的效率。
目前,基于该数据融合开放平台,效率最高且人工介入最少的生成API的方法是:用户通过该平台访问目标页面,圈选其中需要提取的数据所对应的DOM(Document ObjectModel,文档对象模型)块,然后选择一个模板大类,例如表格,指定必要的提取结果的字段名及每个字段相应的DOM节点等需求信息。在用户访问目标页面的过程中,平台会保留这个过程中发生的请求序列作为分析与API生成的基础,在用户指定待提取数据后,平台会在请求序列中取出目标页面对应的HTTP请求,然后根据模板对应的结构特点、字段、DOM节点的路径等信息生成一个API,该API的调用参数为HTTP请求的参数,返回结果为JSON结构的目标数据。在用户填写参数并调用API后,API会用这些参数向上述HTTP请求对应的URL(Uniform Resource Locator,统一资源定位符)地址发送HTTP请求,然后对返回结果进行相应的提取与重组,形成符合用户预期的、包含目标数据信息的JSON结构返回结果。
虽然API开发的需求越来越大,但是目前B/S API高效率的生成方法存在较为明显的问题,那就是无法处理动态页面。所谓动态页面主要包括以下几种情况:
一、目标数据动态加载:Web应用由于JS、Ajax、Frame等技术,很多网页上显示的数据都并不是在当前页面的请求结果HTML中。
二、关联数据动态加载:由于很多动态加载的技术,导致网页上很多内容在加载后有所变化。
三、数据依赖的结构信息复杂多变:相同长相不同结构:即可能在不同的网页上有显示相似的列表,但是实际其在原网页中的结构是不同的。
在上述动态页面情况下,现有的基于数据融合开放平台的API生成方法无法适用,必须要用户人工辅助来进行数据提取。而随着数据开放的需求越来越高,API开发的需求量和及时性要求也在提高,无法处理动态页面这一问题严重拖累了API数据开放的效率。
为了解决上述动态页面的问题,同时提高API制作的效率,本申请在现有的基于数据融合开放平台的API生成方法上进行改进,提升高效率的API生成方法所能适用的范畴,使其可以适用于动态页面。即:本申请所要解决问题是:用户(也可以理解为API用户)选定模板大类并指定需求信息后,如何根据模板大类正确高效生成API。这其实是一个模板的定义、匹配、使用、验证的问题,那么这个问题主要就包括以下三个方面:
一、目标数据定位;
二、模板解析;
三、模板选择匹配。
对应到基于模板规则的API生成问题,就是以下步骤:解析请求序列;确定哪个请求的哪个部分为需要转化的对象;分析需要转化的对象的组织结构以及语义特征,结合指定模板大类,基于模板匹配规则选定(或自定义)最优模板;根据选定模板以及转化对象生成API并验证。
然而,在上述第三方面进行模板选择匹配时,存在一个技术难点:目标模板难以选择,即结构相似的Web页面存在多个可用模板,需要选取适用于当前页面的数据提取的最佳模板较为困难。
具体而言,用户选择某一大类模板(例如列表)后,如果该大类模板存在多个子类模板,如何自动选择效果最好的子类模板进行匹配较为困难。Web页面的结构种类非常多,且这些种类之间的差异有时很小,对于大部分需求数据,存在很多可以适用于该数据对应的结构并且提取出结果的子类模板,但是不同子类模板的提取结果可能不尽相同,例如有的子类模板只能提取出时间信息,有的子类模板只能提取出标题信息,有的子类模板可以同时提取出时间、标题、链接等多个信息,显然应该选择最后一种可以同时提取多个信息的子类模板进行匹配。
在模板的选择匹配阶段,为了提升子类模板选择的准确率与效率,并尽可能发挥子类模板的能力,本申请提出了一种基于模板规则及反馈的子类模板选择方法,设计并实现了相关工具。对于每个模板大类所包含的若干个子类模板,在其加入模板库时为其分配一个相应优先级,该优先级会在每次模板被选中并成功匹配后进行相应的反馈调整,增加被选中子类模板的优先级,使其在之后的匹配中更容易被选中,从而增加优质模板的泛用性。每次选择子类模板时,都基于以下模板匹配规则:按照优先级依次评估每个子类模板的适应性,适应性高于某一阈值时认为匹配成功,否则选择所有子类模板中适应性最高的。其中,适应性的评估通过目标数据的结构与模板匹配结果数据结构的相似性决定。
针对上述第一方面目标数据定位和第二方面模板解析,可以采取已有技术实现,本申请只对第三方面模板选择匹配的过程进行改进,下面将介绍改进后的模板选择匹配的方法。
图1是本申请一实施例示出的一种服务接口子类模板确定方法的流程图。参照图1,本申请的模板匹配方法可以包括如下步骤:
步骤S11:根据用户选定的模板大类,按照优先级获得所述模板大类下的各个子类模板;
步骤S12:利用所述各个子类模板对web页面中的待提取数据进行提取操作,获得针对所述各个子类模板的提取结果;
步骤S13:根据所述提取结果和所述待提取数据所在的原始DOM块之间的相似性,对每个子类模板的适应性进行评估;
步骤S14:选择适应性高于指预设阈值的预设数量个子类模板;
步骤S15:对所述数量个子类模板进一步分析,分析内容包括:key-value饱和度、key值语义含量、key值重复度以及与预期结果的结构相似性;
步骤S16:根据分析结果获得待推荐的子类模板。
图2是本申请一实施例示出的模板规则框架的架构图。如图2所示,本申请设计了面向动态Web页面数据提取的模板规则框架,将从Web应用的表现层(即页面)入手,通过为相似的Web页面提供数据提取模板,来辅助用户实现动态Web页面的数据提取和开放。本申请的模板定义方法的执行主体可以是:数据融合开放平台,其中,由于结构相似的Web页面存在多个可用模板,为了根据页面特征以及模板结构选取适用于当前页面的最佳模板,本申请针对数据融合开放平台设计并实现了基于模板规则及反馈的子类模板选择工具。
模板选择工具能够从多个备选模板中,根据当前需求数据的结构与页面特征,准确给出最佳适配模板的备选列表提供给用户,以辅助用户快速实现动态Web页面的数据提取和开放工作。
本申请设计实现的面向动态Web页面数据提取的模板规则框架的工作流程从整体上看包括如图3所示的多个步骤,图3是本申请一实施例示出的模板规则框架工作流程。其中步骤1属于需求信息收集,步骤2、3属于模板数据定位,步骤4、5属于模板选择匹配,步骤6、7属于模板解析。本申请的步骤S11-步骤S16对应上述步骤4-步骤5。其中步骤1-步骤3和步骤6-步骤7可以采用已有技术实现,本申请对此不作限制。
在图3所示的步骤4中,在分析得到目标数据所在请求以及在请求中所在位置后,按照优先级将模板库中选定大类下的子类模板依次取出,适用于当前目标数据得到数据提取JSON结果,然后根据适用结果以及原始DOM块的结构相似性对每个模板的适应性进行评估。这里是一个循环的过程,每次循环分别做两步工作:模板适配和适应性评估。模板适配可以看作是一次解释器的工作,模板解析保存的中间形式作为代码,结合目标数据这一输入,直接给出输出结果。适应性评估是对数据提取的JSON结果以及原始DOM块进行结构的调整,使其可以适用于调整后的树的编辑距离算法,并应用算法得到结构相似度作为模板适应性的评估。
在图3所示的步骤5中,在上述步骤过后,已经可以得到每个模板的适应性评估结果。考虑到仅依靠树的编辑距离未必能选择出如用户所愿的最优结果,因此选择适应性高于指定阈值的预设数量个模板,进行进一步分析以辅助判断,分析的内容包括:JSON结果的key-value饱和度、key值语义含量、key值重复度以及与预期结果的结构相似性等,根据上述分析结果对模板的排序进行调整,给出最终推荐结果。最后根据子类模板的选择结果进行反馈,调整模板优先级。
通过本申请的模板匹配方法,首先根据用户选定的模板大类,按照优先级获得模板大类下的各个子类模板。然后利用各个子类模板对web页面中的待提取数据进行提取操作,获得针对各个子类模板的提取结果;接着根据提取结果和待提取数据所在的原始DOM块之间的结构相似性,对每个子类模板的适应性进行评估。再选择适应性高于指预设阈值的预设数量个子类模板。然后对数量个子类模板进一步分析,分析内容包括:key-value饱和度、key值语义含量、key值重复度以及与预期结果的结构相似性;最后根据分析结果获得待推荐的子类模板。该方法提升子类模板选择的准确率与效率,可针对Web页面的结构推荐出数据提取效果最好的子类模板,进而提升数据提取的准确率与效率。
在本申请中,模板库中保存有以XML格式的中间形式表示的自定义数据提取模板。在模板库中存在多个模板的情况下,用户可以在指定接口信息并选定模板大类后,根据图3中定位到的目标数据的格式结构等特征,选择出一个最适合提取该目标数据的模板,并遵循该模板定义的数据提取规则,将目标数据提取转化成JSON格式的返回结果。
在评估一个模板是否适合某一目标数据的提取时,首先要考虑整个模板从定义到使用的过程中存在哪些状态,然后选择一个易于评估并且能切实的表达模板效果的状态。在此基础上,可以结合HTML格式的目标数据对各个子类模板进行适应性的评估。
在本申请中,模板从定义到使用存在以下三个状态:模板原语源程序、XML中间形式以及适配某一目标数据得到的JSON结果,如图4所示,图4是本申请一实施例示出的一种模板应用过程示意图。首先对源程序进行评估较为困难,因为源程序是使用用户定义的模板原语进行编写的,要想对其评估需要对原语进行额外的设计,且模板原语的格式与目标数据的格式难以结合。其次对XML中间形式的评估效果优于源程序,XML中间形式完全保留源程序信息,且对XML的解析更为便捷容易,但是也正因中间形式是基于源程序获得的,所以其所包含的实际核心信息与源程序很相近,即还是一系列数据提取转化规则的形式化描述,而若将此规则和HTML格式的目标数据直接结合评估,仍旧不太合理。最后考虑对适配的JSON结果的评估,JSON结果所包含的信息和前两个状态都有较大区别,并不是数据提取转化规则,而是利用这一规则对某个目标进行操作后得到的结果,实际上,评估模板是否适合,最直接的评估方式就是对结果进行分析,从另一方面考虑,如果是人工评估模板是否适合,最常见的方式也是先利用模板对数据进行提取,再根据提取结果分析模板是否适合。
综上,本申请评估模板是否适合目标数据的思路是:结合模板适配的JSON结果与目标数据进行评估。那么,首先需要做的就是根据目标数据以及模板的XML中间形式,适配得到相应的数据提取JSON结果,然后根据JSON结果与目标数据评估当前模板的适应性,在对模板库内的可用模板都进行了适应性评估后,最后就是根据一定的规则推荐出合适的模板。
结合以上实施例,在一种实施方式中,本申请还提供了一种模板适配的方法。具体地,上述步骤S12可以包括:
对各个子类模板的XML格式的中间形式进行解析;
按照编写所述子类模板的模板原语的语义,从web页面中的待提取数据中提取数据;
对提取的数据进行拼接,生成JSON结果。
为了对模板适应性进行评估,首先需要根据目标数据以及模板的XML中间形式,适配得到相应的数据提取JSON结果。本申请通过一种模板原语编写获得模板,且通过该模板原语不需要生成可执行程序。从编译的角度考虑,模板原语解析是编译器的前端部分,根据中间形式与一个给定输入,进行解析给出输出就类似后端,或者应该说更接近解释器的后端而非编译器的后端。由于本申请所定义的模板原语不需要生成可执行程序,所以通常的编译器后端用到的代码优化之类的技术也并不适用于模板原语,因此在模板适配时可直接对中间形式进行解析,然后按照其语义,从指定的HTML目标数据中提取数据,并拼接成JSON结果返回即可。
模板原语适配的核心在于对五种基本类型Output、NameNode、ObjectNode、DOMNodeList、DOMNode以及其属性值的解析,这五种基本类型是可以在限定条件下进行嵌套的,所以步骤是一个递归的过程。需要注意的是,在转换成XML中间形式后,这五种基本类型都是XML中的节点tag。
结合以上实施例,在一种实施方式中,在对各个子类模板的XML格式的中间形式进行解析之前,需要先执行以下步骤:
加载所述子类模板中引用的类,并对所述子类模板的根节点进行解析。
在进入解析步骤之前,首先需要进行一些准备和先期工作,主要是两个方面:类的加载与根节点的解析。
类的加载就是指对于定义了class属性值的Output节点,在进行模板适配之前需要将其引用的类加载进来,具体来说就是在类库中根据引用的class名找到对应的目标类XML中间形式,然后用该中间形式替换掉引用了该类的Output节点,并遵循属性冲突时的优先级规则合并Output节点和类的属性值,最后将替换后的节点tag从Class改为Output、去掉其class属性即可。需要注意的是,类的加载也是一个递归的过程,需要逐级扫描整个模板的中间形式,尤其是加载的类中可能内部嵌套的Output节点也有引用其他类,都需要加载出来。
根节点的解析是指,一个合法的模板中间形式,其根节点一定是一个Template节点,在进入解析步骤之前,需要先确认Template的节点的存在,并解析其属性,按表1中的定义,Template节点需要解析的属性只有rootXpath,即模板解析的根节点的xpath,按照该xpath在HTML目标数据块中进行提取,并取其结果作为解析开始的根节点,与此同时创建返回结果的JSON,准备向其中添加结果数据。
表1
Figure BDA0002610832510000101
经过上述步骤后,即可开始核心的解析步骤。需要注意的是,根据表2中对五种基本类型的定义,可以知道中间形式中这五种基本类型的嵌套规律一定是如下Output-非Output-Output-非Output,如表3所示。因此递归中每一步解析针对这一嵌套中的两层进行,即解析某一个Output同时解析其所有子节点,下一步递归中解析其所有的孙子节点,而在解析过Template后,接下来需要解析的一定是Template下的Output节点,因为根据表2的定义,Template下只能有Output节点,这刚好作为递归调用的起始。在每一次的递归调用中,输入参数应该是一个Output节点和当前解析到的HTML节点,输出应该是该Output节点解析后的到的JSON结果,随着递归调用的逐级返回逐渐构筑出整个返回结果JSON。
表2
Figure BDA0002610832510000111
表3
Figure BDA0002610832510000112
根据本申请使用的模板原语定义的语义,每一次的递归调用中进行的工作主要是以下几步:
(1)首先按照优先级找出应该选用的、即按xpath路径可以找到目标HTML节点的NameNode和DOMNode(或ObjectNode、DOMNodeList)。
(2)按照Output节点的name属性,解析获取JSON节点的key值,例如name属性为NameNode.Text时,按选出的NameNode节点的xpath路径提取相应HTML节点,将其文本内容作为key值。
(3)按照选出节点的类型为DOMNode、ObjectNode、DOMNodeList中的哪一种分别解析相应的JSON节点value值,例如DOMNode直接按xpath和target提取相应内容作为value,ObjectNode创建一个JSON对象作为value,并递归解析其下的Output节点,解析结果加到JSON对象中。
(4)如果Output节点duplicate属性值为1,则重复上述两步,将路径结果依次生成相应的JSON节点。
经过上一节的模板适配,可以得到某一模板针对某一目标数据提取得到的JSON结果。接下来就是根据提取得到的JSON结果与目标数据评估该模板对该目标数据的适应性。
结合以上实施例,在一种实施方式中,本申请还提供了一种对每个子类模板的适应性进行评估的方法,具体地,上述步骤S13可以包括以下步骤:
根据所述提取结果和所述待提取数据所在的原始DOM块之间的结构和内容的相似性,对每个子类模板的适应性进行评估。
通常情况下,适应性好的模板意味着适配得到的JSON结果符合预期,即可以把目标需求数据的每一部分都结构化的提取出来。因此适应性评判的最重要标准是:适配提取得到的结果是否把目标数据原始结构中的内容都结构化的提取出来,即比较JSON结果与用户指定的DOM块的结构和内容的相似性。
结合以上实施例,在一种实施方式中,本申请还提供了一种对每个子类模板的适应性进行评估的方法,具体地,上述步骤S13可以包括以下步骤:
基于树的编辑距离获得所述提取结果和所述待提取数据所在的原始DOM块之间的相似性;
根据所述相似性,对每个子类模板的适应性进行评估。
由于需要比较的相似性既包括内容也包括结构,就是说不仅要把目标数据中的内容提取出来,还需要达到一定的结构相似性,并且JSON结构本身是存在类似树的层级结构的、DOM本身就是树结构,因此本申请考虑基于树的编辑距离来计算JSON结果和DOM块的相似性。
结合以上实施例,在一种实施方式中,基于树的编辑距离获得所述提取结果和所述待提取数据所在的原始DOM块之间的相似性,包括:
将所述提取结果进行结构转化,获得可计算编辑距离的第一树结构;
将所述待提取数据所在的原始DOM块进行结构转化,获得可计算编辑距离的第二树结构;
将所述第一树结构和所述第二树结构之间的编辑距离作为相似性。
在本申请中,树的编辑距离不适用于不同结构类型的树,因为采用树的编辑距离时要求树中每个节点的标签label来自一个有限字符集Σ,且存在一个函数cost:(Σ_λ×Σ_λ)\(λ,λ)→R定义了将某个节点的标签由x变为y的代价,如果节点的标签本身来自两个不同集合,那么代价函数的定义会遇到很大困难,比如数字1变成数字2和数字1变成字母a的代价无法均衡之类的问题。因此本申请进行了结构的转化,将JSON这一类似树的结构和DOM树统一为一种可计算编辑距离的树T,然后计算JSON结果转化的T1和DOM树转化的T2之间的编辑距离作为结果。
结合以上实施例,在一种实施方式中,所述待提取数据所在的原始DOM块的结构复杂程度高于提取结果的结构复杂程度;
将所述提取结果进行结构转化,获得可计算编辑距离的第一树结构,包括:
保留所述提取结果所拥有的信息,将其转化为可计算编辑距离的第一树结构;
将所述待提取数据所在的原始DOM块进行结构转化,获得可计算编辑距离的第二树结构,包括:
对所述待提取数据所在的原始DOM块所拥有的信息进行删减,获得可计算编辑距离的第二树结构。
比较JSON结构与DOM树结构,很明显DOM树的结构复杂程度高于JSON结构,包括以下几个方面:1)DOM树的节点可以拥有子节点,节点内文本,以及节点属性,而JSON结构没有节点属性这一概念;2)DOM树的节点类型很多,包括ul、table、form等123种,而JSON结构的节点类型一般只包括JsonObject、JsonArray、JsonPrimitive三种(忽略JsonNull);3)DOM树的节点可以既有节点内文本,又有子节点,而JSON结构的节点要么是JsonPrimitive,即一个值,要么是JsonObject或JsonArray,即可以有子节点。在这样的情况下,为了达成结构的一致性,可选择的方法一种是增加JSON结构的复杂程度,一种是简化DOM树结构的复杂程度。但是由于JSON是提取的结果内容,无从增加额外信息,因此本申请选择简化DOM树结构的复杂程度。其核心思路就是:在尽可能保留JSON结构所拥有的信息的情况下,将其转化为树结构,然后对DOM树的信息进行删减,规约成上述树结构,记为JDTree,整体思路如图5所示,图5是本申请一实施例示出的一种编辑距离计算过程示意图。
在本申请中,参照图5,对JSON结果进行结构转化可以得到JDTree树T1,即第一树结构;对DOM块进行结构转化可以得到JDTree树T2,即第二树结构。
结合以上实施例,在一种实施方式中,所述提取结果为JSON格式;将所述提取结果进行结构转化,获得可计算编辑距离的第一树结构,包括:
将每一个JSON节点转化为一个树中的节点,并将所述JSON节点的类型记录在树的节点中;
若所述JSON节点为JsonPrimitive,将JsonPrimitive的值记录在相应树节点的value值中;
若所述JSON节点为JsonObject,将其包括的每个JsonElement对应的树节点作为自身树节点的子节点;
若JSON节点为JsonArray,取其包括的第一个JsonElement,将其对应的树节点作为自身节点,并将其类型转为JsonArray。
按照上述规则,转化得到的第一树结构的每个节点除父子节点外,包括两个属性值:节点类型(取值为JsonArray、JsonObject、JsonPrimitive之一)和value(字符串)。
下面介绍结构归一化的具体方法,首先考虑对JSON结果的转化。对于JSON结构,可以简单的进行如下形式化定义:一个合法JSON是一个JsonElement(JSON节点);一个JsonElement可能是JsonObject(JSON对象)、JsonArray(JSON数组)、JsonPrimitive(JSON值)、JsonNull(空)之一;一个JsonObject包括一系列key:JsonElement,key是不重复字符串;一个JsonArray包括一系列JsonElement。在上述定义下,JSON结构转化的方法如下:
每一个JSON节点转化为一个树中的节点,并将JSON节点的类型(JsonArray、JsonObject、JsonPrimitive)记录在树的节点中。
如果JSON节点为JsonPrimitive,则将该JsonPrimitive的值记录在相应树节点value中,并且该节点一定没有子节点。
如果JSON节点为JsonObject,则将其包括的每个JsonElement对应的树节点作为自身树节点的子节点。
如果JSON节点为JsonArray,则取其包括的第一个JsonElement,将其对应的树节点作为自身节点,并将其类型转为JsonArray。
按照上述规则,转化得到的JDTree每个节点除父子节点外,包括两个属性值:节点类型(取值为JsonArray、JsonObject、JsonPrimitive之一)和value(字符串)。
结合以上实施例,在一种实施方式中,将所述待提取数据所在的原始DOM块进行结构转化,获得可计算编辑距离的第二树结构,包括:
针对所述待提取数据所在的原始DOM块,依次进行文本节点的合并、同结构节点的判定与合并、DOM树结构的转化以及转化结果去冗余,获得可计算编辑距离的第二树结构。
对于DOM树,需要将其转化为上述JDTree结构,转化方法分为四个阶段,分别完成如下工作:文本节点的合并、同结构节点的判定与合并、DOM树结构的转化以及转化结果去冗余。
(1)文本节点的合并:由于HTML中大量使用诸如p、a等标签的节点分割本身完整的一串文本,因此对于同一个父节点下的一系列类似的文本节点,将其中的文本内容提取出来,合并放入父节点自身的文本中。
(2)同结构节点的判定与合并:为了对DOM节点进行转化,需要将其节点类型归为JDTree中的三种节点类型之一,而对于JsonArray这一类型,DOM树中本身是没有相应的明确的数组节点类型的,因此需要对DOM树进行扫描,判定哪里存在着数组,进行标记并保留数组的第一项,并在后面将这些标记的DOM节点转化为JsonArray类型的JDTree节点。判定存在数组的标准就是,在同一个父DOM节点下的子DOM节点中,如果有多个子DOM节点结构相似,则判定这些子DOM节点组成一个数组。两个DOM节点结构相似的判定标准为:其子DOM节点一一对应的结构相似(递归地判定子DOM节点相似);DOM节点的类型(指div、form、table等)相同;DOM节点都是或不是JsonArray节点;DOM节点属性列表的key值重合度较高。
(3)DOM树结构的转化:将DOM树转化为JDTree,整体上转化思路为:
将DOM树的节点属性值(除input节点的value属性)抛弃。
在本申请中,如果关键数据是来自input节点的value值,则只有input节点有文本内容且其文本内容取其value值,否则文本内容是指节点自身的Text。
对于DOM树的每个节点,如果其子节点转化的JDTree节点都为空且自身无文本内容,则转化为空。
对于DOM树的每个节点,如果其子节点转化的JDTree节点都为空且自身有文本内容,则转化为JsonPrimitive类型的JDTree节点,其value值为文本内容。
对于DOM树的每个节点,如果其子节点转化的JDTree节点并不都为空,则转化为JsonObject类型的JDTree节点(需要注意由于input节点无法设置子节点,因此这种情况下不存在input节点)。将该DOM节点的子节点所转化的JDTree节点依次加入该节点对应的JDTree节点的子节点中,并将该DOM节点的文本内容转化为JsonPrimitive类型的JDTree节点,也加入到该节点对应的JDTree节点的子节点中。
被标记为数组的DOM树节点转化的JDTree节点类型设置为JsonArray。
(4)转化结果去冗余:通过上述方式转化出的JDTree可能存在多层无意义JsonObject嵌套的情况,即因为某一层有一个有意义的节点X,而X的父节点以及祖父节点其实都是没有信息的,但是因为X的存在所以其父节点与祖先节点都未被删除,而是被转化成了只有一个子节点的JsonObject类型JDTree节点,这样X的父节点就是冗余的,对整个结果JDTree树进行扫描,删除所有这样的冗余节点。
在本申请中,考虑到计算的树对象可能是DOM树这种较为复杂或者说较大的树,因此本申请基于O(|T_1||T_2|×min(depth(T_1),leaves(T_1))×min(depth(T_2),leaves(T_2)))复杂度的算法实现。
在本申请中,在根据模板的适应性,推荐出适合该目标数据的模板时,考虑到整个模板从定义到使用过程中还存在其他对评估模板效果的有益的信息,且仅基于树的编辑距离这一结果进行模板选择也不一定可以保证准确率,所以本申请进行一些额外信息的采集与计算,结合这些额外信息和适应性给出最终的模板推荐结果。在该过程中,模板适应性仍旧是整个模板选择过程的基础,即先对模板库内所有模板计算其适应性,然后选择适应性最高的预设数量个模板,对其计算额外信息,并根据额外信息的结果与适应性综合评判预设数量个模板的效果顺序。通过对平台中现有的数据提取结果进行观察与总结,本申请得出的额外信息计算主要包括以下几个方面:
(1)JSON结果的key-value饱和度:即JSON中key值和value值的比例,如果存在较多层无意义的JSON数组、对象,那么可能导致JSON中key值与value值比例较大,这样的结果是不合适的。
(2)JSON结果的key值语义含量:即JSON结果中key值是否包括较多的无语义值,例如tr之类的HTML标签。
(3)JSON结果的key值重复度:即JSON结果中是否有较多重复的key值出现,这意味着可能有合理的列表存在。
(4)JSON结果与预期结果的结构相似性:在模板定义之初,JSON结果与预期结果的结构相似性是为解决对某一页面上某一数据提取而定义的,那么可以在定义时结合这一目标数据给出一个该模板正常运行情况下应该得到的JSON结果结构,将该结果作为模板的示例结果保存,比较本次JSON结果与示例结果的结构相似性。
结合以上实施例,在一种实施方式中,本申请的模板匹配方法还可以包括:
为每一个模板大类下的各个子类模板分配带有默认值的优先级;
按照优先级获得所述模板大类下的各个子类模板,包括:
按照优先级的默认值由高到低的顺序,获得所述模板大类下的各个子类模板;
对每个子类模板的适应性进行评估,包括:
按照优先级的默认值由高到低的顺序,对每个子类模板的适应性进行评估。
结合以上实施例,在一种实施方式中,本申请的模板匹配方法还可以包括:
在所述待推荐的子类模板完成对web页面中的待提取数据的提取操作后,提升所述待推荐的子类模板的优先级的默认值。
在经过上述步骤后,已经得到了推荐的模板,但是模板库中的模板本身的质量是存在差异的,例如存在泛用性和灵活性等方面的差异,示例地,某一个表格类模板A的编写者水平较高,考虑到了较多的情况,高效利用了节点优先级等可选属性使该模板既可以适用于thead+tbody类型的表格,也可以适用于没有thead只有tbody的表格,而另一个表格类模板B则只能处理thead+tbody类型的表格,那么为了提高模板选择匹配的效率和效果,应该让A模板比B模板更容易或者说更优先被选中。基于上述考虑,本申请设计了基于优先级的带反馈的子类模板选择方法,核心思想如下:基于优先级是指为每一个模板库中的模板分配一个带有默认值的优先级,在遍历计算整个模板库中模板时按照优先级顺序计算适应性,适应性高于指定阈值的模板即被选中。带反馈是指对于某一目标数据进行处理完成后,对于该过程中选择的模板,提升其优先级,以便后续更易于被选中,重复这一优先级的调整过程,以使高质量模板在选择过程中排在优先级更高的位置,如图6所示,图6是本申请一实施例示出的模板选择过程示意图。
本申请的模板规则框架,部分与云-端融合系统的资源反射机制及高效互操作技术的支持下研发出的数据融合开放平台有关,主要是在用户指定接口信息过程中提取框架所需的输入信息。如前所述,数据融合开放平台能够对B/S架构的系统重构出业务数据的接口,为数据开放提供高效的平台支撑。但该数据融合开放平台在对动态Web页面的处理上存在不足,需要用户人工介入,本申请的模板匹配方法正好能对其进行补充,以提高数据开放的效率。
数据融合开放平台又细分为生成、管理、运行三个子平台,其中本申请所实现的框架的输入信息都是来自用户在生成平台上访问目标页面和指定接口信息的过程中所提取的。为便于对接数据开放融合,本申请实现的系统主要是使用的Java语言,并在具体的实现过程中,使用Flex搭建词法分析器、Yacc搭建语法分析器。其中用Flex+Yacc使用C语言实现。
在本申请中,子类模板选择匹配的目的是基于索引检索定位到的目标数据,为其选择一个最合适的数据提取模板,这个子类模板选择匹配是在索引检索定位之后紧接着进行的,输入主要是检索定位到的目标请求,目标数据在目标请求返回结果中的所在路径,以及为了检测模板适应性而额外需要的一些信息包括用户指定数据DOM块等,给出的输出是对于模板的推荐结果以及相应的数据提取JSON结果。需要注意的是,本申请所实现的子类模板选择都是在目标请求返回结果格式为HTML的前提下进行的。
在本申请中,对一个模板进行适配的整体过程如下:1)获取HTML返回结果;2)从模板库中加载XML中间形式;3)加载模板中使用到的类;4)模板根节点的rootXpath属性解析;5)依次解析根节点下的每个Output节点,生成JSON结果返回。在这个过程中需要解析HTML以及XML,其中XML的解析仍旧使用dom4j,而对HTML返回结果的解析以及基于xpath的DOM节点选取使用jsoup结合JsoupXpath完成,JsoupXpath是一个基于jsoup结构完成的xpath选取工具。
在本申请中,进行模板适配和数据提取可以直接基于用户指定数据过程中的数据融合开放平台留存的请求序列中的目标请求返回结果进行。
在本申请中,由于在获得实际的适配JSON结果之前,并不知道其结构,因此并不能使用Gson中最常用的、基于预先定义好的Java类进行JSON结果生成的方法,而是采用一种Gson提供的流式JSON生成方法。这种流式生成方法基于JsonWriter类,如果需要写入一个JSON对象,就调用beginObject加入一个{,然后构建JSON对象的内容,最后调用endObject加入一个},最后将整个JSON构建完毕后调用flush写到输出中即可。另外由于在HTML节点中,其文本内容即Text一定是字符串,但是在JSON的值JsonPrimitive中,其还有一个常用类型就是数值型。因此在对DOMNode进行处理生成JSONPrimitive值写入流中之前,对该DOMNode所提取的value值进行一个简单地判断,即如果能转为数字则作为数值型JsonPrimitive写入,否则作为字符串型JsonPrimitive写入。
在实际实施时,为了减少不必要的判断,在为了加载类而扫描整个模板的过程中,可以把所有节点的nodeType属性都转化成xpath属性,如此就不需要判断这两个属性哪个存在。
图7是本申请一实施例示出的一种接口信息示意图。图8是本申请一实施例示出的数据提取结果示意图。针对图7所示示例的目标数据定位结果,提取得到的返回JSON结果如图8所示,其中code字段为适配燕云平台所需要的一个表示返回结果是否正常的字段,table中为实际提取出的表格数据。
在获得上一节给出的JSON结果后,需要根据这一JSON结果和用户指定DOM结构对模板的适应性进行评估。首先需要做的是对JSON结构和DOM树结构的归一化。在前文给出的对JSON结构的形式化定义的基础之上,由于本申请所需要转化的JSON都是适配提取结果(如图8所示),因此还具有如下额外性质:1)不存在JsonNull;2)JsonArray内的一系列JsonElement都是同样结构的;3)每个要转化的JSON都是一个JsonObject,且其中包含两个key,第一个key是code,第二个由模板决定,具体的数据提取结果都保存在第二个key对应的JsonElement中。在上述性质下,对JSON结构转化方法中的一些判断细节都可以省略,包括JsonNull的判断、JsonElement下节点不同结构时的处理等,同时在转化之前,要先去掉返回结果中的code值,同时将输入改为除code外的另一个节点。在本申请的具体实现中,由于无法预知JSON结果的结构,因此类似上述JSON生成过程,使用流式方式读取JSON结果。经过上述修改后,对于图8中的JSON结构进行转化的结果如图9所示,每个节点中两个值分别表示其内容value和节点类型type。图9是本申请一实施例示出的JSON结构转化结果示意图。
对于DOM树,将其转化为上述JDTree结构的过程分为四个阶段,其中文本节点合并时,通过对HTML标签的定义,筛选出来的需要进行合并的文本节点包括:a,abbr,acronym,address,b,big,blockquote,br,del,em,h1,h2,h3,h4,h5,h6,hr,i,ins,mark,p,q,small,span,strong,sub,sup,tt,u[39]。
同结构节点的判定与合并中,通过对实际项目中相似节点的观察,修改了同结构节点判定合并算法中对同结构节点的一些判定标准,主要是增加了一票否决的权利,包括节点标签不同、子节点数量不同、节点是否为合并节点不同等,只要发生了就判定节点不同构,实现上的修改就是令这几个判定条件成立时,结构差距值diff直接加上一个大于threshold的值。另外为了提高算法的效率,考虑对于中间结果进行缓存,即合并节点的过程是递归调用的,每次递归调用中都会调用isSimilar来判断子节点是否相似,而isSimilar中又可能会递归调用判断其子节点是否相似,那么对于每对节点,isSimilar都被调用了多次,因此增加一个数组缓存isSimilar的调用结果,每次调用时检测是否已经缓存结果了,缓存了的话直接返回。
在本申请中,jsoup解析的DOM结构存在Element和TextNode两种节点,对于DOM树转化为JDTree的过程需要进行一定改进,即当前节点下被Element分隔开的多个TextNode,应该被分别转化成多个JsonPrimitive类型的JDTree节点。
针对图7所示示例,用户指定的DOM块转换的JDTree结构如下图10所示,为节省空间,将节点Primitive简写为P。图10是本申请一实施例示出的DOM结构转化结果示意图。
在进行过上述的转化后,得到的JDTree有一处不符合树编辑距离中对树结构的要求,即树中每个节点的标签label来自一个有限字符集Σ。JDTree的每个节点有两个标签,且其中标签value为字符串,并非来自有限字符集。因此对代价函数cost进行简单的改进以适应JDTree:代价函数的计算结果取两个标签各自代价计算结果之和,在标签type(节点类型)上的代价函数为cost=(A.type!=B.type),在标签value上的代价函数为cost=(A.value!=B.value)。即value字符串值不同则代价+1,节点类型不同则代价+1,空节点的type与所有type不同、value与所有value不同。在此定义下,上图中两棵JDTree的编辑距离为12。
在得出模板库中每个模板针对目标数据的适应性后,需要以该适应性为基础,结合额外信息给出推荐模板。对于前文中给出的额外信息的计算,使用流式的方式读取数据提取结果进行分析,在对整个结果扫描一遍的过程中,分别计算出JSON中的key值个数、value值个数、key值为123种HTML标签之一的个数、非重复key值个数等,然后在扫描完成后给出所需额外信息的值。另外为了减少扫描次数,提高整体效率,这些数值的计算与JSON结果转化为JDTree一同进行,即在一次扫描中完成这两个任务。
同时对于本申请设计的带优先级反馈的子类模板选择,考虑到这里的模板可能会有新的添加,模板适配是按照优先级依次适配,并且每次模板优先级调整都应该是向高或者向低移动若干步,所以不使用准确的数字来表示优先级,而用双向链表表示模板的优先级顺序。即同一个大类下的模板,以其模板名作为节点组成双向链表,链表的头表示最高优先级的模板,链表的尾表示最低优先级的模板,每次模板选择都从链表的头开始依次适配,以大类+模板名(不重复的)就可以在模板库中找到该节点代表的模板,计算出相应的适应性,如果适应性高于阈值则将该链表节点暂时保存到选取结果数组中,直到选出五个为止。如果有新的模板加入,先让其拥有最高优先级即加入到双向链表的头,随后如果该模板效果不好,会随着每次适配的反馈结果而逐渐降到低优先级。每次最后推荐出来的预设数量个模板选择结果,在结合额外信息等给出最终的推荐排序后,将其优先级均提升1级,即在链表中向前移动一个位置,由于是双向链表,所以可以在O(1)时间内完成移动。
计算出树编辑距离后,由于阈值不太好确定,如果直接用树的编辑距离与阈值比较作为是否选定的标准,由于同样是表格,可能有的表格有20项,有的表格有100项,对于前者编辑距离20的结果和对于后者编辑距离是100的结果很可能是适应性相近的结果,但其编辑距离却差了五倍,因此实际上使用一个相对结果更好。本申请使用的就是编辑距离/用户指定DOM块转化的JDTree的节点信息量作为适应性是否超过阈值的评估指标,这里所谓“用户指定DOM块转化的JDTree的节点信息量”意思就是该DOM块实际包含的信息数量,以该JDTree与一颗空树的编辑距离作为度量,显然这个度量不需要再运行树的编辑距离计算,而是直接扫描一遍整棵树,累计每个节点与空节点的编辑距离之和即可。这个节点信息量越多、即DOM块信息量越大,那么优秀JSON结果与DOM块之间的编辑距离也可能会越大,因此以该比值作为实际模板适应性的评估指标较为合适,这里把这个比值记为Per1。对于不同的大类,本申请结合实际模板适配结果以及大类的格式特征,给定不同的模板选定阈值,同时可以通过配置文件修改该阈值。
假设已经按照优先级顺序对模板库进行了遍历,并取出了五个Per1值高于阈值的选定模板,接下来应该是结合额外信息对其进行推荐排序。本申请中给出的三种额外信息,其最终取值其实都是一个比值。key-value饱和度是key值数量和value值数量的比例,key值语义含量是HTML标签的key值数量与总key值数量的比例,key值重复度是非重复key值数量与总key值数量的比例。而此处出现的四个比值中,除第二个即key-value饱和度外显然都应该是在0-1之间取值,为了简便起见,把key-value饱和度改为key值数量/(key值数量+value值数量)使其取值范围也变为0-1,同时也保留了其原有的饱和度的含义,将修改后的四个比值依次记为Per1~Per4。那么根据这四个比值进行模板推荐排序的话,每个值都越低越好,因此排序依据就是下面这个式子的结果λ1*Per1+λ2*Per2+λ3*Per3+λ4*Per4越小越好,其中λ1234分别为每个值的权重,默认为λ1=1,λ2=1/3,λ3==1/3,λ4=1/3,且同样可以通过配置文件进行修改。
对于图7所示示例的目标数据定位结果,其DOM块所转化的JDTree的节点信息量为23,在模板适配中,其Per1-4的计算结果分别为0.478,0.502,0.019,0.068,综合评定为效果较好的模板,推荐给用户,并且将该表格模板的优先级提升。
模板选择匹配阶段的目的是根据用户指定的接口信息以及定位到的HTML格式目标数据,在模板库中推荐出最适合解决该需求的模板,并给出提取结果。为此,本申请首先实现了模板适配与数据提取,遵循使用的模板原语定义的语义,按照模板的XML中间形式所描述的数据提取规则,对目标数据进行提取并转化为JSON结果。其次,本申请实现了基于树编辑距离的模板适应性计算,将JSON提取结果与目标数据DOM结构归一化为一种JDTree,然后计算两者的树编辑距离作为JSON提取结果与目标数据DOM结构的相似度,以此相似度结构目标数据DOM结构的信息量来度量该模板对该需求的适应性。最后,本申请实现了基于适应性的子类模板选择,对模板库中的模板按优先级计算适应性,高于阈值的预设数量个模板被选出,然后根据其各自的JSON提取结果计算key-value饱和度等额外信息,结合额外信息与适应性加权给出最终模板推荐排序结果,并调整相应的优先级。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
基于同一发明构思,本申请还提供了一种服务接口子类模板确定系统1100。图11是本申请一实施例示出的一种服务接口子类模板确定系统的结构示意图。参照图11,本申请的服务接口子类模板确定系统1100可以包括:
第一获得模块1101,用于根据用户选定的模板大类,按照优先级获得所述模板大类下的各个子类模板;
第二获得模块1102,用于利用所述各个子类模板对web页面中的待提取数据进行提取操作,获得针对所述各个子类模板的提取结果;
评估模块1103,用于根据所述提取结果和所述待提取数据所在的原始DOM块之间的相似性,对每个子类模板的适应性进行评估;
选择模块1104,用于选择适应性高于指预设阈值的预设数量个子类模板;
分析模块1105,用于对所述数量个子类模板进一步分析,分析内容包括:key-value饱和度、key值语义含量、key值重复度以及与预期结果的结构相似性;
第三获得模块1106,用于根据分析结果获得待推荐的子类模板。
可选地,所述第二获得模块1102包括:
解析模块,用于对各个子类模板的XML格式的中间形式进行解析;
第一提取子模块,用于按照编写所述子类模板的模板原语的语义,从web页面中的待提取数据中提取数据;
生成模块,用于对提取的数据进行拼接,生成JSON结果。
可选地,所述装置1100还包括:
加载模块,用于加载所述子类模板中引用的类,并对所述子类模板的根节点进行解析。
可选地,所述评估模块1103包括:
第一评估子模块,用于根据所述提取结果和所述待提取数据所在的原始DOM块之间的结构和内容的相似性,对每个子类模板的适应性进行评估。
可选地,所述评估模块1103包括:
第二提取子模块,用于基于树的编辑距离获得所述提取结果和所述待提取数据所在的原始DOM块之间的相似性;
第二评估子模块,用于根据所述相似性,对每个子类模板的适应性进行评估。
可选地,所述第二提取子模块包括:
第一转化子模块,用于将所述提取结果进行结构转化,获得可计算编辑距离的第一树结构;
第二转化子模块,用于将所述待提取数据所在的原始DOM块进行结构转化,获得可计算编辑距离的第二树结构;
第一确定子模块,用于将所述第一树结构和所述第二树结构之间的编辑距离作为相似性。
可选地,所述待提取数据所在的原始DOM块的结构复杂程度高于提取结果的结构复杂程度;所述第一转化子模块包括:
第三转化子模块,用于保留所述提取结果所拥有的信息,将其转化为可计算编辑距离的第一树结构;
所述第二转化子模块包括:
第四转化子模块,用于对所述待提取数据所在的原始DOM块所拥有的信息进行删减,获得可计算编辑距离的第二树结构。
可选地,所述第一转化子模块包括:
第五转化子模块,用于将每一个JSON节点转化为一个树中的节点,并将所述JSON节点的类型记录在树的节点中;
记录模块,用于若所述JSON节点为JsonPrimitive,将JsonPrimitive的值记录在相应树节点的value值中;
第二确定子模块,用于若所述JSON节点为JsonObject,将其包括的每个JsonElement对应的树节点作为自身树节点的子节点;
第三确定子模块,用于若JSON节点为JsonArray,取其包括的第一个JsonElement,将其对应的树节点作为自身节点,并将其类型转为JsonArray。
可选地,所述第二转化子模块包括:
第一获得子模块,用于针对所述待提取数据所在的原始DOM块,依次进行文本节点的合并、同结构节点的判定与合并、DOM树结构的转化以及转化结果去冗余,获得可计算编辑距离的第二树结构。
可选地,所述装置1100还包括:
分配模块,用于为每一个模板大类下的各个子类模板分配带有默认值的优先级;
所述第一获得模块1101包括:
第二获得子模块,用于按照优先级的默认值由高到低的顺序,获得所述模板大类下的各个子类模板;
所述评估模块1103包括:
第三评估子模块,用于按照优先级的默认值由高到低的顺序,对每个子类模板的适应性进行评估。
可选地,所述装置1100还包括:
提升模块,用于在所述待推荐的子类模板完成对web页面中的待提取数据的提取操作后,提升所述待推荐的子类模板的优先级的默认值。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
最后,还需要说明的是,在本申请中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种服务接口子类模板确定方法与系统,进行了详细介绍,本申请中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (12)

1.一种服务接口子类模板确定方法,其特征在于,包括:
根据用户选定的模板大类,按照优先级获得所述模板大类下的各个子类模板;
利用所述各个子类模板对web页面中的待提取数据进行提取操作,获得针对所述各个子类模板的提取结果;
根据所述提取结果和所述待提取数据所在的原始DOM块之间的相似性,对每个子类模板的适应性进行评估;
选择适应性高于指预设阈值的预设数量个子类模板;
对所述数量个子类模板进一步分析,分析内容包括:key-value饱和度、key值语义含量、key值重复度以及与预期结果的结构相似性;
根据分析结果获得待推荐的子类模板。
2.根据权利要求1所述的方法,其特征在于,利用所述各个子类模板对web页面中的待提取数据进行提取操作,获得针对所述各个子类模板的提取结果,包括:
对各个子类模板的XML格式的中间形式进行解析;
按照编写所述子类模板的模板原语的语义,从web页面中的待提取数据中提取数据;
对提取的数据进行拼接,生成JSON结果。
3.根据权利要求2所述的方法,其特征在于,在对各个子类模板的XML格式的中间形式进行解析之前,所述方法还包括:
加载所述子类模板中引用的类,并对所述子类模板的根节点进行解析。
4.根据权利要求1所述的方法,其特征在于,根据所述提取结果和所述待提取数据所在的原始DOM块之间的相似性,对每个子类模板的适应性进行评估,包括:
根据所述提取结果和所述待提取数据所在的原始DOM块之间的结构和内容的相似性,对每个子类模板的适应性进行评估。
5.根据权利要求1所述的方法,其特征在于,根据所述提取结果和所述待提取数据所在的原始DOM块之间的相似性,对每个子类模板的适应性进行评估,包括:
基于树的编辑距离获得所述提取结果和所述待提取数据所在的原始DOM块之间的相似性;
根据所述相似性,对每个子类模板的适应性进行评估。
6.根据权利要求5所述的方法,其特征在于,基于树的编辑距离获得所述提取结果和所述待提取数据所在的原始DOM块之间的相似性,包括:
将所述提取结果进行结构转化,获得可计算编辑距离的第一树结构;
将所述待提取数据所在的原始DOM块进行结构转化,获得可计算编辑距离的第二树结构;
将所述第一树结构和所述第二树结构之间的编辑距离作为相似性。
7.根据权利要求6所述的方法,其特征在于,所述待提取数据所在的原始DOM块的结构复杂程度高于提取结果的结构复杂程度;
将所述提取结果进行结构转化,获得可计算编辑距离的第一树结构,包括:
保留所述提取结果所拥有的信息,将其转化为可计算编辑距离的第一树结构;
将所述待提取数据所在的原始DOM块进行结构转化,获得可计算编辑距离的第二树结构,包括:
对所述待提取数据所在的原始DOM块所拥有的信息进行删减,获得可计算编辑距离的第二树结构。
8.根据权利要求6所述的方法,其特征在于,将所述提取结果进行结构转化,获得可计算编辑距离的第一树结构,包括:
将每一个JSON节点转化为一个树中的节点,并将所述JSON节点的类型记录在树的节点中;
若所述JSON节点为JsonPrimitive,将JsonPrimitive的值记录在相应树节点的value值中;
若所述JSON节点为JsonObject,将其包括的每个JsonElement对应的树节点作为自身树节点的子节点;
若JSON节点为JsonArray,取其包括的第一个JsonElement,将其对应的树节点作为自身节点,并将其类型转为JsonArray。
9.根据权利要求6所述的方法,其特征在于,将所述待提取数据所在的原始DOM块进行结构转化,获得可计算编辑距离的第二树结构,包括:
针对所述待提取数据所在的原始DOM块,依次进行文本节点的合并、同结构节点的判定与合并、DOM树结构的转化以及转化结果去冗余,获得可计算编辑距离的第二树结构。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:
为每一个模板大类下的各个子类模板分配带有默认值的优先级;
按照优先级获得所述模板大类下的各个子类模板,包括:
按照优先级的默认值由高到低的顺序,获得所述模板大类下的各个子类模板;
对每个子类模板的适应性进行评估,包括:
按照优先级的默认值由高到低的顺序,对每个子类模板的适应性进行评估。
11.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述待推荐的子类模板完成对web页面中的待提取数据的提取操作后,提升所述待推荐的子类模板的优先级的默认值。
12.一种服务接口子类模板确定系统,其特征在于,包括:
第一获得模块,用于根据用户选定的模板大类,按照优先级获得所述模板大类下的各个子类模板;
第二获得模块,用于利用所述各个子类模板对web页面中的待提取数据进行提取操作,获得针对所述各个子类模板的提取结果;
评估模块,用于根据所述提取结果和所述待提取数据所在的原始DOM块之间的相似性,对每个子类模板的适应性进行评估;
选择模块,用于选择适应性高于指预设阈值的预设数量个子类模板;
分析模块,用于对所述数量个子类模板进一步分析,分析内容包括:key-value饱和度、key值语义含量、key值重复度以及与预期结果的结构相似性;
第三获得模块,用于根据分析结果获得待推荐的子类模板。
CN202010753686.7A 2020-07-30 2020-07-30 一种服务接口子类模板确定方法与系统 Active CN111913693B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010753686.7A CN111913693B (zh) 2020-07-30 2020-07-30 一种服务接口子类模板确定方法与系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010753686.7A CN111913693B (zh) 2020-07-30 2020-07-30 一种服务接口子类模板确定方法与系统

Publications (2)

Publication Number Publication Date
CN111913693A true CN111913693A (zh) 2020-11-10
CN111913693B CN111913693B (zh) 2023-11-14

Family

ID=73288081

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010753686.7A Active CN111913693B (zh) 2020-07-30 2020-07-30 一种服务接口子类模板确定方法与系统

Country Status (1)

Country Link
CN (1) CN111913693B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113704269A (zh) * 2021-09-02 2021-11-26 京东城市(北京)数字科技有限公司 一种数据处理方法、系统、存储介质及电子设备
CN113934469A (zh) * 2021-10-13 2022-01-14 北京有竹居网络技术有限公司 模板加载方法、控制方法、装置、设备及存储介质
CN115630106A (zh) * 2022-10-28 2023-01-20 上海柯林布瑞信息技术有限公司 一种基于通用格式解析的多场景参数接收方法及装置
CN115994270A (zh) * 2023-03-23 2023-04-21 云账户技术(天津)有限公司 基于uid的用户信息收集方法、系统、电子设备和介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090204889A1 (en) * 2008-02-13 2009-08-13 Mehta Rupesh R Adaptive sampling of web pages for extraction
CN101727498A (zh) * 2010-01-15 2010-06-09 西安交通大学 一种基于web结构的网页信息自动提取方法
US20100169311A1 (en) * 2008-12-30 2010-07-01 Ashwin Tengli Approaches for the unsupervised creation of structural templates for electronic documents
CN104834717A (zh) * 2015-05-11 2015-08-12 浪潮集团有限公司 一种基于网页聚类的Web信息自动抽取方法
CN110147477A (zh) * 2019-04-12 2019-08-20 北京因特睿软件有限公司 Web系统的数据资源模型化提取方法、装置以及设备
CN110175334A (zh) * 2019-06-05 2019-08-27 苏州派维斯信息科技有限公司 基于自定义的知识槽结构的文本知识抽取系统和方法
CN110390038A (zh) * 2019-07-25 2019-10-29 中南民族大学 基于dom树的页面分块方法、装置、设备及存储介质
CN110928613A (zh) * 2019-09-29 2020-03-27 京东数字科技控股有限公司 获取页面数据的方法、装置、电子设备及可读存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090204889A1 (en) * 2008-02-13 2009-08-13 Mehta Rupesh R Adaptive sampling of web pages for extraction
US20100169311A1 (en) * 2008-12-30 2010-07-01 Ashwin Tengli Approaches for the unsupervised creation of structural templates for electronic documents
CN101727498A (zh) * 2010-01-15 2010-06-09 西安交通大学 一种基于web结构的网页信息自动提取方法
CN104834717A (zh) * 2015-05-11 2015-08-12 浪潮集团有限公司 一种基于网页聚类的Web信息自动抽取方法
CN110147477A (zh) * 2019-04-12 2019-08-20 北京因特睿软件有限公司 Web系统的数据资源模型化提取方法、装置以及设备
CN110175334A (zh) * 2019-06-05 2019-08-27 苏州派维斯信息科技有限公司 基于自定义的知识槽结构的文本知识抽取系统和方法
CN110390038A (zh) * 2019-07-25 2019-10-29 中南民族大学 基于dom树的页面分块方法、装置、设备及存储介质
CN110928613A (zh) * 2019-09-29 2020-03-27 京东数字科技控股有限公司 获取页面数据的方法、装置、电子设备及可读存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
ROBERTFANG: "基于DOM的Web信息提取方法", Retrieved from the Internet <URL:https://www.cnblogs.com/robertfang/articles/1398592.html> *
任远博: "基于Ajax技术的计量管理系统设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》, pages 138 - 1869 *
邱韬奋 等: "基于网页聚类的Web信息自动抽取", 《微型机与应用》, vol. 30, no. 4, pages 71 - 74 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113704269A (zh) * 2021-09-02 2021-11-26 京东城市(北京)数字科技有限公司 一种数据处理方法、系统、存储介质及电子设备
CN113704269B (zh) * 2021-09-02 2024-04-16 京东城市(北京)数字科技有限公司 一种数据处理方法、系统、存储介质及电子设备
CN113934469A (zh) * 2021-10-13 2022-01-14 北京有竹居网络技术有限公司 模板加载方法、控制方法、装置、设备及存储介质
CN113934469B (zh) * 2021-10-13 2023-11-24 北京有竹居网络技术有限公司 模板加载方法、控制方法、装置、设备及存储介质
CN115630106A (zh) * 2022-10-28 2023-01-20 上海柯林布瑞信息技术有限公司 一种基于通用格式解析的多场景参数接收方法及装置
CN115630106B (zh) * 2022-10-28 2023-06-30 上海柯林布瑞信息技术有限公司 一种基于通用格式解析的多场景参数接收方法及装置
CN115994270A (zh) * 2023-03-23 2023-04-21 云账户技术(天津)有限公司 基于uid的用户信息收集方法、系统、电子设备和介质

Also Published As

Publication number Publication date
CN111913693B (zh) 2023-11-14

Similar Documents

Publication Publication Date Title
CN111913693B (zh) 一种服务接口子类模板确定方法与系统
US7660804B2 (en) Joint optimization of wrapper generation and template detection
US7664830B2 (en) Method and system for utilizing embedded MPEG-7 content descriptions
CN111241454B (zh) 一种生成网页代码的方法、系统和装置
US20050203869A1 (en) Hierarchical database apparatus, components selection method in hierarchical database, and components selection program
US20140013205A1 (en) Methods for matching xml documents
US20080235567A1 (en) Intelligent form filler
US20100169311A1 (en) Approaches for the unsupervised creation of structural templates for electronic documents
US20040103371A1 (en) Small form factor web browsing
US20100145902A1 (en) Methods and systems to train models to extract and integrate information from data sources
JPH09297768A (ja) 文書データベース管理装置及び文書データベース検索方法
US20080250055A1 (en) Method and Device for Coding a Hierarchized Document
JP2006525601A (ja) 概念ネットワーク
JP2007183916A (ja) モバイル機器におけるフォーム自動入力のための方法および装置
CN1504925A (zh) 用于导入和导出分层结构化数据的方法和计算机可读介质
US20120304051A1 (en) Automation Tool for XML Based Pagination Process
CN111913739B (zh) 一种服务接口原语定义方法和系统
CN112667720A (zh) 接口数据模型的转化方法、装置、设备及存储介质
JP4247135B2 (ja) 構造化文書記憶方法、構造化文書記憶装置、構造化文書検索方法
CN107220250A (zh) 一种模板配置方法及系统
CN115202626A (zh) 一种支持多技术栈组件的低代码前端开发方法
CN115358200A (zh) 一种基于SysML元模型的模板化文档自动生成方法
CN114970475A (zh) excel表格解析方法、系统、设备及存储介质
CN111966940B (zh) 一种基于用户请求序列的目标数据定位方法和装置
Khoury et al. An efficient web page change detection system based on an optimized Hungarian algorithm

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant