一种文本差异性的计算方法及装置与流程

文档序号:12733607阅读:408来源:国知局
一种文本差异性的计算方法及装置与流程

本发明涉及自然语言处理领域,特别涉及一种文本差异性的计算方法及装置。



背景技术:

在自然语言处理中,经常会涉及对文本中多个字符串的处理,如统计不同字符串的差异。目前用于计算文本差异性的文本差异性算法主要有编辑距离算法(LD),最长公共子序列(LCS),Needleman-Wunsch算法等。编辑距离算法,是目前用来计算两个字符串的相似度比较流行的算法,可以如图1所示。设有两个字符串A和B,字符串差异计算就是统计一个字符串A转换为另一个字符串B过程中所添加、删除或修改操作的最少次数。

现有技术中的文本差异性算法,如编辑距离算法,一般基于动态规划的思想,将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解,完成一次编辑距离算法的时间复杂度为O(m*n)(m为字符串A长度,n为字符串B长度)。而在实际自然语言处理应用中,随着对问题的精确度要求越来越高,处理数据规模会越来越大,从而会导致计算文本差异性算法的运算时间复杂度急剧增加。因此,如何降低计算文本差异性算法的运算时间复杂度,提高文本差异性算法的计算性能,是现今急需解决的问题。



技术实现要素:

本发明的目的是提供一种文本差异性的计算方法及装置,以通过将问题二次分解,降低文本差异性算法的运算时间复杂度,提高文本差异性算法的计算性能。

为解决上述技术问题,本发明提供一种文本差异性的计算方法,包括:

将待比较的多个字符串进行分解,获取每个所述字符串对应的多个子字符串;

将多个所述字符串各自对应的多个子字符串进行对比,获取一个或多个差异子字符串组;其中,所述差异子字符串组为多个所述字符串各自对应的一个相互存在差异的子字符串的组合;

将所述差异子字符串组通过文本差异性算法进行差异计算,获取每个所述差异子字符串组对应的子差异值;

将全部所述子差异值求和,获取多个所述字符串的差异值。

可选的,所述将多个所述字符串各自对应的多个子字符串进行对比,获取一个或多个差异子字符串组,包括:

通过Hash函数,将每个所述字符串对应的多个所述子字符串进行Hash计算,生成Hash表;其中,所述Hash表包括对应的所述字符串中每个所述子字符串对应的Hash值和每个所述Hash值与对应的所述子字符串的位置的对映关系;

通过多个所述字符串各自对应的所述Hash表的对比,获取一个或多个所述差异子字符串组;其中,所述差异子字符串组包括多个所述字符串各自对应的位置相同但所述Hash值不同的一个所述子字符串。

可选的,所述将待比较的多个字符串进行分解,获取每个所述字符串对应的多个子字符串,包括:

将每个所述字符串以逗号或句号进行分割,获取每个所述字符串对应的多个所述子字符串。

可选的,所述将每个所述字符串以逗号或句号进行分割,获取每个所述字符串对应的多个所述子字符串之前,还包括:

判断每个所述字符串是否达到预设长度;

若是,则执行所述将每个所述字符串以逗号或句号进行分割,获取每个所述字符串对应的多个所述子字符串的步骤;

若否,则将每个所述字符串通过文本差异性算法进行差异计算,获取每个所述字符串对应的所述差异值。

可选的,所述将所述差异子字符串组通过文本差异性算法进行差异计算,获取每个所述差异子字符串组对应的子差异值,包括:

将所述差异子字符串组通过编辑距离算法进行编辑距离计算,获取每个所述差异子字符串组对应的子编辑距离。

此外,本发明还提供了一种文本差异性的计算装置,包括:

分解模块,用于将待比较的多个字符串进行分解,获取每个所述字符串对应的多个子字符串;

对比模块,用于将多个所述字符串各自对应的多个子字符串进行对比,获取一个或多个差异子字符串组;其中,所述差异子字符串组为多个所述字符串各自对应的一个相互存在差异的子字符串的组合;

计算模块,用于将所述差异子字符串组通过文本差异性算法进行差异计算,获取每个所述差异子字符串组对应的子差异值;

统计模块,用于将全部所述子差异值求和,获取多个所述字符串的差异值。

可选的,所述对比模块,包括:

Hash表生成子模块,用于通过Hash函数,将每个所述字符串对应的多个所述子字符串进行Hash计算,生成Hash表;其中,所述Hash表包括对应的所述字符串中每个所述子字符串对应的Hash值和每个所述Hash值与对应的所述子字符串的位置的对映关系;

Hash表对比子模块,用于通过多个所述字符串各自对应的所述Hash表的对比,获取一个或多个所述差异子字符串组;其中,所述差异子字符串组包括多个所述字符串各自对应的位置相同但所述Hash值不同的一个所述子字符串。

