具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,在现有的d2c场景中,在根据人工标注的循环结构生成代码时的精度较低,得到的代码往往无法包含每个循环结构精确的状态信息,从而导致根据该代码对用户界面进行渲染时的渲染效果不尽如人意。
基于上述研究,本公开提供了一种界面组件状态识别方法、装置、计算机设备以及存储介质。在本公开实施例中,首先,对待处理的界面文件进行循环识别,得到多个循环结构;之后,就可以基于多个循环结构之间的相似度将多个循环结构划分为至少一个循环结构组;并确定每个循环结构组中各个目标循环结构之间的界面组件的差异信息,从而基于该差异信息确定每个目标循环结构的状态信息,该状态信息可以指示目标循环结构的结构属性信息和/或目标循环结构之间结构属性的属性转化信息。
通过上述处理方式,可以自动地确定每个循环结构的状态信息。在基于每个循环结构的状态信息生成该循环结构的代码时,就可以得到与该循环结构的状态信息相匹配的代码。在基于该代码对该循环结构进行渲染时,就可以得到更加准确的渲染效果。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种界面组件状态识别方法进行详细介绍,本公开实施例所提供的界面组件状态识别方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备。在一些可能的实现方式中,该界面组件状态识别方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本公开实施例提供的一种界面组件状态识别方法的流程图,所述方法包括步骤S101~S107,其中:
S101:对待处理的界面文件进行循环识别,得到多个循环结构;每个所述循环结构中包含具有预设层级关系的多个界面组件。
在本公开实施例中,上述待处理的界面文件可以为UI(User Interface,用户界面)界面设计稿(或者UI设计稿)的相关界面文件。
在本公开实施例中,待处理的界面文件中包含该UI设计稿中每个界面组件(或者UI组件)的组件信息,其中,该UI组件是可以满足用户交互要求的一些组件。组件信息可以理解为UI组件的属性信息。例如,UI组件的组件信息可以是UI组件的组件标识信息,还可以是UI组件的位置信息、图案信息、形状信息、尺寸信息、颜色信息等属性信息。
具体的,界面设计稿的结构如图2所示,该界面设计稿由具有预设层级关系的多个界面组件组成。如图2所示,在该界面设计稿中,界面组件A1、界面组件A2和界面组件A3构成了一个循环结构A。其中,界面组件A1的预设层级高于界面组件A2和界面组件A3的预设层级,即界面组件A1包含界面组件A2和界面组件A3(或者,界面组件A2和界面组件A3嵌套在界面组件A1中),界面组件A2和界面组件A3处于同一层级。基于此,在循环结构A中,界面组件A1为界面组件A2和界面组件A3的父节点,同理,界面组件A2和界面组件A3为界面组件A1的子节点。
需要说明的是,上述预设层级关系除了包含各个界面组件之间的层级关系(或者嵌套关系)之外,还可以包含各个界面组件的约束关系。
这里,各个界面组件的约束关系用于表征循环结构中子节点和父节点之间的位置约束。其中,该约束关系可以为单方向的位置约束或多方向的位置约束。
这里,以多方向位置约束为例,假设该多方向位置约束为双方向位置约束,则该预设层级关系可以包含以下约束关系:R&T约束(right&top约束,右边距&上边距约束),或者L&T约束。
具体地,R&T约束表示:当父节点的宽高发生变化时,子节点和父节点的上边距以及右边距之间的距离恒定不变。L&T约束表示:当父节点的宽高发生变化时,子节点和父节点的上边距以及左边距之间的距离恒定不变。
S103:基于所述多个循环结构之间的相似度将所述多个循环结构划分为至少一个循环结构组;每个所述循环结构组中包含满足相似性要求的多个目标循环结构。
在本公开实施例中,可以对上述多个循环结构按照相似度进行分组,划分得到至少一个循环结构组。其中,可以将满足预设相似度要求的多个循环结构确定为一个循环结构组。
具体的,如图2所示,循环结构A包括界面组件A1,界面组件A2和界面组件A3,循环结构B包括界面组件B1、界面组件B2和界面组件B3,且循环结构A和循环结构B之间的相似度满足相似度要求,即循环结构A和循环结构B之间的相似度大于预设相似度阈值。此时,就可以将循环结构A和循环结构B确定划分至一个循环结构组中。这里,循环结构A和循环结构B就可以理解为该循环结构组中的多个目标循环结构。
S105:确定每个所述循环结构组中各个目标循环结构之间的界面组件的差异信息。
在本公开实施例中,在确定出至少一个循环结构组之后,就可以确定每个循环结构组中各个目标循环结构之间的界面组件的差异信息。
这里,差异信息可以为各个目标循环结构之间相对应界面组件的差异信息。其中,该差异信息包括以下至少之一:界面组件的组件颜色差异,界面组件的组件尺寸差异,界面组件的组件位置差异,界面组件的组件内容差异,界面组件的组件数量差异。
这里,以同一个循环结构组中的目标循环结构(即循环结构A)和循环结构B为例来进行说明。如图2所示,其中,在循环结构A和循环结构B中各个界面组件之间的预设层级关系相同的情况下,循环结构A和循环结构B之间的差异信息包括:循环结构A的界面组件A1中包含的图片1和循环结构B的界面组件B1中包含的图片2不同、循环结构A的界面组件A3中的文字信息为“24集全”,循环结构B的界面组件B3中的文字信息为“36集全”。
S107:基于所述差异信息确定所述循环结构组中每个目标循环结构的状态信息;所述状态信息用于指示目标循环结构的结构属性信息和/或目标循环结构之间结构属性的属性转化信息。
在按照上述所描述的方式得到差异信息之后,就可以基于该差异信息确定循环结构组中每个目标循环结构的状态信息。
具体实施时,可以通过确定目标循环结构之间的结构属性信息和/或结构属性的属性转化信息的方式确定每个目标循环结构的状态信息。
具体的,上述结构属性信息可以用于表征每个循环结构组的各个目标循环结构中每个界面组件的结构属性,以及用于表征各个目标循环结构的界面组件之间的结构变化。
例如,结构属性信息可以为循环结构A中每个界面组件的结构属性、可以为循环结构B中每个界面组件的结构属性,以及循环结构A相对于循环结构B减少了(或者增加了)界面组件M。
结构属性的属性转化信息可以为多个目标循环结构的界面组件之间结构属性的属性转化信息。
具体实施时,可以在每个循环结构组的多个目标循环结构中确定一个基准循环结构。这里,属性转化信息可以理解为:基准循环结构通过指定的操作轨迹可以得到该循环结构组中其他目标循环结构。
假设,如图2所示循环结构A为基准循环结构。循环结构A的状态信息可以包含该循环结构A中各个界面组件的结构属性,循环结构B的状态信息可以包含属性转化信息,表示循环结构A通过指定的操作轨迹可以得到该循环结构B。
如图2所示,循环结构B的状态信息可以为:循环结构A中的界面组件A3的文字信息“24集全”转化为“36集全”,以及循环结构A中的界面组件A1的图片由“图片1”转化为“图片2”,从而得到循环结构B。
在一个可选的实施方式中,每个循环结构组的每个目标循环结构的状态信息中可以包含结构属性信息和/或属性转化信息。
在另一个可选的实施方式中,如果每个循环结构组的多个目标循环结构中包含基准循环结构和非基准循环结构,那么基准循环结构的状态信息可以包含结构属性信息,非基准循环结构的状态信息可以包含属性转化信息。
本公开实施例对每个目标循环结构的状态信息的具体信息内容不做具体限定,以能够实现为准。
通过上述处理方式,可以自动地确定每个循环结构的状态信息。在基于每个循环结构的状态信息生成该循环结构的代码时,就可以得到与该循环结构的状态信息相匹配的代码。在基于该代码对该循环结构进行渲染时,就可以得到更加准确的渲染效果。
下面将结合具体实施例对上述步骤进行详细介绍。
在本公开实施例中,首先对待处理的界面文件进行循环识别,从而识别得到多个循环结构。
在得到多个循环结构之后,就可以基于多个循环结构之间的相似度将多个循环结构划分为至少一个循环结构组。
在一个可选的实施方式中,上述步骤S103,基于所述多个循环结构之间的相似度将所述多个循环结构划分为至少一个循环结构组,具体包括如下过程:
S1031:提取各个所述循环结构中每个界面组件的组件特征。
在本公开实施例中,在对上述待处理的界面文件所对应的界面设计稿进行循环识别,可以得到多个循环结构,之后,就可以对识别到的每个循环结构中每个界面组件的组件特征进行提取,从而得到每个循环结构所对应的组件特征合集。
例如,上述待处理的界面文件所对应的界面设计稿中包含循环结构C,该循环结构C中包含13个界面组件,分别对该循环结构C的13个界面组件进行组件特征的提取,就可以得到该循环结构C对应多维向量合集[C1,C2,C3,……C13]。其中,在该多维向量合集中,包含循环结构C中每个界面组件的组件特征。
具体的,在提取界面组件的组件特征之后,可以对提取到的组件特征中的数值特征进行归一化处理,并对组件特征中的非数值特征进行离散数值化,以得到对该界面组件的组件特征进行向量化处理,以通过向量化处理之后的组件特征计算各个循环结构之间的相似度,本公开对组件特征的提取方式不做具体限定。
S1032:基于提取到的所述组件特征,计算各个所述循环结构之间的相似度。
在提取到每个界面组件的组件特征之后,就可以通过相似度算法对组件特征进行计算,从而计算得到各个环结构之间的相似度。
S1033:将所述相似度中满足相似度要求的循环结构划分为一个循环结构组,得到所述至少一个循环结构组。
在本公开实施例中,在计算上述各个循环结构之间的相似度时,可以根据每个循环结构对应的多维向量合集进行计算,例如,计算两个多维向量合集之间的余弦相似度,本公开对计算余弦相似度的过程不做具体限定。
通过上述描述可知,可以根据各个循环结构中每个界面组件的组件特征确定各个循环结构之间的相似度,从而将满足相似度要求的多个循环结构划分为一个循环结构组,以便能够根据循环结构组确定循环结构之间的差异信息,提高了差异信息的确定效率。
在一个可选的实施方式中,上述步骤S1032,基于提取到的所述组件特征,计算各个所述循环结构之间的相似度,具体包括如下过程:
(1)、在所述多个循环结构中所包含界面组件的数量不相同的情况下确定所述多个循环结构中的至少一个待调整的第一循环结构;
(2)、在每个所述第一循环结构中插入空界面组件,得到调整之后的多个循环结构;
(3)、基于提取到的所述组件特征,计算调整之后的多个循环结构之间的相似度。
通过上述描述可知,在计算上述各个循环结构之间的相似度时,可以根据每个循环结构对应的多维向量合集进行计算,例如,计算两个多维向量合集之间的余弦相似度。
这里,需要保证各个循环结构的多维向量合集的向量维度一致,因此,在进行相似度计算之前,首先需要判断多个循环结构之间所包含的界面组件的数量是否一致。
在多个循环结构中所包含界面组件的数量不相同的情况下,就需要在多个循环结构中确定至少一个待调整的第一循环结构。这里,待调整的第一循环结构可以为多个循环结构中界面组件的数量不满足要求的循环结构,例如,第一循环结构可以为缺少至少部分界面组件的循环结构。
在确定出至少一个第一循环结构之后,就可以在该至少一个第一循环结构的对应位置插入空界面组件,以使多个循环结构中界面组件的数量保持一致。
这里,在多个循环结构中确定至少一个第一循环结构时,可以首先统计每个循环结构中所包含界面组件的数量,并确定包含界面组件最多的循环结构,并将多个循环结构中的剩余循环结构确定为第一循环结构。
具体的,若多个循环结构包括循环结构D和循环结构E,在确定上述待调整的第一循环结构时,可以比较循环结构D和循环结构E中的界面组件的数量是否相同。
若上述循环结构D的界面组件数量为8个,上述循环结构E的界面组件的数量为10个,那么,就可以将循环结构D确定为第一循环结构,并在循环结构D的对应位置插入两个空界面组件,以使循环结构D和循环结构E中的界面组件的数量保持一致。
通过上述描述可知,在循环结构组中的多个循环结构中所包含界面组件的数量不相同的情况下,可以在多个循环结构中识别第一循环结构,并在第一循环结构中插入对应数量的空界面组件,以使各个循环结构中界面组件数量相等,从而得到向量维度一致的多维向量合集,以便根据向量维度一致的多维向量合集计算各个循环结构之间的相似度。
在一个可选的实施方式中,上述步骤:在每个第一循环结构中插入空界面组件,得到调整之后的多个循环结构,具体包括如下过程:
步骤S11,在第二循环结构中确定目标界面组件,其中,所述第二循环结构为所述多个循环结构中除所述第一循环结构之外的剩余循环结构,所述目标界面组件为包含在所述第二循环结构中且未包含在所述第一循环结构中的界面组件;
步骤S12,基于所述目标界面组件在所述第二循环结构中的组件位置,在所述第一循环结构中确定所述空界面组件的插入位置;
步骤S13,基于所述插入位置在所述第一循环结构中插入所述空界面组件。
在本公开实施例中,在对上述第一循环结构中进行空界面组件插入时,还需要确定出该空界面组件的插入位置以及空界面组件的插入数量。
在确定空界面组件的插入位置和插入数量时,可以基于多个循环结构中第二循环结构中目标界面组件的数量确定空界面组件的插入数量,以及根据目标界面组件的位置确定空界面组件的插入位置。
在第二循环结构中确定目标界面组件时,可以分别确定第一循环结构中各个界面组件和第二循环结构中各个界面组件之间的组件对应关系。
假设,第一循环结构为循环结构D,第二循环结构为循环结构E。假设根据界面组件在循环结构中的空间位置顺序对循环结构D中的界面组件进行排序,例如,可以按照从左到右,从上到下的空间位置顺序对循环结构D中的界面组件进行排序,例如,得到的组件排序结果为(D1,D2,D3,D4,D5,D6,D7,D8)。同样地,还可以按照从左到右,从上到下的空间位置顺序对循环结构E中的界面组件进行排序,例如,得到的组件排序结果为(E1,E2,E3,E4,E5,E6,E7,E8,E9,E10)。
这里,循环结构D中的界面组件和循环结构E中的界面组件的对应关系为D1→E1,D2→E2,D3→E3,D4→E4,D1→E1,D5→E5,D6→E6,D7→E7,D8→E8。那么,循环结构E中和循环结构D中的界面组件没有对应关系的界面组件E9和界面组件E10为上述目标界面组件。
在确定出上述目标界面组件之后,就可以确定该目标界面组件在上述第二循环结构中的组件位置,并将该第二循环结构中的组件位置确定为第一循环结构中的空界面组件的插入位置。
例如,若上述目标界面组件E9和目标界面组件E10的组件位置分别为(100px,300px)和(250px,300px),那么,就可以将上述第一循环结构中的空界面组件的插入位置确定为(100px,300px)和(250px,300px),并分别在第一循环结构中(100px,300px)和(250px,300px)的位置插入一个空界面组件。
通过上述描述可知,可以根据第二循环结构中目标界面组件的组件位置,确定出第一循环结构中应插入空界面组件的插入位置,从而得到向量维度一致的多维向量合集的基础上,进而使得循环结构所对应的界面组件的特征向量的位置能一一对应。
在一个可选的实施方式例中,上述步骤S105,确定每个所述循环结构组中多个目标循环结构之间的界面组件的差异信息,具体包括如下过程:
S1051:获取每个所述目标循环结构中界面组件的组件属性信息。
S1052:基于所述组件属性信息,将所述多个目标循环结构中界面组件进行配对处理,得到各个所述目标循环结构中每个界面组件的配对结果。
S1053:基于所述配对结果确定所述多个目标循环结构之间的界面组件的差异信息。
在本公开实施例中,在确定上述循环结构组中多个目标循环结构之间的界面组件的差异信息时,首先需要获取每个目标循环结构中各个界面组件的组件属性信息。其中,该组件属性信息包括以下至少之一:界面组件的组件名称、界面组件的组件位置、界面组件的组件类型等。
在得到组件属性信息之后,就可以基于该组件属性信息将多个目标循环结构中的界面组件进行配对处理,从而得到配对结果。
具体实施时,可以基于界面组件的组件名称、界面组件的组件位置、界面组件的组件类型中的至少之一将多个目标循环结构中的界面组件进行配对处理,从而得到配对结果。这里,在配对结果中包含至少一组匹配组件,每组匹配组件中包含各个目标循环结构中相匹配的界面组件。
假设,循环结构组中包含的多个目标循环结构分别为循环结构D和循环结构E。循环结构D中包含以下界面组件:D1,D2,D3,D4,D5,D6,D7,D8,循环结构E中包含以下界面组件:E1,E2,E3,E4,E5,E6,E7,E8,E9,E10。
例如,在将循环结构D中界面组件和循环结构E中的界面组件进行匹配处理之后,可以得到以下配对结果:D1→E1,D2→E2,D3→E3,D4→E4,D1→E1,D5→E5,D6→E6,D7→E7,D8→E8。
在本公开实施例中,在组件属性信息的数量为多个情况下,在根据组件属性信息对循环结构D和循环结构E中的界面组件进行配对处理时,可以将满足至少部分组件属性信息的界面组件确定为匹配组件,和/或,可以将满足全部组件属性信息的界面组件确定为匹配组件。
在得到配对结果之后,就可以基于配对结果确定多个目标循环结构之间的界面组件的差异信息。
具体实施时,可以基于组件属性信息,将配对结果中的每组匹配组件进行比较,从而比较得到差异信息时,其中,比较出的差异信息可以包括以下至少之一:界面组件的组件颜色差异,界面组件的组件尺寸差异,界面组件的组件位置差异,界面组件的组件内容差异,界面组件的组件数量差异等。
通过上述描述可知,通过将多个目标循环结构之间的界面组件进行配对,并根据配对结果确定多个目标循环结构之间的界面组件的差异信息的方式,可以实现以界面组件为基本单位确定目标循环结构之间差异信息,从而使得确定出的差异信息更加准确。
在一个可选的实施方式中,上述步骤S1052,基于所述组件属性信息,将所述多个目标循环结构中界面组件进行配对处理,得到各个所述目标循环结构中每个界面组件的配对结果,具体包括如下过程:
(1)、提取每个所述目标循环结构中对应相同层级的界面组件;
(2)、基于所述组件属性信息,将各个所述目标循环结构中对应相同层级的界面组件进行配对处理,得到所述配对结果。
通过上述描述可知,目标循环结构包含具有预设层级关系的界面组件,因此,在对多个目标循环结构中的界面组件进行配对处理时,可以按照预设层级关系,将多个目标循环结构中的界面组件进行配对处理。
具体实施时,可以提取每个目标循环结构中对应相同层级的界面组件之后,就可以按照从左到右,从上到下的顺序对在每个目标循环结构中提取到的界面组件进行排序,从而得到多个组件排序序列,其中,每个目标循环结构对应一个组件排序序列。
在多个组件排序序列中任选一个组件排序序列,记为组件排序序列X,之后,就可以基于组件属性信息,将组件排序序列X中的界面组件和剩余组件排序序列(记为组件排序序列Y)中的每个界面组件进行配对处理,从而得到配对结果。
举例来说,循环结构组中包含目标循环结构F和目标循环结构G。
首先,提取目标循环结构F中对应第n层级的界面组件,在将提取到的界面组件按照从左到右,从上到下的顺序进行排序之后,可以得到以下组件排序序列:[界面组件F1,界面组件F2];提取目标循环结构G中对应第n层级的界面组件,在将提取到的界面组件按照从左到右,从上到下的顺序进行排序之后,可以得到以下组件排序序列:[界面组件G1,界面组件G2]。
此时,可以基于组件属性信息,将界面组件F1分别与界面组件G1和界面组件G2进行配对处理。例如,可以基于组件名称、组件位置和组件类型中的至少之一确定界面组件F1分别与界面组件G1之间是否具有对应关系。
以目标循环解结构F为例,在对界面组件F1进行配对处理时,可以将该界面组件F1分别和目标循环结构G中的界面组件G1和界面组件G2进行匹配,在确定出界面组件G1和该界面组件F1相匹配后,就可以得到用于表征界面组件G1和界面组件F1相匹配的匹配结果:G1→F1。
通过上述描述可知,在本公开实施例中,可以按照目标循环结构之间的层级对目标循环结构中的界面组件进行配对,从而避免了不同层级之间的堆叠的界面组件对配对处理造成的干扰,提高了配对处理的准确性。
在本公开实施例中,如图3所示,S1053,基于所述配对结果确定所述多个目标循环结构之间的界面组件的差异信息,具体包括如下过程:
步骤S301、在所述配对结果中包含匹配成功的界面组件的情况下,获取所述配对结果中所包含的每个界面组件的组件展示信息;
步骤S302、确定各个所述组件展示信息之间的展示差异信息;
步骤S303、基于所述展示差异信息确定所述配对结果中界面组件之间的差异信息。
在本公开实施例中,在确定配对结果中包含匹配成功的界面组件的情况下,可以获取配对结果中所包含的每个界面组件的组件展示信息,以根据该组件展示信息确定各个组件展示信息之间的展示差异信息,其中,该展示差异信息可以包含以下至少之一:界面组件的组件颜色差异,界面组件的组件尺寸差异,界面组件的组件位置差异,界面组件的组件内容差异。
例如,如图4所示,循环结构组中包含目标循环结构F和目标循环结构G。若根据上述配对结果确定出界面组件F2和界面组件G2为相匹配的界面组件,此时,可以确定界面组件F2和界面组件G2的组件展示信息,进而就可以根据该组件展示信息确定该界面组件F2和界面组件G2之间的展示差异信息。
具体的,该界面组件F2和界面组件G2之间存在组件内容差异,其中,该组件内容差异为界面组件F2中的组件内容为“进店逛逛”,界面组件G2中的组件内容为“全部宝贝”。此时,就可以根据界面组件F2和界面组件G2之间的组件内容差异确定界面组件F2和界面组件G2之间的差异信息。例如,确定目标循环结构F和目标循环结构G之间的差异信息为组件内容差异。
通过上述描述可知,在确定出配对结果中包含匹配成功的界面组件的情况下,就可以根据组件展示信息确定出界面组件之间的差异信息,从而使得确定出的差异信息更加准确,更加精细化。
在一个可选的实施方式中,上述步骤S1053,基于所述配对结果确定所述多个目标循环结构之间的界面组件的差异信息,还包括如下过程:
(1)、在所述配对结果中包含匹配失败的界面组件的情况下,确定所述配对结果中界面组件所属的目标循环结构;
(2)、基于所述所属的目标循环结构和所述匹配失败的界面组件,确定所述多个目标循环结构之间的界面组件的差异信息。
在本公开实施例中,若上述多个目标循环结构中包含匹配失败的界面组件,那么就可以确定该匹配失败的界面组件所属的目标循环结构。
在确定出目标循环结构之后,就可以基于该匹配失败的界面组件和目标循环结构确定多个目标循环结构之间的界面组件的差异信息。
具体实施时,可以确定该匹配失败的界面组件的组件属性信息,并确定循环结构组中,除该匹配失败的界面组件所属的目标循环结构之外的其他目标循环结构。然后,确定出该其他目标循环结构和上述所属的目标循环结构之间的差异信息为:其他目标循环结构缺少该匹配失败的界面组件。
举例来说,假设,循环结构组中包含目标循环结构D和目标循环结构E为例,假设,循环结构D中包含以下界面组件:D1,D2,D3,D4,D5,D6,D7,D8,循环结构E中包含以下界面组件:E1,E2,E3,E4,E5,E6,E7,E8,E9,E10。已知该循环结构E中匹配失败的界面组件为E9,E10,那么,此时,可以确定出目标循环结构D和目标循环结构E之间的差异信息为:目标循环结构D缺少界面组件E9和界面组件E10。
通过上述描述可知,在确定出配对结果中包含匹配失败的界面组件的情况下,就可以基于匹配失败的界面组件确定出目标循环结构之间的界面组件的差异信息,从而使得确定出的差异信息更加准确,更加精细化。
在本公开实施例中,在按照上述所描述的方式确定出每个所述循环结构组中各个目标循环结构之间的界面组件的差异信息之后,就可以基于差异信息确定所述循环结构组中每个目标循环结构的状态信息。
在一个可选的实施方式中,上述步骤S107,基于所述差异信息确定所述循环结构组中每个循环结构的状态信息,具体包括如下过程:
S1071:检测针对每个所述循环结构组中的循环结构的选择指令,在所述循环结构组中确定所述选择指令指示选择的基准循环结构。
在本公开实施例中,在确定上述循环结构组中每个循环结构的状态信息时,还可以通过选择指令,确定出每个循环结构组中的基准循环结构。
假设,循环结构组中目标循环结构F和目标循环结构F为例,在基于差异信息,确定目标循环结构F和目标循环结构F之间的状态信息时,例如,可以将目标循环结构F确定为基准循环结构。
S1072:根据所述差异信息,确定所述循环结构组中的其他循环结构相对于所述基准循环结构的属性转化信息。
在本公开实施例中,在确定出基准循环结构之后,就可以基于差异信息,确定基准循环结构的结构属性信息,并确定循环结构组中的其他循环结构相对于该基准循环结构的属性转化信息。这里,属性转化信息就可以为循环结构组中,其他循环结构相对于该基准循环结构的属性转化信息。
下面结合以下几种情况对状态信息的确定过程进行描述。
假设,循环结构组中包含目标循环结构D和目标循环结构E为例,循环结构D中包含以下界面组件:D1,D2,D3,循环结构E中包含以下界面组件:E1,E2,E3。其中,目标循环结构D和目标循环结构E中界面组件的配对结果为:D1→E1,D2→E2,D3在目标循环结构D中存在,在目标循环结构E中不存在,E3在目标循环结构E中存在,在目标循环结构D中不存在。这里,目标循环结构D为基准循环结构。
情况一:配对结果中包含匹配成功的界面组件。
此时,可以确定D1→E1中界面组件的组件展示信息,得到组件展示信息Y1,以及确定D2→E2中界面组件的组件展示信息,得到组件展示信息Y2;进而根据组件展示信息Y1确定展示差异信息,例如,该展示差异信息可以为组件颜色差异。根据组件展示信息Y2确定展示差异信息,例如,该展示差异信息可以为组件内容差异。
此时,上述基准循环结构的状态信息可以为界面组件D1的组件属性信息。目标循环结构E的状态信息可以为上述组件内容差异。
情况二:基准循环结构中包含匹配失败的界面组件。
在此情况下,D3在目标循环结构D中存在,在目标循环结构E中不存在。此时,基准循环结构的状态信息中可以包含D3的组件属性信息,目标循环结构E的状态信息可以为:在目标循环结构E中,删除了界面组件D3。
情况三:循环结构组中的其他循环结构中包含匹配失败的界面组件。
在此情况下,E3在目标循环结构E中存在,在目标循环结构D中不存在。此时,基准循环结构的状态信息中不包含E3的组件属性信息,目标循环结构E的状态信息可以为:在目标循环结构E中,在对应位置处增加了一个界面组件E3。
通过上述描述可知,可以在循环结构组中确定基准循环结构,从而确定出其他循环结构相对于该基准循环结构的属性转化信息,以便能更直观的表现出循环结构组中的循环结构之间的属性转化信息。
综上,在本公开实施例中,通过上述处理方式,可以自动地确定每个循环结构的状态信息。在基于每个循环结构的状态信息生成该循环结构的代码时,就可以得到与该循环结构的状态信息相匹配的代码。在基于该代码对该循环结构进行渲染时,就可以得到更加准确的渲染效果。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与界面组件状态识别方法对应的界面组件状态识别装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述界面组件状态识别方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图5所示,为本公开实施例提供的一种界面组件状态识别装置的示意图,所述装置包括:识别单元51、分组单元52、第一确定单元53、第二确定单元54;其中,
识别单元51,用于对待处理的界面文件进行循环识别,得到多个循环结构;每个所述循环结构中包含具有预设层级关系的多个界面组件;
分组单元52,用于基于所述多个循环结构之间的相似度将所述多个循环结构划分为至少一个循环结构组;每个所述循环结构组中包含满足相似性要求的多个目标循环结构;
第一确定单元53,用于确定每个所述循环结构组中各个目标循环结构之间的界面组件的差异信息;
第二确定单元54,用于基于所述差异信息确定所述循环结构组中每个目标循环结构的状态信息;所述状态信息用于指示目标循环结构的结构属性信息和/或目标循环结构之间结构属性的属性转化信息。
本公开实施例中,通过上述处理方式,可以自动地确定每个循环结构的状态信息。在基于每个循环结构的状态信息生成该循环结构的代码时,就可以得到与该循环结构的状态信息相匹配的代码。在基于该代码对该循环结构进行渲染时,就可以得到更加准确的渲染效果。
一种可能的实施方式中,第一确定单元53,还用于:
获取每个所述目标循环结构中界面组件的组件属性信息;基于所述组件属性信息,将所述多个目标循环结构中界面组件进行配对处理,得到各个所述目标循环结构中每个界面组件的配对结果;基于所述配对结果确定所述多个目标循环结构之间的界面组件的差异信息。
一种可能的实施方式中,第一确定单元53,还用于:
提取每个所述目标循环结构中对应相同层级的界面组件;基于所述组件属性信息,将各个所述目标循环结构中对应相同层级的界面组件进行配对处理,得到所述配对结果。
一种可能的实施方式中,第一确定单元53,还用于:
在所述配对结果中包含匹配成功的界面组件的情况下,获取所述配对结果中所包含的每个界面组件的组件展示信息;确定各个所述组件展示信息之间的展示差异信息;基于所述展示差异信息确定所述配对结果中界面组件之间的差异信息。
一种可能的实施方式中,第一确定单元53,还用于:
在所述配对结果中包含匹配失败的界面组件的情况下,确定所述配对结果中匹配失败的界面组件所属的目标循环结构;基于所述所属的目标循环结构和所述匹配失败的界面组件,确定所述多个目标循环结构之间的界面组件的差异信息。
一种可能的实施方式中,分组单元52,还用于:
提取各个所述循环结构中每个界面组件的组件特征;基于提取到的所述组件特征,计算各个所述循环结构之间的相似度;将所述相似度中满足相似度要求的循环结构划分为一个循环结构组,得到所述至少一个循环结构组。
一种可能的实施方式中,分组单元52,还用于:
在所述多个循环结构中所包含界面组件的数量不相同的情况下,确定所述多个循环结构中的至少一个待调整的第一循环结构;在每个所述第一循环结构中插入空界面组件,得到调整之后的多个循环结构;基于提取到的所述组件特征,计算调整之后的多个循环结构之间的相似度。
一种可能的实施方式中,分组单元52,还用于:
在第二循环结构中确定目标界面组件,其中,所述第二循环结构为所述多个循环结构中除所述第一循环结构之外的剩余循环结构,所述目标界面组件为包含在所述第二循环结构中且未包含在所述第一循环结构中的界面组件;基于所述目标界面组件在所述第二循环结构中的组件位置,在所述第一循环结构中确定所述空界面组件的插入位置;基于所述插入位置在所述第一循环结构中插入所述空界面组件。
一种可能的实施方式中,第二确定单元54,还用于:
检测针对每个所述循环结构组中的循环结构的选择指令,在所述循环结构组中确定所述选择指令指示选择的基准循环结构;根据所述差异信息,确定所述循环结构组中的其他循环结构相对于所述基准循环结构的属性转化信息。
关于装置中的各单元的处理流程、以及各单元之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
对应于图1中的界面组件状态识别方法,本公开实施例还提供了一种计算机设备600,如图6所示,为本公开实施例提供的计算机设备600结构示意图,包括:
处理器61、存储器62、和总线63;存储器62用于存储执行指令,包括内存621和外部存储器622;这里的内存621也称内存储器,用于暂时存放处理器61中的运算数据,以及与硬盘等外部存储器622交换的数据,处理器61通过内存621与外部存储器622进行数据交换,当所述计算机设备600运行时,所述处理器61与所述存储器62之间通过总线63通信,使得所述处理器61执行以下指令:
对待处理的界面文件进行循环识别,得到多个循环结构;每个所述循环结构中包含具有预设层级关系的多个界面组件;
基于所述多个循环结构之间的相似度将所述多个循环结构划分为至少一个循环结构组;每个所述循环结构组中包含满足相似性要求的多个目标循环结构;
确定每个所述循环结构组中各个目标循环结构之间的界面组件的差异信息;
基于所述差异信息确定所述循环结构组中每个目标循环结构的状态信息;所述状态信息用于指示目标循环结构的结构属性信息和/或目标循环结构之间结构属性的属性转化信息。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的界面组件状态识别方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的界面组件状态识别方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。