文本重复性判定方法和装置、电子设备和存储介质
技术领域
本公开涉及互联网技术,尤其是一种文本重复性判定方法和装置、电子设备和存储介质。
背景技术
文本相似度计算在信息检索、数据挖掘、机器翻译、文档复制检测等领域有着广泛的应用。例如用于对一个微博网站进行舆论控制时,可以将需要进行限制的句子提前录入数据库,那么当一个用户发微博时,可以先将用户收入的内容和数据库中的句子进行比较,如果符合数据库里的句子就不允许用户发出。
在实现本公开的过程中,发明人发现,现有的文本相似度算法,无法很好的解决文本的判断以及局部重复的现象。例如,对于常用的K-shingle算法,它的原理是,对于一段文本,文档的k-shingle定义为其中任意长度为k的子串,假设文本的分词向量为[w1,w2,w3,w4,…wn],k=3,那么该文本的shingle向量可表示为[(w1,w2,w3),(w2,w3,w4),(w3,w4,w5),……(wn-2,wn-1,wn)],通过计算两个文本的shingle向量的相似度(即jarccard系数)来判断两个文本是否重复。由于k-shingle算法的shingle向量空间巨大,尤其是在k的取值较大时,shingle向量空间更大,耗费的存储资源和计算资源较高;另外,k-shingle算法的比较粒度较细,由于词的数量有限,两个文本中有词重复并不能说明句子重复,而基于k-shingle算法,只要两个文本之间有词重复就会判定为两个文本重复,很容易误判,导致文本的重复性判断不准确。
发明内容
本公开实施例提供一种用于进行文本重复性判定的技术方案。
根据本公开实施例的一方面,提供的一种文本重复性判定方法,包括:
识别目标文本的长度;
若所述目标文本的长度大于第一预设值,将所述目标文本分割成长度不大于所述第一预设值的多个文本段;
分别利用签名simhash算法,获取所述多个文本段中每个文本段的签名值;
基于所述多个文本段的签名值与分布式全文搜索引擎ElasticSearch中历史文本的倒排索引信息,判定所述目标文本与历史文本之间是否重复;其中,所述ElasticSearch中存储有至少一个历史文本的倒排索引信息,所述历史文本的倒排索引信息包括:历史文本的签名值,以及长度大于第一预设值时历史文本被分割成的各文本段的签名值。
可选地,在本公开上述方法的任一实施例中,所述基于所述多个文本段的签名值与分布式全文搜索引擎ElasticSearch中历史文本的倒排索引信息,判定所述目标文本与历史文本之间是否重复,包括:
基于所述ElasticSearch中历史文本的倒排索引信息,获取所述目标文本的相似历史文本,所述相似历史文本为具有与所述多个文本段的签名值相同签名值的数量最多的历史文本;
根据所述相似历史文本与所述多个文本段中签名值相同的文本段的数量与所述多个文本段的数量,判定所述目标文本与所述历史文本之间是否重复。
可选地,在本公开上述方法的任一实施例中,所述根据所述相似历史文本与所述多个文本段中签名值相同的文本段的数量与所述多个文本段的数量,判定所述目标文本与所述历史文本之间是否重复,包括:
若所述相似历史文本与所述多个文本段中签名值相同的文本段的数量与所述多个文本段的数量之间的比值大于第二预设值,判定所述目标文本与所述历史文本之间重复。
可选地,在本公开上述方法的任一实施例中,所述基于所述多个文本段的签名值与分布式全文搜索引擎ElasticSearch中历史文本的倒排索引信息,判定所述目标文本与历史文本之间是否重复,包括:
将所述多个文本段的签名值进行拼接,得到所述目标文本的拼接签名值;
基于所述ElasticSearch的每个历史文本中各文本段的签名值拼接得到的拼接签名值中,是否存在与所述目标文本的拼接签名值之间的海明距离小于第三预设值的拼接签名值,判定所述目标文本与所述历史文本之间是否重复。
可选地,在本公开上述方法的任一实施例中,所述将所述目标文本分割成长度不大于所述第一预设值的多个文本段,包括:
从所述目标文本的第一个词开始,以预设窗口长度进行取词,并以预设步长移动,直到所述目标文本的最后一个词,得到所述多个文本段。
可选地,在本公开上述方法的任一实施例中,所述从所述目标文本的第一个词开始,以预设窗口长度进行取词,并以预设步长移动之前,还包括:
以预设领域的关键词分词器,对所述目标文本进行分词;
所述从所述目标文本的第一个词开始,以预设窗口长度进行取词,并以预设步长移动,包括:针对分词后的所述目标文本,从分词后的所述目标文本的第一个词开始,以预设窗口长度进行取词,并以预设步长移动。
可选地,在本公开上述方法的任一实施例中,所述识别目标文本的长度之前,还包括:
利用签名simhash算法,获取所述目标文本的签名值;
查询所述ElasticSearch中是否存在与所述目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值;
若所述ElasticSearch中不存在与所述目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,开始执行所述识别目标文本的长度的操作。
可选地,在本公开上述方法的任一实施例中,还包括:
若所述ElasticSearch中存在与所述目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,判定所述目标文本与历史文本之间重复。
可选地,在本公开上述方法的任一实施例中,在利用签名simhash算法获取文本段或目标文本的签名值的过程中,减少预设词的权重。
可选地,在本公开上述方法的任一实施例中,还包括:
在所述ElasticSearch中创建历史文本的倒排索引信息。
可选地,在本公开上述方法的任一实施例中,所述在所述ElasticSearch中创建一条历史文本的倒排索引信息,包括:
针对一条历史文本,利用签名simhash算法,获取所述一条历史文本的签名值;
识别所述一条历史文本的长度;
若所述历史文本的长度大于第一预设值,将所述一条历史文本分割成长度不大于所述第一预设值的多个历史文本段;
分别利用simhash算法,获取所述多个历史文本段中每个历史文本段的签名值;
基于所述一条历史文本的签名值、以及长度大于第一预设值时所述多个历史文本段的签名值对所述ElasticSearch中历史文本的倒排索引信息进行更新。
可选地,在本公开上述方法的任一实施例中,还包括:
响应于检测到新增文本,以检测到的新增文本作为目标文本,开始执行所述识别目标文本的长度的操作;
响应于判定所述目标文本与历史文本之间不重复,以所述目标文本作为所述一条历史文本,执行所述在所述ElasticSearch中创建所述一条历史文本的倒排索引信息的操作。
根据本公开实施例的另一方面,提供的一种文本重复性判定装置,包括:
识别模块,用于识别目标文本的长度;
分割模块,用于根据所述识别模块的识别结果,若所述目标文本的长度大于第一预设值,将所述目标文本分割成长度不大于所述第一预设值的多个文本段;
获取模块,用于分别利用签名simhash算法,获取所述多个文本段中每个文本段的签名值;
第一判定模块,用于基于所述多个文本段的签名值与分布式全文搜索引擎ElasticSearch中历史文本的倒排索引信息,判定所述目标文本与历史文本之间是否重复;其中,所述ElasticSearch中存储有至少一个历史文本的倒排索引信息,所述历史文本的倒排索引信息包括:历史文本的签名值,以及长度大于第一预设值时历史文本被分割成的各文本段的签名值。
可选地,在本公开上述装置的任一实施例中,所述第一判定模块包括:
确定单元,用于基于所述ElasticSearch中历史文本的倒排索引信息,获取所述目标文本的相似历史文本,所述相似历史文本为具有与所述多个文本段的签名值相同签名值的数量最多的历史文本;
第一判定单元,用于根据所述相似历史文本与所述多个文本段中签名值相同的文本段的数量与所述多个文本段的数量,判定所述目标文本与所述历史文本之间是否重复。
可选地,在本公开上述方法的任一实施例中,所述第一判定单元,具体用于若所述相似历史文本与所述多个文本段中签名值相同的文本段的数量与所述多个文本段的数量之间的比值大于第二预设值,判定所述目标文本与所述历史文本之间重复。
可选地,在本公开上述方法的任一实施例中,所述第一判定模块包括:
拼接单元,用于将所述多个文本段的签名值进行拼接,得到所述目标文本的拼接签名值;
第二判定单元,用于基于所述ElasticSearch的每个历史文本中各文本段的签名值拼接得到的拼接签名值中,是否存在与所述目标文本的拼接签名值之间的海明距离小于第三预设值的拼接签名值,判定所述目标文本与所述历史文本之间是否重复。
可选地,在本公开上述方法的任一实施例中,所述分割模块,具体用于从所述目标文本的第一个词开始,以预设窗口长度进行取词,并以预设步长移动,直到所述目标文本的最后一个词,得到所述多个文本段。
可选地,在本公开上述方法的任一实施例中,还包括:
分词单元,用于以预设领域的关键词分词器,对所述目标文本进行分词;
所述分割模块,具体用于针对分词后的所述目标文本,从分词后的所述目标文本的第一个词开始,以预设窗口长度进行取词,并以预设步长移动。
可选地,在本公开上述方法的任一实施例中,所述获取模块,还用于利用签名simhash算法,获取所述目标文本的签名值;
所述装置还包括:
第二判定模块,用于查询所述ElasticSearch中是否存在与所述目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值;若所述ElasticSearch中存在与所述目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,判定所述目标文本与历史文本之间重复;
所述识别模块,具体用于根据所述第二判定模块的查询结果,若所述ElasticSearch中不存在与所述目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,识别目标文本的长度。
可选地,在本公开上述方法的任一实施例中,所述获取模块,还用于在利用签名simhash算法获取文本段或目标文本的签名值的过程中,减少预设词的权重。
可选地,在本公开上述方法的任一实施例中,还包括:
ElasticSearch,存储有历史文本的倒排索引信息。
可选地,在本公开上述方法的任一实施例中,还包括:
检测模块,用于进行新增文本检测;
所述识别模块,具体用于响应于所述检测模块检测到新增文本,以检测到的新增文本作为目标文本,识别目标文本的长度;
更新模块,用于根据所述第一判定模块或所述第二判定模块的判定结果,若所述目标文本与历史文本之间不重复,以所述目标文本作为所述一条历史文本,在所述ElasticSearch中创建所述一条历史文本的倒排索引信息。
根据本公开实施例的又一方面,提供的一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现本公开上述任一实施例所述的方法。
根据本公开实施例的再一方面,提供的一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,实现本公开上述任一实施例所述的方法。
基于本公开上述实施例提供的文本重复性判定方法和装置、电子设备和存储介质,预先在ElasticSearch中存储包括历史文本的倒排索引信息,其可以包括历史文本的签名值、以及长度大于第一预设值时历史文本被分割成的各文本段的签名值,在目标文本的长度大于第一预设值时,将目标文本分割成长度不大于第一预设值的多个文本段,分别利用签名simhash算法,获取多个文本段中每个文本段的签名值,然后基于多个文本段的签名值与ElasticSearch中历史文本的倒排索引信息,来判定目标文本与历史文本之间是否重复,从而实现了目标文本与历史文本之间的重复性判定。
本公开实施例中,在长度大于第一预设值时,由于将目标文本分割成长度不大于第一预设值的多个文本段、通过多个文本段的签名值来进行重复性判定,从句子维度上实现了文本内容的重复性判定,可以有效识别较长文本之间部分内容重复的问题;并且,相对于k-shingle算法,降低了所需的存储资源和计算资源,避免了只要文本之间有词重复就会判定为两个文本重复导致的误判,提高了重复性判定的准确性。
另外,本公开实施例中,利用ElasticSearch倒排索引的高效性,基于多个文本段的签名值与ElasticSearch中历史文本的倒排索引信息来判定目标文本与历史文本之间是否重复,减少了计算量,提高了效率,减少了服务响应时间。
下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
附图说明
构成说明书的一部分的附图描述了本公开的实施例,并且连同描述一起用于解释本公开的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:
图1为本公开文本重复性判定方法一个实施例的流程图。
图2为本公开文本重复性判定方法另一个实施例的流程图。
图3为本公开实施例中ElasticSearch中的一个倒排索引示例。
图4为本公开文本重复性判定方法又一个实施例的流程图。
图5为本公开文本重复性判定方法又一个实施例的流程图。
图6为本公开文本重复性判定方法再一个实施例的流程图。
图7为本公开实施例的一个应用示例图。
图8为本公开文本重复性判定装置一个实施例的结构示意图。
图9为本公开文本重复性判定装置另一个实施例的结构示意图。
图10为本公开电子设备实施例的一个示例性框图。
具体实施方式
现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
本领域技术人员可以理解,本公开实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示它们之间的必然逻辑顺序。
还应理解,在本公开实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。
还应理解,对于本公开实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。
另外,本公开中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本公开中字符“/”,一般表示前后关联对象是一种“或”的关系。
还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本公开实施例可以应用于终端设备、计算机系统、服务器等电子设备,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与终端设备、计算机系统、服务器等电子设备一起使用的众所周知的终端设备、计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
终端设备、计算机系统、服务器等电子设备可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
图1为本公开文本重复性判定方法一个实施例的流程图。如图1所示,该实施例的文本重复性判定方法包括:
102,识别目标文本的长度。
104,若目标文本的长度大于第一预设值,将目标文本分割成长度不大于第一预设值的多个文本段。
在其中一些实施方式中,第一预设值的取值范围可以为3-60,或者还可以取其他取值范围内的任意值。
106,分别利用签名(simhash)算法,获取多个文本段中每个文本段的签名值。
108,基于上述多个文本段的签名值与分布式全文搜索引擎(ElasticSearch)中历史文本的倒排索引信息,判定目标文本与历史文本之间是否重复。
其中,ElasticSearch中存储有至少一个历史文本的倒排索引信息(也称为倒排索引表),该倒排索引信息可以包括:历史文本的签名值,以及长度大于第一预设值时历史文本被分割成的各文本段的签名值。
基于本公开上述实施例提供的文本重复性判定方法,预先在ElasticSearch中存储包括历史文本的倒排索引信息,其可以包括历史文本的签名值、以及长度大于第一预设值时历史文本被分割成的各文本段的签名值,在目标文本的长度大于第一预设值时,将目标文本分割成长度不大于第一预设值的多个文本段,分别利用签名simhash算法,获取多个文本段中每个文本段的签名值,然后基于多个文本段的签名值与ElasticSearch中历史文本的倒排索引信息,来判定目标文本与历史文本之间是否重复,从而实现了目标文本与历史文本之间的重复性判定。在长度大于第一预设值时,由于将目标文本分割成长度不大于第一预设值的多个文本段、通过多个文本段的签名值来进行重复性判定,从句子维度上实现了文本内容的重复性判定,可以有效识别较长文本之间部分内容重复的问题;并且,相对于k-shingle算法,降低了所需的存储资源和计算资源,避免了只要文本之间有词重复就会判定为两个文本重复导致的误判,提高了重复性判定的准确性。另外,利用ElasticSearch倒排索引的高效性,基于多个文本段的签名值与ElasticSearch中历史文本的倒排索引信息来判定目标文本与历史文本之间是否重复,减少了计算量,提高了效率,减少了服务响应时间。
图2为本公开文本重复性判定方法另一个实施例的流程图。如图2所示,该实施例的文本重复性判定方法包括:
202,利用签名simhash算法,获取目标文本的签名值(Fingerprints)。
204,查询ElasticSearch中是否存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值。
若ElasticSearch中存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,执行操作206。否则,若ElasticSearch中不存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,执行操作208。
在其中一些实施方式中,第四预设值可以是3。即,若ElasticSearch中存在与目标文本的签名值之间的海明距离小于3的签名值,则确定历史文本中存在与目标文本内容重复的文本段;否则,若ElasticSearch中不存在与目标文本的签名值之间的海明距离小于3的签名值,则确定历史文本中不存在与目标文本的内容重复的文本段。
206,判定目标文本与历史文本之间重复。
如果执行操作206,则不执行本实施例的后续流程。
208,识别目标文本的长度是否大于第一预设值。
若目标文本的长度大于第一预设值,执行操作210。否则,若目标文本的长度不大于第一预设值,不执行本实施例的后续流程。
210,将目标文本分割成长度不大于第一预设值的多个文本段。
212,分别利用simhash算法,获取多个文本段中每个文本段的签名值。
214,基于上述多个文本段的签名值与ElasticSearch中历史文本被分割成的各文本段的签名值,判定目标文本与历史文本之间是否重复。
基于该实施例,先利用签名simhash算法获取目标文本的签名值,根据ElasticSearch中是否存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,若ElasticSearch中存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,可以判定目标文本与历史文本之间重复,无需再将目标文本分割为多个文本段比较签名值,提高了判定效率,缩短了服务响应时间。若ElasticSearch中不存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,基于多个文本段的签名值与ElasticSearch中历史文本的倒排索引信息可判定目标文本与历史文本之间是否重复,从而实现了针对不同长度的目标文本自适应地判定文本重复性,实现了文本重复性判定的高效性和准确性。
本公开实施例中,以下以利用simhash算法获取一个文本段的签名值为例,进行说明,对于利用simhash算法获取一个文本的签名值,同样适用。利用simhash算法获取一个文本段的签名值的流程可以分为5个步骤:分词、hash、加权、合并、降维,具体过程如下所述:
步骤一:分词。给定一个文本段,进行分词,得到有效的特征向量,然后为每一个特征向量设置1-5等5个级别的权重,其中的特征向量可以是文本段中的词,其权重可以是这个词在文本段中出现的次数。例如给定一个文本段:“CSDN博客结构之法算法之道的作者July”,分词后为:
“CSDN博客结构之法算法之道的作者July”,然后为每个特征向量赋予权值:CSDN(4)博客(5)结构(3)之(1)法(2)算法(3)之(1)道(2)的(1)作者(5)July(5),其中括号里的数字代表这个词在整个文本段中的重要程度,数字越大代表越重要。
步骤二:hash。通过hash函数计算各个特征向量的hash值,hash值为二进制数01组成的n-bit签名。例如“CSDN”的hash值Hash(CSDN)为100101,“博客”的hash值Hash(博客)为“101011”,这样,字符串就变成了一系列数字。
步骤三:加权。在步骤二得到的hash值的基础上,给所有特征向量进行加权,即W=Hash值*权重,且遇到1则hash值和权值正相乘,遇到0则hash值和权值负相乘。例如给“CSDN”的hash值“100101”加权得到:W(CSDN)=100101 4=4 -4 -4 4 -4 4,给“博客”的hash值“101011”加权得到:W(博客)=101011 5=5 -5 5 -5 5 5,其余特征向量类似此般操作。
步骤四:合并。将上述各个特征向量的加权结果累加,变成只有一个序列串。拿前两个特征向量举例,例如“CSDN”的“4 -4 -4 4 -4 4”和“博客”的“5 -5 5 -5 5 5”进行累加,得到“4+5 -4+-5 -4+5 4+-5 -4+5 4+5”,得到“9 -9 1 -1 1 9”。
步骤五:降维。对于n-bit签名的累加结果,如果大于0则置1,否则置0,从而得到该语句的simhash值,最后我们便可以根据不同语句simhash的海明距离来判断它们的相似度。例如把上面计算出来的“9 -9 1 -1 1 9”降维(某位大于0记为1,小于0记为0),得到的01串为:“1 0 1 0 1 1”,从而形成64位长度的simhash签名(即签名值)。
利用simhash算法,获取文本段的SimHash签名值后,接着计算两个文本段的签名值之间的海明距离即可判定这两个文本段之间是否重复。根据实际应用中的经验值,对64位的签名值,海明距离在3以内的可认为两个文本段之间的相似度比较高(即认为二者重复)。求取两个签名值之间的海明距离时,只有在两个签名值比较的位不同时其结果是1,否则结果为0,两个二进制“异或”后得到1的个数即为海明距离的大小。例如,上面例子中“CSDN博客”的签名值为“1 0 1 0 1 1”,假定计算出另外一个短语的签名值为“1 0 1 0 00”,那么根据异或规则,可以计算出这两个签名值之间的海明距离为2,从而判定这两个短语的相似度是比较高的。由此,对于64位的签名值,只要找到海明距离在3以内的所有签名值,即可找出所有相似的文本段。
在实现本公开的过程中,发明人通过研究发现,在计算文本相似性的过程中,要涉及到大量文本向量的计算,文本的数量级就可以达到千万,如果用本地资源或者远程数据服务(Remote Dictionary Server,Redis)等存储,需要占用的存储资源非常高,计算的效率将会非常低。在本公开实施例的一些实施方式中,可以将64位的二进制签名值simhash分成4块,每块16位。根据鸽巢原理(也称抽屉原理),如果两个文本Q和Q’的签名值之间的海明距离hd(Q,Q’)在3以内,它们必有一块完全相同;将分成的4块中的每一个块分别作为前16位来进行查找,建倒排索引,如图3所示。如此,如果样本库中存有2^34(差不多10亿)的签名值,则每个倒排索引表返回2^(34-16)=262144个候选结果,大大减少了海明距离的计算成本。假设数据是均匀分布,16位的数据,产生的像限为2^16个,则平均每个像限分布的文档数则为2^34/2^16=2^(34-16)),4个块返回的总结果数为4*262144。这样,原本需要比较10亿次,经过索引后,大概只需要处理100万次。
本公开实施例中,预先在ElasticSearch中创建历史文本的签名值的倒排索引信息,在对文本段或文本与历史文本进行比对时,可以利用倒排索引的高效性,快速的计算两个签名值之间的海明距离,从而判定目标文本与历史文本之间是否重复,提高了计算量,提高了计算效率,可以实现高效的计算和召回,极大地节约了存储资源和服务响应时间。
图4为本公开文本重复性判定方法又一个实施例的流程图。如图4所示,在图1或图2所示实施例的基础上,操作108或212包括:
302,基于ElasticSearch中历史文本的倒排索引信息,获取目标文本的相似历史文本,该相似历史文本为具有与上述多个文本段的签名值相同签名值数量最多的历史文本。
在其中一些可选示例中,可以将上述多个文本段的签名值分别与各历史文本被分割成的文本段的签名值进行比较,获取文本段的签名值与上述多个文本段的签名值具有相同签名值数量最多的一个历史文本,即为相似历史文本,即,在ElasticSearch的各历史文本中,相似历史文本与目标文本二者之间的文本段的签名值重合度最高、相同的数量最多。例如,基于ElasticSearch中历史文本的倒排索引信息,历史文本A包括5个文本段,历史文本B包括9个文本段,历史文本C包括12个文本段,目标文本包括8个文本段,历史文本A中有4个文本段的签名值与目标文本中4个文本段的签名值相同,历史文本B中有3个文本段的签名值与目标文本中3个文本段的签名值相同,历史文本C中有5个文本段的签名值与目标文本中5个文本段的签名值相同,则历史文本C为该目标文本的相似历史文本。
在两个文本段的签名值相同时,说明这两个文本段内容相同,由于相似历史文本为具有与上述多个文本段的签名值相同签名值数量最多的历史文本,说明该相似历史文本与目标文本的内容重复最多,相似性最高。
304,根据相似历史文本与上述多个文本段中签名值相同的文本段的数量与多个文本段的数量,判定目标文本与历史文本之间是否重复。
在其中一些实施方式中,操作304中,可以计算相似历史文本与上述多个文本段中签名值相同的文本段的数量与上述多个文本段的数量之间的比值,若该比值大于第二预设值(例如80%),可以判定目标文本与相似历史文本之间重复,即与历史文本重复。否则,若该比值不大于第二预设值(例如80%),可以判定目标文本与历史文本之间不重复。
或者,也可以根据相似历史文本与上述多个文本段中签名值相同的文本段的数量是否大于第五预设值(例如8),来判定目标文本与相似历史文本之间重复,即与历史文本重复。若相似历史文本与上述多个文本段中签名值相同的文本段的数量大于第五预设值,可以判定目标文本与历史文本之间重复。否则,若相似历史文本与上述多个文本段中签名值相同的文本段的数量不大于第五预设值,可以判定目标文本与历史文本之间不重复。
基于该实施例,可以通过历史文本中文本段的签名值与目标文本中文本段的签名值之间相同签名值的数量,来判定目标文本与历史文本之间是否重复。
图5为本公开文本重复性判定方法又一个实施例的流程图。如图5所示,在图1所示实施例的基础上,操作108包括:
402,将多个文本段的签名值进行拼接,得到目标文本的拼接签名值。
404,基于ElasticSearch的每个历史文本中各文本段的签名值拼接得到的拼接签名值中,是否存在与目标文本的拼接签名值之间的海明距离小于第三预设值的拼接签名值,判定目标文本与历史文本之间是否重复。
其中,ElasticSearch中还可以存储有每个历史文本被分割成的各文本段的签名值拼接得到的拼接签名值,或者,也可以在执行本操作时分别针对每个历史文本被分割成的各文本段的签名值进行拼接,并将得到的拼接签名值与多个文本段的拼接签名值进行比较。
在其中一些实施方式中,第三预设值可以根据实际需求确定,例如可以是6。即,若ElasticSearch中存在与目标文本的拼接签名值之间的海明距离小于6的历史文本的拼接签名值,则判定目标文本与历史文本之间重复;否则,若ElasticSearch中不存在与目标文本的拼接签名值之间的海明距离小于6的签名值,在判定目标文本与历史文本之间不重复。
基于该实施例,可以先计算多个文本段的签名值,将多个文本段的签名值进行拼接,得到目标文本的拼接签名值,直接比较ElasticSearch中是否存在与目标文本的拼接签名值之间的海明距离小于第三预设值的拼接签名值,来判定目标文本与历史文本之间是否重复。
在本公开上述各实施例的一些实施方式中,操作104或210中,可以从目标文本的第一个词开始,以预设窗口长度进行取词,并以预设步长移动,直到目标文本的最后一个词,得到多个文本段。
其中,预设窗口长度可以是词的数量,该预设窗口长度例如可以是3-20中的任一取值;预设步长也可以是词的数量,该预设步长例如可以是1-6中的任一取值。
这样,可以将目标文本按照多种方式划分为各种可能的文本段,通过分别比较多个文本段与各历史文本中文本段的签名值,来判定目标文本与历史文本之间是否重复,使得目标文本与历史文本之间重复度的判定更全面、准确。
图6为本公开实施例的一个应用示例图。如图6所示,例如目标文本为“我们所在小区是中国最大五星小区不论在”,以预设领域的关键词分词器,对目标文本进行分词,得到如下词:“我们所在小区是中国最大五星小区不论在”,假设预设窗口长度为6,预设步长为2,以预设窗口长度6进行取词,并以预设步长2移动,直到目标文本的最后一个词,得到如下所示的3个文本段“我们所在小区是中国最大”、“小区是中国最大五星小区”、“中国最大五星小区不论在”。
图7为本公开文本重复性判定方法再一个实施例的流程图。如图7所示,该实施例的文本重复性判定方法包括:
502,利用签名simhash算法,获取目标文本的签名值。
504,查询ElasticSearch中是否存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值。
若ElasticSearch中存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,执行操作506。否则,若ElasticSearch中不存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,执行操作508。
506,判定目标文本与历史文本之间重复。
如果执行操作506,则不执行本实施例的后续流程。
在其中一些实施方式中,第四预设值可以是3。即,ElasticSearch中存在与目标文本的签名值之间的海明距离小于3的签名值,则判定目标文本与历史文本之间重复;否则,若ElasticSearch中不存在与目标文本的签名值之间的海明距离小于3的签名值,则判定目标文本与历史文本之间不重复。
508,识别目标文本的长度是否大于第一预设值。
若目标文本的长度大于第一预设值,执行操作510。否则,若目标文本的长度不大于第一预设值,执行操作520。
510,以预设领域的关键词分词器,对目标文本进行分词。
本公开实施例中,可以预先创建某领域的关键词库,关键词分词器可以基于该关键词库对目标文本进行分词,使得分词结果更加精准,减少了一些词被拆成单字或者错误的词而被误判为重复内容的情况,从而实现高效且准确的内容重复性判定。例如,针对文本“和心苑小区”,如果按照传统方式进行分词,会得到“和心苑小区”,预先创建房产领域的关键词库,其中包括房地产领域的关键词,利用该房地产领域的关键词分词器基于关键词库对上述文本进行分词,可以得到“和心苑小区”,使得分词结果更加精准。
512,针对分词后的目标文本,从分词后的目标文本的第一个词开始,以预设窗口长度进行取词,并以预设步长移动,直到目标文本的最后一个词,得到多个长度不大于第一预设值的文本段。
514,分别利用simhash算法,获取上述多个文本段中每个文本段的签名值。
516,基于ElasticSearch中历史文本的倒排索引信息,获取目标文本的相似历史文本,该相似历史文本为具有与上述多个文本段的签名值相同签名值数量最多的历史文本。
518,识别相似历史文本的文本段的签名值中与上述多个文本段中签名值相同的文本段的数量与该多个文本段的数量之间的比值是否大于第二预设值。
若相似历史文本的文本段的签名值中与上述多个文本段中签名值相同的文本段的数量与该多个文本段的数量之间的比值大于第二预设值,执行操作506。否则,若相似历史文本的文本段的签名值中与上述多个文本段中签名值相同的文本段的数量与该多个文本段的数量之间的比值不大于第二预设值,执行操作520。
520,判定目标文本与历史文本之间不重复。
基于本实施例,可以先比较ElasticSearch中历史文本的签名值与目标文本的签名值,来判定二者之间的内容重复情况,在据此无法判定二者内容重复的情况下,在目标文本的长度大于第一预设值时,将目标文本分割成长度不大于第一预设值的多个文本段,再通过该多个文本段的签名值与ElasticSearch中历史文本被分割成的多个文本段的签名值,来判定目标文本与历史文本之间是否重复,既可以避免由于粒度过细带来的误判断,也可以避免对文本整体计算hash值造成的遗漏,从而可以在文本重复性判定的过程中兼顾效率与准确性。例如,从一段文本中取了3句话作为一条新的文本,由于k-shingle算法是基于词维度的,不能针对句子维度进行,重复判定的结果并不可靠,而传统simhash算法对于长度相差比较大的文本得到的海明距离会比较大,也无法有效判断重复性。而基于本公开实施例,可以在目标文本的长度是否大于第一预设值时,将文本拆分为多个长度不大于第一预设值的文本段来进行相似性判断,则可以解决k-shingle算法的误判和传统simhash算法无法有效判断重复性的问题。
在实现本公开的过程中,本发明人发现,一些出现频率较高的词对于文本的重复性判定不重要,例如,在房产领域,评论里经常出现的一些地名、行政区划名称、小区名称等等其实对于文本的重复性判定不重要,在本公开上述各实施例的一些实施方式中,可以预设对于文本的重复性判定不重要的词,在利用签名simhash算法获取文本段或目标文本的签名值的过程中,可以减少预设词的权重,从而弱化这些词在文本重复性判定中的作用。
例如,在房产领域,在小区评论里会大量出现地名,通过预设房产领域预设词表,在对房产领域的评论进行分词处理的过程中,减少这些地名的权重,以达到弱化地名的作用,实现对评论更精准的重复性判断。
另外,在本公开上述各实施例的文本重复性判定方法中,还可以包括:在ElasticSearch中创建历史文本的倒排索引信息。
在其中一些实施方式中,在ElasticSearch中创建一条历史文本的倒排索引信息,可以包括:
针对上述一条历史文本,利用签名simhash算法,获取上述一条历史文本的签名值;
识别上述一条历史文本的长度;
若历史文本的长度大于第一预设值,将上述一条历史文本分割成长度不大于第一预设值的多个历史文本段;分别利用simhash算法,获取多个历史文本段中每个历史文本段的签名值;
基于上述一条历史文本的签名值、以及长度大于第一预设值时多个历史文本段的签名值对ElasticSearch中历史文本的倒排索引信息进行更新。
若历史文本的长度不大于第一预设值,无需执行操作“将上述一条历史文本分割成长度不大于第一预设值的多个历史文本段;分别利用simhash算法,获取多个历史文本段中每个历史文本段的签名值”,仅基于上述一条历史文本的签名值对ElasticSearch中历史文本的倒排索引信息进行更新。
可选地,在本公开上述各实施例的文本重复性判定方法中,可以在响应于检测到新增文本,以检测到的新增文本作为目标文本,开始执行上述各文本重复性判定方法实施例的流程;并根据目标文本与历史文本之间是否重复的判定结果,响应于判定目标文本与历史文本之间不重复,以该目标文本作为一条历史文本,按照上述实施例方式,基于目标文本或进一步结合目标文本被分割成的各文本段的签名值对ElasticSearch中历史文本的倒排索引信息进行更新。
基于本实施例,预先在ElasticSearch中创建历史文本的倒排索引信息,在目标文本与历史文本之间不重复时,基于目标文本或进一步结合目标文本被分割成的各文本段的签名值对ElasticSearch中历史文本的倒排索引信息进行更新,从而实现了ElasticSearch中倒排索引信息的实时更新,以便于后续更准确全面的判定目标文本与历史文本之间的重复性。
本公开实施例提供的任一种文本重复性判定方法可以由任意适当的具有数据处理能力的设备执行,包括但不限于:终端设备和服务器等。或者,本公开实施例提供的任一种文本重复性判定方法可以由处理器执行,如处理器通过调用存储器存储的相应指令来执行本公开实施例提及的任一种文本重复性判定方法。下文不再赘述。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图8为本公开文本重复性判定装置一个实施例的结构示意图。该实施例的文本重复性判定可用于实现本公开上述各文本重复性判定方法实施例。如图8所示,该实施例的文本重复性判定包括:识别模块,分割模块,获取模块和第一判定模块。其中:
识别模块,用于识别目标文本的长度。
分割模块,用于根据识别模块的识别结果,若目标文本的长度大于第一预设值,将目标文本分割成长度不大于第一预设值的多个文本段。
获取模块,用于分别利用签名simhash算法,获取多个文本段中每个文本段的签名值。
第一判定模块,用于基于上述多个文本段的签名值与ElasticSearch中历史文本的倒排索引信息,判定目标文本与历史文本之间是否重复。其中,ElasticSearch中存储有至少一个历史文本的倒排索引信息,历史文本的倒排索引信息包括:历史文本的签名值,以及长度大于第一预设值时历史文本被分割成的各文本段的签名值。
基于本公开上述实施例提供的文本重复性判定装置,预先在ElasticSearch中存储包括历史文本的倒排索引信息,其可以包括历史文本的签名值、以及长度大于第一预设值时历史文本被分割成的各文本段的签名值,在目标文本的长度大于第一预设值时,将目标文本分割成长度不大于第一预设值的多个文本段,分别利用签名simhash算法,获取多个文本段中每个文本段的签名值,然后基于多个文本段的签名值与ElasticSearch中历史文本的倒排索引信息,来判定目标文本与历史文本之间是否重复,从而实现了目标文本与历史文本之间的重复性判定。在长度大于第一预设值时,由于将目标文本分割成长度不大于第一预设值的多个文本段、通过多个文本段的签名值来进行重复性判定,从句子维度上实现了文本内容的重复性判定,可以有效识别较长文本之间部分内容重复的问题;并且,相对于k-shingle算法,降低了所需的存储资源和计算资源,避免了只要文本之间有词重复就会判定为两个文本重复导致的误判,提高了重复性判定的准确性。另外,利用ElasticSearch倒排索引的高效性,基于多个文本段的签名值与ElasticSearch中历史文本的倒排索引信息来判定目标文本与历史文本之间是否重复,减少了计算量,提高了效率,减少了服务响应时间。
在其中一些实施方式中,第一判定模块可以包括:确定单元,用于基于ElasticSearch中历史文本的倒排索引信息,获取目标文本的相似历史文本,相似历史文本为具有与多个文本段的签名值相同签名值的数量最多的历史文本;第一判定单元,用于根据相似历史文本与多个文本段中签名值相同的文本段的数量与多个文本段的数量,判定目标文本与历史文本之间是否重复。
在其中一些可选示例中,第一判定单元,具体用于若相似历史文本与多个文本段中签名值相同的文本段的数量与多个文本段的数量之间的比值大于第二预设值,判定目标文本与历史文本之间重复。
在另一些实施方式中,第一判定模块可以包括:拼接单元,用于将多个文本段的签名值进行拼接,得到目标文本的拼接签名值;第二判定单元,用于基于ElasticSearch的每个历史文本中各文本段的签名值拼接得到的拼接签名值中,是否存在与目标文本的拼接签名值之间的海明距离小于第三预设值的拼接签名值,判定目标文本与历史文本之间是否重复。
在其中一些可选示例中,分割模块,具体用于从目标文本的第一个词开始,以预设窗口长度进行取词,并以预设步长移动,直到目标文本的最后一个词,得到多个文本段。
在另一些可选示例中,分词单元,用于以预设领域的关键词分词器,对目标文本进行分词;
分割模块,具体用于针对分词后的目标文本,从分词后的目标文本的第一个词开始,以预设窗口长度进行取词,并以预设步长移动。
图9为本公开文本重复性判定装置另一个实施例的结构示意图。如图9所示,在图8所示实施例的基础上,本公开文本重复性判定装置还可以包括:第二判定模块。该实施例中,获取模块,还可用于利用签名simhash算法,获取所述目标文本的签名值。第二判定模块,用于查询ElasticSearch中是否存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值;若ElasticSearch中存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,判定目标文本与历史文本之间重复。相应地,识别模块,具体用于根据第二判定模块的查询结果,若ElasticSearch中不存在与目标文本的签名值之间的海明距离小于第四预设值的历史文本的签名值,识别目标文本的长度。
另外,再参见图9,在又一个实施例中,获取模块,还可用于在利用签名simhash算法获取文本段或目标文本的签名值的过程中,减少预设词的权重。
ElasticSearch,存储有历史文本的倒排索引信息。
另外,再参见图9,在本公开文本重复性判定装置的又一实施例中,还包括:检测模块和更新模块。其中:检测模块,用于进行新增文本检测。识别模块,具体用于响应于检测模块检测到新增文本,以检测到的新增文本作为目标文本,识别目标文本的长度。更新模块,用于根据第一判定模块或第二判定模块的判定结果,若目标文本与历史文本之间不重复,以目标文本作为一条历史文本,在ElasticSearch中创建一条历史文本的倒排索引信息。
另外,本公开实施例还提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行存储器中存储的计算机程序,且计算机程序被执行时,实现本公开上述任一实施例的文本重复性判定方法。
图10为本公开电子设备实施例的一个示例性框图。下面,参考图10来描述根据本公开实施例的电子设备。该电子设备可以是第一设备和第二设备中的任一个或两者、或与它们独立的单机设备,该单机设备可以与第一设备和第二设备进行通信,以从它们接收所采集到的输入信号。如图10所示,电子设备包括一个或多个处理器和存储器。
处理器可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备中的其他组件以执行期望的功能。处理器可被配置为执行图1-图7中所述文本重复性判定方法的处理步骤。
存储器可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器可以运行所述程序指令,以实现上文所述的本公开的各个实施例的获取证件中信息的方法以及/或者其他期望的功能。
在一个示例中,电子设备还可以包括:输入装置和输出装置,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
此外,该输入设备还可以包括例如键盘、鼠标等等。
该输出装置可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出设备可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图10中仅示出了该电子设备中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备还可以包括任何其他适当的组件。
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本本公开上述各实施例的文本重复性判定方法中的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
另外,本公开实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,实现本公开上述任一实施例的文本重复性判定方法。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开说明书上述各实施例的文本重复性判定方法中的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
可能以许多方式来实现本公开的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
还需要指出的是,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。