可选的,所述分解模块,包括:

符号分割子模块,用于将每个所述字符串以逗号或句号进行分割,获取每个所述字符串对应的多个所述子字符串。

可选的,该装置还包括:

判断模块,用于判断每个所述字符串是否达到预设长度;若是,则向所述符号分割子模块发送分割信号;若否,则向字符串计算模块发送启动信号;

字符串计算模块,用于将每个所述字符串通过文本差异性算法进行差异计算,获取每个所述字符串对应的所述差异值。

可选的,所述计算模块,包括:

编辑距离算法计算子模块,用于将所述差异子字符串组通过编辑距离算法进行编辑距离计算,获取每个所述差异子字符串组对应的子编辑距离。

本发明所提供的一种文本差异性的计算方法,包括:将待比较的多个字符串进行分解,获取每个所述字符串对应的多个子字符串;将多个所述字符串各自对应的多个子字符串进行对比,获取一个或多个差异子字符串组;其中,所述差异子字符串组为多个所述字符串各自对应的一个相互存在差异的子字符串的组合;将所述差异子字符串组通过文本差异性算法进行差异计算,获取每个所述差异子字符串组对应的子差异值;将全部所述子差异值求和,获取多个所述字符串的差异值;

可见,本发明通过将待比较的多个字符串进行分解,可以将长的字符串分解成多个子字符串,通过将多个所述字符串各自对应的多个子字符串进行对比,可以提取出带比较的字符串中存在差异的子字符串,再将这些子字符串运用现有的文本差异性算法进行差异计算和统计,避免了对复杂的长的字符串的直接计算操作,降低了文本差异性算法的运算时间复杂度,提高了文本差异性算法的计算性能,提升了用户体验。此外,本发明还提供了一种文本差异性的计算装置,同样具有上述有益效果。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为现有技术中编辑距离算法的实现示意图;

图2为本发明实施例所提供的一种文本差异性的计算方法的流程图;

图3为本发明实施例所提供的另一种文本差异性的计算方法的流程图;

图4为本发明实施例所提供的另一种文本差异性的计算方法的实现示意图;

图5为本发明实施例所提供的一种文本差异性的计算装置的结构图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参考图2,图2为本发明实施例所提供的一种文本差异性的计算方法的流程图。该方法可以包括:

步骤101:将待比较的多个字符串进行分解,获取每个所述字符串对应的多个子字符串。

其中,待比较的多个字符串可以为用户输入的想要进行差异比较的文档,进行比较的文档可以是两个,如比较两个文档的差异性,也可以为两个以上个,如比较三个或四个文档的差异性,对于字符串的数量,可以与用户输入的字符串的数量对应,本实施例对此不受任何限制。将待比较的字符串进行分解的方式,可以通过字符串中的符号进行分割的方式,如将待比较的两个文档以文中逗号或句号分割成每个文档各自对应的多句话,也可以通过其他方式,只要可以将字符串分解成可以用于比较差异性的多个子字符串,对于具体的分解方式,本实施例不做任何限制。

需要说明的是,本步骤之前还可以包括获取输入的待比较的字符串的步骤,对于输入待比较字符串的方式,可以为用户手动输入,也可以为有线或无线的文档传输,本实施例不做任何限制;对于获取的待比较的字符串的具体内容,可以为单独的字符串,也可以为字符串和每个字符串对应的长度,可以根据接下来所使用的文本差异性算法获取对应的所需信息,如使用文本差异性算法中的过编辑距离算法需要获取字符串对应的长度,则可以直接获取输入的待比较的字符串和每个字符串对应的长度,本实施例对此同样不受任何限制。

可以理解的是,在本步骤之前还可以包括对输入的待比较的字符串的判断步骤,如判断字符串的长度是否达到预设长度;若是,则说明该字符串长度过长,需要通过本步骤进行分解;若否,则说明该字符串长度不长,运算复杂度不高,可以直接使用现有的文本差异性算法进行差异值的计算。本实施例对此不受任何限制。

步骤102:将多个所述字符串各自对应的多个子字符串进行对比,获取一个或多个差异子字符串组;其中,所述差异子字符串组为多个所述字符串各自对应的一个相互存在差异的子字符串的组合。

可以理解的是,将多个字符串各自对应的多个子字符串进行对比,可以为将带比较的字符串被分解成的子字符串与其他字符串分解成的子字符串相同的位置进行对比,如两个带比较的字符串各自均被分解成前后两个子字符串,则可以对两个前子字符串和两个后子字符串各自进行对比,若两个前子字符串对比存在差异,则这两个前子字符串为一个差异子字符串组。

