用于文本间匹配的方法与流程

文档序号:14990692发布日期:2018-07-20 22:09阅读:163来源:国知局
本发明涉及一种用于文本间匹配的方法。
背景技术
:在字符串模式匹配
技术领域
,主要的算法有:bm(boyer-moore)、horspool、sunday、kmp、kr、ac算法等,其中bm、horspool、sunday、kmp都为单模式匹配算法。设文本长度为n,集合p中字符串平均长度为k,单模式匹配最快可以做到o(m+k)的复杂度,但是,在多模式匹配的场合下,则需要o(mn+km)的复杂度;对于kr算法而言,最坏情况下需要o(k*m*n)的复杂度。可见,在多模式匹配的场合中,匹配效率存在恶化的趋势。另一方面,随着开源软件的不断发展和完善,其地位日益重要,开源软件的许可证也伴随着开源软件而产生。然而,由于对开源软件的不正确使用,产生了许多法律上的问题,给开源软件的开发企业带来了很大的风险或隐患。同时,许多开源软件都依赖其他的开源软件,而这些彼此依赖的开源软件使用的许可证复杂且不同,而这些许可证之间、及许可条款之间可能又存在各种兼容性问题,这也是使用开源软件的隐患。技术实现要素:本发明的目的在于提供一种用于文本间匹配的方法,其能够提高多模式匹配的效率。为实现上述目的,本发明提供一种技术方案如下:一种用于文本间匹配的方法,包括如下各步骤:a)、基于至少一个标识构建待匹配文本;b)、基于感兴趣信息形成目标文本的集合;c)、将待匹配文本按树结构进行解析;其中,树结构的根节点的每一个子节点对应于待匹配文本的至少一个字符;d)、基于树结构来构建存储表;其中,存储表记录每个标识在树结构中所对应的至少一个节点,以及其中每个节点的节点位置以及节点状态;以及e)、基于存储表与目标文本的集合进行多模式匹配。优选地,存储表基于二维数组结构来构建。优选地,步骤c)中:基于aho-corasick算法将待匹配文本按树结构进行解析。优选地,存储表包括:每个节点对应的节点字符;每个节点所在的数组位置;每个节点的各子节点所在的数组位置;每个节点的各兄弟节点所在的数组位置;每个节点的输出状态;以及每个节点的fail节点所在的数字位置。优选地,树结构按如下方式来定义:根节点的各直接子节点与各标识的首字符一一对应;各标识对应的字符串分别定义为树结构的相应子树。优选地,标识为开源软件的许可证的键,感兴趣信息为开源软件所涉及的风险信息和/或不兼容信息。本发明进一步提供一种确定开源软件的许可证是否存在风险或不兼容的方法,其包括:利用如上所述的多模式匹配方法来进行至少一个许可证的键与风险信息和/或不兼容信息之间的匹配。本发明还公开一种文本间多模式匹配系统,包括:待匹配文本构建单元,用于基于至少一个标识构建待匹配文本;树结构形成单元,与待匹配文本构建单元耦合,用于将待匹配文本按树结构进行解析;其中,树结构的根节点的每一个子节点对应于待匹配文本的至少一个字符;表存储单元,与树结构形成单元耦合,用于基于树结构来构建存储表;其中,存储表记录每个标识在树结构中所对应的至少一个节点,以及其中每个节点的节点位置以及节点状态;以及多模式匹配单元,与表存储单元耦合,用于基于存储表与目标文本的集合进行多模式匹配。本发明各实施例提供的用于文本间匹配的方法以及文本间多模式匹配系统,在多模式匹配的场合下,能够显著提升匹配运算的效率。在将这种匹配方法或系统应用于验证开源软件的许可证的应用中,能够更高效地确定多个许可证所涉及的风险信息或不兼容信息,为开源软件开发企业提供可靠的风险防范措施。附图说明图1示出本发明第一实施例提供的用于文本间匹配的方法的流程示意图。图2示出本发明第二实施例提供的文本间多模式匹配系统的模块结构示意图。图3示出根据本发明一实施例的树结构。图4示出根据本发明一实施例的树结构的有限状态机图。具体实施方式在以下描述中提出具体细节,以便提供对本发明的透彻理解。然而,本领域的技术人员将清楚地知道,即使没有这些具体细节也可实施本发明的实施例。在本发明中,可进行具体的数字引用,例如“第一元件”、“第二装置”等。但是,具体数字引用不应当被理解为必须服从于其字面顺序,而是应被理解为“第一元件”与“第二元件”不同。本发明所提出的具体细节只是示范性的,具体细节可以变化,但仍然落入本发明的精神和范围之内。术语“耦合”定义为表示直接连接到组件或者经由另一个组件而间接连接到组件。以下通过参照附图来描述适于实现本发明的方法、系统和装置的优选实施例。虽然各实施例是针对元件的单个组合来描述,但是应理解,本发明包括所公开元件的所有可能组合。因此,如果一个实施例包括元件a、b和c,而第二实施例包括元件b和d,则本发明也应被认为包括a、b、c或d的其他剩余组合,即使没有明确公开。如图1所示,本发明第一实施例提供一种用于文本间匹配的方法,其特别适用于多模式匹配,该方法包括以下各步骤。步骤s10、基于至少一个标识构建待匹配文本。不同的标识通常可以不同的字符串来表征。具体地,可以将多个标识的字符串按照一定的顺序拼接在一起,从而构建出待匹配文本。作为示例,待匹配文本中包括4个字符串元素,其中每个字符串表征一个独特的标识。步骤s12、基于感兴趣信息形成目标文本的集合。在该步骤中,基于感兴趣信息来形成目标文本的集合,该集合中可以包括多个目标文本。在希望获知风险的场合中,感兴趣信息可以从相应的风险信息中提取,在提取过程中,还可以应用查询、分析、检索、组合等信息处理方式。步骤s14、将待匹配文本按树结构进行解析。其中,树结构的根节点的每一个子节点对应于待匹配文本的至少一个字符。需要说明的是,将待匹配文本按树结构进行解析并非意味着按照树结构来存储或进行后续计算,实际上,待匹配文本是在步骤s16中按照基于数组结构的存储表来存储的。应理解,在现有技术中,传统的多模式匹配算法可能需要构建树结构,树结构主要包括基于数组和基于链表两种方式,基于数组的多模式匹配算法在构建树时,由于在每个节点保存所有字符的集合,存在着大量的空间浪费,在运算时对于内存要求过高。而基于链表的树结构虽然避免了空间浪费,但是因为查找中需要多次回溯至根节点,所以增加了查询复杂度,造成匹配效率较低。为克服上述现有技术的缺陷,根据本发明上述实施例,将待匹配文本按树结构来解析,但是按照以下步骤s16中提出的存储表来存储及用于运算。优选情况下,基于aho-corasick算法(又称为ac自动机算法,简称ac算法)将待匹配文本按树结构进行解析。作为示例,经由解析可形成基于ac算法的树结构,这种树结构具有以下特征:(1)、树结构根节点的各直接子节点与各标识的首字符一一对应。(2)、各标识对应的字符串分别定义为树结构的相应子树。步骤s16、基于树结构来构建存储表。具体来说,存储表记录每个标识在树结构中所对应的至少一个节点,以及其中每个节点的节点位置以及节点状态,存储表可以采用二维数据结构来表征。在基于ac算法的应用场景下,在按照树结构进行解析之后,待匹配文本可以按存储表的形式来存储并参与后续的模式匹配运算。作为示例,在解析形成基于ac算法的树结构的情况下,存储表可以直接包括关于树结构的以下信息:每个节点对应的节点字符;每个节点所在的数组位置;每个节点的各子节点所在的数组位置;每个节点的各兄弟节点所在的数组位置;每个节点的输出状态;以及,每个节点的fail节点所在的数字位置。步骤s18、基于存储表与目标文本的集合进行多模式匹配。在上述步骤s16中,存储表不仅直接反映了按照树结构来解析的待匹配文本,其中还包括每个字符所处的节点位置、子节点位置、兄弟节点位置,以及每个节点的状态(例如,节点的输出状态为“是”表示该节点能够对应于一个标识的字符串的尾字符),这种包含多种额外信息的数组结构相对于基于链表的树结构、以及基于简单数组结构的树结构,能够为多模式匹配运算带来显著的技术效果。具体来说,利用存储表来进行多模式匹配运算,相比基于链表的树结构而言,会需要多一些的存储空间,但是,相比基于简单数组的树结构而言,则远远节省了空间;同时,由于查找字符是针对更像数组的存储表来进行,相比于基于链表的树结构,节省了回溯的时间,使得遍历速度更快、查找效率更高。最终,多模式匹配算法能够更高效地执行,在参与匹配的模式数量更多的场合,本发明提供的算法在执行效率上具有相当多的提升。根据本发明一个实施例,上述用于文本间匹配的算法能够应用于确定开源软件的许可证是否存在风险或不兼容。在这种应用中,本文所述“标识”可以直接来源于开源软件的许可证的一个或多个键,“感兴趣信息”则来源于开源软件所涉及的风险信息和/或不兼容信息。作为上述实施例的进一步改进,还可进一步地确定每个包含风险信息和/或不兼容信息的许可证的键在待匹配文本中的位置。作为另一种改进,还可进一步确定各个包含风险信息和/或不兼容信息的许可证的键之间的共性;随之,又可以分析这种共性,进而对许可证的生成机制进行改进。以下进一步说明上述实施例的一种具体执行方式。一、假设许可证的键的集合为p{ba、bac、bat、acr},按照ac算法,构建待匹配文本(即许可证的键的集合)的树结构如图3所示。二、树结构的节点的数据结构定义为:节点位置、节点字符、子节点位置、兄弟节点位置、是否输出、fail节点位置。构建基于二维数组结构的goto表采用如下具体方法:根节点不存储在数组当中,默认数组1的位置存储根节点的第一个子节点。初始化数组指示位置n=2,依次执行下述步骤:a)依次拿出集合p中的每个字符串si,同时将字符串指示位置m=1,初始化当前位置k=1,执行b;b)查看数组当前位置k的节点字符是否为空,如果为空,则将数组当前位置k进行赋值:节点字符设为si的第m个字符,令n=n+1,如果m等于si的长度,则将是否输出设为true,并跳转到a,否则设为false,执行c;如果不为空,则比较si的第m个字符与位置k保存的节点字符是否相等,如果相等,则执行c,如果不相等,则执行d;c)查看数组当前位置k保存的子节点位置t是否为空,如果t为空,则设置位置k子节点位置为n,令k=n,m=m+1,执行b;如果t不为空,则令k=t,m=m+1,执行b;d)查看数组当前位置k保存的兄弟节点位置r是否为空,如果r为空,则设置位置k兄弟节点位置为n,令k=n,执行b;如果r不为空,则令k=r,执行b;e)重复上述步骤,直到集合p中的所有字符串si都插入到了数组中,以上图为例,则构建完成后数组如下。三、完成goto表后,再为基于ac算法的树结构添加失败路径,可得到有限状态机图(包含goto节点和fail节点),如图4所示。其中,fail节点位置计算方式如下:1)将根节点指向的第一个子节点(节点位置1)压入队列,根据第一个子节点(节点位置1)指向的兄弟节点遍历,将根节点所有的子节点压入队列,并将根节点的所有子节点fail节点位置全部设为0;2)按照先进先出的顺序,逐个取出队列中的节点,如果其存在子节点,计算其子节点的fail节点位置。一个子节点的fail值计算完毕后,便将此节点压入队列。如果不存在子节点,则不需压子节点进队列的操作。如果此节点的fail值为0,则逐个匹配第一层节点,如果存在与此节点相同的字符,则此节点的当前子节点fail值等于第一层节点中相同字符的节点位置,如果不存在,则fail值等于0;如果此节点的fail值不为0,则比较此节点fail节点所有子节点的字符和此节点的当前子节点的字符,如果存在相同字符,则此节点的当前子节点fail值等于fail节点中与其相同字符的位置,如果不同,则查看父节点fail值,并进行上述的比较,直到索引到根节点或者找到相同字符。上面的例子中,构建完毕后数组如下:四、计算output表。构建goto表时,如果一个许可证的键已构建完毕,则将完毕时的当前节点设为输出节点,并将此节点的位置写入output表。在计算fail值时,如果fail值指向的节点的输出状态为“是”,则将该节点的output值也写入当前节点的output值。output表的示例如下:ioutput(i)2{ba}3{ba,bac}4{ba,bat}7{acr}五、构建ac算法树后,对于开源软件其中一种风险,通过对许可证的键文本s使用许可证的键集合p构建的ac算法树进行多模式匹配,即可扫描出开源软件中是否包含该风险,以及包含该风险的是哪个许可证(还有许可证的位置)等信息。具体扫描步骤如下:1)从根节点root的节点位置最小的子节点(节点位置1)开始,进行字符匹配。如果字符相同,则跳到相同字符的子节点继续匹配;如果不相同,则跳到fail节点的位置,继续比较所有子节点与下一个字符;2)如果root子节点(节点位置1)下所有的路径遍历不匹配,则从root子节点(节点位置1)的兄弟节点(节点位置5)开始进行遍历匹配;3)当节点的标志位为输出节点时,将当前节点的所有output值输出,即包含的所有许可证进行输出;4)继续上述步骤直到许可证的键文本s扫描完毕,如输出许可证,即表示开源软件包含该风险,而包含该风险的许可证即为输出的许可证。可以理解,为确定许可证是否涉及风险库和不兼容库中的每一类,有必要重复执行上述步骤三至五,以检索出开源软件中包含的所有风险或不兼容,以及所涉及的各许可证,这些许可证的位置或共性。如图2所示,本发明第二实施例提供一种文本间多模式匹配系统,其包括待匹配文本构建单元201、树结构形成单元202、表存储单元203以及多模式匹配单元204。具体地,待匹配文本构建单元201基于至少一个标识构建待匹配文本。树结构形成单元202与待匹配文本构建单元201耦合,其用于将待匹配文本按树结构进行解析。其中,树结构的根节点的每一个子节点对应于待匹配文本的至少一个字符。表存储单元203与树结构形成单元202耦合,其用于基于树结构来构建存储表。其中,存储表记录每个标识在树结构中所对应的至少一个节点,以及其中每个节点的节点位置以及节点状态。多模式匹配单元204与表存储单元203耦合,其用于基于存储表与目标文本的集合进行多模式匹配。该文本间多模式匹配系统采用本发明上述第一实施例中提供的用于文本间匹配的方法将待匹配文本解析为基于ac算法的树结构,进而,利用goto表来存储这种树结构,最终,利用包含了多种额外信息的goto表来直接进行多模式匹配运算。该系统执行效率高,也不需要大量存储空间,尤其适用于模式数量更多的场合。在本发明的一些实施例中,上述系统的至少一部分可采用通信网络所连接的一组分布式计算装置来实现,或,基于“云”来实现。在这种系统中,多个计算装置共同操作,以通过使用其共享资源来提供服务。作为示例,待匹配文本构建单元201、树结构形成单元202、表存储单元203设置于本地端,而多模式匹配单元204设置于云端,同时地进行针对多个本地端的多模式匹配。基于“云”的实现可提供一个或多个优点,包括:开放性、灵活性和可扩展性、可中心管理、可靠性、可缩放性、对计算资源所优化、具有聚合和分析跨多个用户的信息的能力、跨多个地理区域进行连接、以及将多个移动或数据网络运营商用于网络连通性的能力。根据本发明另一实施例,提供一种计算机存储介质,其上存储有计算机可执行指令,其中,所述计算机可执行指令在由处理器执行时,实现以上第一实施例所公开的方法。根据本发明又一实施例,提供一种控制器,该控制器在执行储存于存储器中的可执行指令时,执行以上第一实施例所公开的方法的各个步骤。上述说明仅针对于本发明的优选实施例,并不在于限制本发明的保护范围。本领域技术人员可能作出各种变形设计,而不脱离本发明的思想及附随的权利要求。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1