需要说明的是,对于将多个字符串各自对应的多个子字符串进行对比的具体对比方式,可以通过先Hash映射,再从Hash表匹配获取差异子字符串组的方式,也可以通过其他的对比方式,只要可以获取差异子字符串组,也就是存在差异的子字符串,对于具体的对比方式,本实施例不做任何限制。

步骤103:将所述差异子字符串组通过文本差异性算法进行差异计算,获取每个所述差异子字符串组对应的子差异值。

其中,将差异子字符串组通过文本差异性算法进行差异计算,可以为将存在差异的一组或多组子字符串通过文本差异性算法进行差异计算,获取每组存在差异的子字符串的子差异值。

可以理解的是,对于文本差异性算法进行差异计算的具体方式,可以通过现有的文本差异性算法,如编辑距离算法(LD),最长公共子序列(LCS),Needleman-Wunsch算法等,也可以通过其他方法,只要可以获取通过文本差异性算法获取每组存在差异的子字符串的子差异值,对于文本差异性算法的具体方式,本实施例不做任何限制。

需要说明的是,子差异值可以为差异子字符串组通过文本差异性算法进行差异计算,获取的计算结果,如差异子字符串组通过编辑距离算法进行编辑距离计算,可以获取子编辑距离。

步骤104:将全部所述子差异值求和,获取多个所述字符串的差异值。

可以理解的是,本步骤的目的是将每个差异子字符串组的子差异值相加获取多个待比较的字符串的差异值。若多个待比较的字符串只存在一个差异子字符串组,则该差异子字符串组的子差异值就可以为多个待比较的字符串的差异值。

本实施例中,本发明实施例通过将待比较的多个字符串进行分解,可以将长的字符串分解成多个子字符串,通过将多个所述字符串各自对应的多个子字符串进行对比,可以提取出带比较的字符串中存在差异的子字符串,再将这些子字符串运用现有的文本差异性算法进行差异计算和统计,避免了对复杂的长的字符串的直接计算操作,降低了文本差异性算法的运算时间复杂度,提高了文本差异性算法的计算性能,提升了用户体验。

请参考图3和图4,图3为本发明实施例所提供的另一种文本差异性的计算方法的流程图;图4为本发明实施例所提供的另一种文本差异性的计算方法的实现示意图。该方法可以包括:

步骤201:获取输入的两个待比较的字符串和对应的长度。

其中,本实施例是以计算两个字符串的文本差异性的方式进行的展示,也可以通过类似的方式计算两个以上个字符串的文本差异性,本实施例对此不受任何限制。

可以理解的是,因为本实施例所提供的方法是通过编辑距离算法计算差异子字符串组的子编辑距离,也就是两个字符串被分解的后存在差异的一对子字符串的差异,所以需要两个待比较的字符串对应的长度,若通过其他文本差异性算法进行差异计算,则可以不输入待比较的字符串对应的长度或输入其他数据,本实施例对此不受任何限制。对于两个待比较的字符串对应的长度的获取方式,可以是与两个待比较的字符串共同输入的数据,也可以是输入两个待比较的字符串后,由本实施例所提供的方法计算出来的数据,只要可以获取两个待比较的字符串和对应的长度,对于具体的获取方式,本实施例不做任何限制。

步骤202:将每个字符串以逗号或句号进行分割,获取每个字符串对应的多个子字符串。

可以理解的是,将每个字符串以逗号或句号进行分割,可以为将获取的两个待比较的字符串也就是两个文档以各自文档中存在的逗号或句号进行分割,获取文档中的每一句话作为一个子字符串。

步骤203:通过Hash函数,将每个字符串对应的多个子字符串进行Hash计算,生成Hash表。

其中,Hash表包括对应的字符串中每个子字符串对应的Hash值和每个Hash值与对应的子字符串的位置的对映关系。

可以理解的是,每个字符串分解成的多个子字符串均可以通过Hash函数进行Hash计算,然后计算出每个子字符串各自对应的Hash值,然后将每个字符串对应的多个子字符串的Hash值,生成一个Hash表。每个字符串均可以生成一个Hash表,两个待比较的字符串可以生成一对Hash表,每个Hash表中保存着对应的待比较的字符串的全部子字符串对应的Hash值以及每个Hash值对应的子字符串在字符串中的位置。Hash值可以存储在以数组形式存储的Hash表中,也可以存储在其他存储方式中,如Hash值存储在数列中,本实施例对此不受任何限制。

需要说明的是,对于具体的Hash表的生成方式可以为每个待比较的字符串均生成一个Hash表,也可以为全部待比较的字符串生成一个Hash表,只要可以保证接下来的步骤可以通过生成Hash表比较并获取差异子字符串组,对于具体的Hash表的生成方式,本实施例不做任何限制。

步骤204:通过两个字符串各自对应的Hash表的对比,获取一个或多个差异子字符串组。

其中,差异子字符串组包括两个字符串各自对应的位置相同但Hash值不同的一个子字符串,也就是一对存在差异的子字符串。

可以理解的是,本实施例所提供的方法通过Hash计算实现字符串与整数(Hash值)的映射,减少内存占用和数据传输,并且通过Hash值匹配提取其中有效信息(即存在差异的子字符串),也就是说通过两个Hash表中相同位置的Hash值的比较,可以比较字符串中相同位置的子字符串,从而找出Hash值不同也就是一对或多对存在差异的子字符串,即一个或多个差异子字符串组。

需要说明的是,只要可以获取一个或多个差异子字符串组,对于具体的对比方式,如通过对比每个字符串均生成的一个Hash表中的Hash值,或通过对比全部字符串生成的一个Hash表中的Hash值,以及通过对比其他存储方式中的Hash值,本实施不做任何限制。

步骤205:将差异子字符串组通过编辑距离算法进行编辑距离计算,获取每个差异子字符串组对应的子编辑距离。

可以理解的是,本步骤的目的是通过如图1所示现有的编辑距离算法对差异子字符串组进行编辑距离计算,对于具体的编辑距离计算过程,可以通过如图1所示的方式,如需要差异子字符串组中一对子字符串的长度,可以通过计算或再次输入的方式,本实施例对此不受任何限制。

步骤206:将全部子编辑距离求和,获取两个待比较的字符串的编辑距离。

需要说明的是,本实施例所提供的方法的具体实现如图4所示,将全部子编辑距离求和可以为将一对待比较的字符串中全部差异子字符串组计算出的编辑距离相加,获取一对待比较的字符串的编辑距离,也就是这两个字符串的差异性。

本实施例中,本发明实施例通过Hash函数,将每个字符串对应的多个子字符串进行Hash计算,生成Hash表,可以实现字符串与整数(Hash值)的映射,减少内存占用和数据传输,通过两个字符串各自对应的Hash表的对比,获取一个或多个差异子字符串组,可以根据Hash值匹配提取Hash表中有效信息(即存在差异的子字符串),再将这些子字符串运用现有的编辑距离算法进行编辑距离计算和统计,避免了对复杂的长的字符串的直接计算操作,降低了文本差异性算法的运算时间复杂度,提高了文本差异性算法的计算性能,提升了用户体验。

请参考图5,图5为本发明实施例所提供的一种文本差异性的计算装置的结构图。该方法可以包括:

分解模块100,用于将待比较的多个字符串进行分解,获取每个所述字符串对应的多个子字符串;

对比模块200,用于将多个所述字符串各自对应的多个子字符串进行对比,获取一个或多个差异子字符串组;其中,所述差异子字符串组为多个所述字符串各自对应的一个相互存在差异的子字符串的组合;

计算模块300,用于将所述差异子字符串组通过文本差异性算法进行差异计算,获取每个所述差异子字符串组对应的子差异值;

统计模块400,用于将全部所述子差异值求和,获取多个所述字符串的差异值。

可选的,所述对比模块200,包括:

Hash表生成子模块,用于通过Hash函数,将每个所述字符串对应的多个所述子字符串进行Hash计算,生成Hash表;其中,所述Hash表包括对应的所述字符串中每个所述子字符串对应的Hash值和每个所述Hash值与对应的所述子字符串的位置的对映关系;

Hash表对比子模块,用于通过多个所述字符串各自对应的所述Hash表的对比,获取一个或多个所述差异子字符串组;其中,所述差异子字符串组包括多个所述字符串各自对应的位置相同但所述Hash值不同的一个所述子字符串。

可选的,所述分解模块100,包括:

符号分割子模块,用于将每个所述字符串以逗号或句号进行分割,获取每个所述字符串对应的多个所述子字符串。

可选的,该装置还包括:

判断模块,用于判断每个所述字符串是否达到预设长度;若是,则向所述符号分割子模块发送分割信号;若否,则向字符串计算模块发送启动信号;

字符串计算模块,用于将每个所述字符串通过文本差异性算法进行差异计算,获取每个所述字符串对应的所述差异值。

可选的,所述计算模块300,包括:

编辑距离算法计算子模块,用于将所述差异子字符串组通过编辑距离算法进行编辑距离计算,获取每个所述差异子字符串组对应的子编辑距离。

本实施例中,本发明实施例通过分解模块100将待比较的多个字符串进行分解,可以将长的字符串分解成多个子字符串,通过对比模块200将多个所述字符串各自对应的多个子字符串进行对比,可以提取出带比较的字符串中存在差异的子字符串,再将这些子字符串运用现有的文本差异性算法进行差异计算和统计,避免了对复杂的长的字符串的直接计算操作,降低了文本差异性算法的运算时间复杂度,提高了文本差异性算法的计算性能,提升了用户体验。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的文本差异性的计算方法及装置进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1