发明内容
本发明实施例通过提供一种检索相似文章的方法及装置,解决了现有技术中在给定一篇文章时,无法基于simhash计算出与给定文章相似的文章的数量,并检索出这些相似文章的技术问题。
第一方面,本发明通过本发明的一实施例提供如下技术方案:
一种检索相似文章的方法,包括:
获取目标文章;
计算所述目标文章的simhash散列值;
获取双亲森林数据模型;所述双亲森林数据模型由多棵树组成,其中,每一个叶子节点代表一篇文章的simhash散列值,每一个根节点代表整棵树的simhash散列值,任意两个根节点之间的simhash散列值的海明距离大于预设值,同一颗树上的任意两个节点的simhash散列值的海明距离小于等于所述预设值;
基于所述目标文章的simhash散列值,在所述双亲森林数据模型中检索与所述目标文章相似的文章。
优选地,所述计算所述目标文章的simhash散列值,包括:
从所述目标文章中提取最长的句子,所述最长的句子用于代表所述目标文章;
计算所述最长的句子的simhash散列值,所述最长的句子的simhash散列值用于代表所述目标文章的simhash散列值。
优选地,所述基于所述目标文章的simhash散列值,在所述双亲森林数据模型中检索与所述目标文章相似的文章,包括:
获取simhash散列值表,所述simhash散列值表中存储有所述双亲森林数据模型中所有节点的simhash散列值;
判断所述simhash散列值表中是否存在与所述目标文章的simhash散列值的海明距离小于等于所述预设值的simhash散列值;
若存在,则在所述simhash散列值表中找出所有与所述目标文章的simhash散列值的海明距离小于等于所述预设值的simhash散列值,构成集合S;
基于所述集合S,在所述双亲森林数据模型中确定一棵目标树,并返回所述目标树的根节点的simhash散列值,所述目标树中的所有节点对应的文章即为所述目标文章的相似文章。
优选地,所述基于所述集合S,在所述双亲森林数据模型中确定一棵目标树,包括:
在所述双亲森林数据模型中查找所述集合S中的每个元素,并获得所述每个元素对应的根节点;
若仅获得一个根节点,则将该根节点对应的树确定为所述目标树;
若获得多个根节点,则将所述多个根节点对应的多棵树作为候选目标树,并基于冲突解决规则,从所述候选目标树中选择一棵候选目标树作为所述目标树。
优选地,所述基于冲突解决规则,从所述候选目标树中选择一棵候选目标树作为所述目标树,包括:
统计每一棵候选目标树的叶子节点的数量;
从所述候选目标树中找出叶子节点的数量最多的候选目标树;
若所述叶子节点的数量最多的候选目标树仅有一棵,则将所述叶子节点的数量最多的候选目标树作为所述目标树。
优选地,所述基于冲突解决规则,从所述候选目标树中选择一棵候选目标树作为所述目标树,还包括:
若所述叶子节点的数量最多的候选目标树有多棵,则统计所述叶子节点的数量最多的候选目标树中每一棵候选目标树的添加时间,所述添时间为添加到所述双亲森林数据模型的时间;
从所述叶子节点的数量最多的候选目标树中找出添加时间最早的候选目标树;
若所述添加时间最早的候选目标树仅有一棵,则将所述添加时间最早的候选目标树作为所述目标树。
优选地,所述基于冲突解决规则,从所述候选目标树中选择一棵候选目标树作为所述目标树,还包括:
若所述添加时间最早的候选目标树有多棵,则统计所述添加时间最早的候选目标树中每一棵候选目标树的根节点的simhash散列值;
从所述添加时间最早的候选目标树中选出根节点的simhash散列值最小的候选目标树作为所述目标树。
优选地,所述的检索相似文章的方法,还包括:
将所述目标文章的simhash散列值作为一个新的叶子节点添加到所述目标树中。
优选地,所述判断所述simhash散列值表中是否存在与所述目标文章的simhash散列值的海明距离小于等于所述预设值的simhash散列值之后,还包括:
若不存在,则向所述双亲森林数据模型中添加一棵新树,并将所述目标文章的simhash散列值作为所述新树的根节点;
返回所述新树的根节点的simhash散列值。
优选地,所述预设值为3。
优选地,所述检索相似文章的方法,还包括:
基于所述双亲森林数据模型,计算所述相似的文章的数量。
基于同一发明构思,第二方面,本发明通过本发明的一实施例提供如下技术方案:
一种检索相似文章的装置,包括:
第一获取单元,用于获取目标文章;
第一计算单元,用于计算所述目标文章的simhash散列值;
第二获取单元,用于获取双亲森林数据模型;所述双亲森林数据模型由多棵树组成,其中,每一个叶子节点代表一篇文章的simhash散列值,每一个根节点代表整棵树的simhash散列值,任意两个根节点之间的simhash散列值的海明距离大于预设值,同一颗树上的任意两个节点的simhash散列值的海明距离小于等于所述预设值;
检索单元,用于基于所述目标文章的simhash散列值,在所述双亲森林数据模型中检索与所述目标文章相似的文章。
优选地,所述第一计算单元,具体用于:
从所述目标文章中提取最长的句子,所述最长的句子用于代表所述目标文章;计算所述最长的句子的simhash散列值,所述最长的句子的simhash散列值用于代表所述目标文章的simhash散列值。
优选地,所述检索单元,具体用于:
获取simhash散列值表,所述simhash散列值表中存储有所述双亲森林数据模型中所有节点的simhash散列值;判断所述simhash散列值表中是否存在与所述目标文章的simhash散列值的海明距离小于等于所述预设值的simhash散列值;若存在,则在所述simhash散列值表中找出所有与所述目标文章的simhash散列值的海明距离小于等于所述预设值的simhash散列值,构成集合S;基于所述集合S,在所述双亲森林数据模型中确定一棵目标树,并返回所述目标树的根节点的simhash散列值,所述目标树中的所有节点对应的文章即为所述目标文章的相似文章。
优选地,所述检索单元,具体用于:
在所述双亲森林数据模型中查找所述集合S中的每个元素,并获得所述每个元素对应的根节点;若仅获得一个根节点,则将该根节点对应的树确定为所述目标树;若获得多个根节点,则将所述多个根节点对应的多棵树作为候选目标树,并基于冲突解决规则,从所述候选目标树中选择一棵候选目标树作为所述目标树。
优选地,所述检索单元,具体用于:
统计每一棵候选目标树的叶子节点的数量;从所述候选目标树中找出叶子节点的数量最多的候选目标树;若所述叶子节点的数量最多的候选目标树仅有一棵,则将所述叶子节点的数量最多的候选目标树作为所述目标树。
优选地,所述检索单元,具体用于:
若所述叶子节点的数量最多的候选目标树有多棵,则统计所述叶子节点的数量最多的候选目标树中每一棵候选目标树的添加时间,所述添时间为添加到所述双亲森林数据模型的时间;从所述叶子节点的数量最多的候选目标树中找出添加时间最早的候选目标树;若所述添加时间最早的候选目标树仅有一棵,则将所述添加时间最早的候选目标树作为所述目标树。
优选地,所述检索单元,具体用于:
若所述添加时间最早的候选目标树有多棵,则统计所述添加时间最早的候选目标树中每一棵候选目标树的根节点的simhash散列值;从所述添加时间最早的候选目标树中选出根节点的simhash散列值最小的候选目标树作为所述目标树。
优选地,所述检索单元,还用于:
将所述目标文章的simhash散列值作为一个新的叶子节点添加到所述目标树中。
优选地,所述检索单元,还用于:
在所述判断所述simhash散列值表中是否存在与所述目标文章的simhash散列值的海明距离小于等于所述预设值的simhash散列值之后,若不存在,则向所述双亲森林数据模型中添加一棵新树,并将所述目标文章的simhash散列值作为所述新树的根节点;返回所述新树的根节点的simhash散列值。
优选地,所述预设值为3。
优选地,所述检索相似文章的装置,还包括:
第二计算单元,用于基于所述双亲森林数据模型,计算所述相似的文章的数量。
第三方面,基于同一发明构思,本发明通过本发明的一实施例提供如下技术方案:
一种检索相似文章的装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述第一方面中一种检索相似文章的方法的任一方法步骤。
第四方面,基于同一发明构思,本发明通过本发明的一实施例提供如下技术方案:
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一方面中一种检索相似文章的方法的任一方法步骤。
本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
在本发明实施例中,公开了一种检索相似文章的方法,包括:获取目标文章;计算目标文章的simhash散列值;获取双亲森林数据模型;双亲森林数据模型由多棵树组成,其中,每一个叶子节点代表一篇文章的simhash散列值,每一个根节点代表整棵树的simhash散列值(即:使相似的文章返回相同的simhash散列值),任意两个根节点之间的simhash散列值的海明距离大于预设值(即:使不同的两棵树代表不同的两组相似文章),同一颗树上的任意两个节点的simhash散列值的海明距离小于等于所述预设值(即:使得相似的文章集中在一棵树中);基于目标文章的simhash散列值,在双亲森林数据模型中检索与目标文章相似的文章。由于该双亲森林数据模型可以使得相似的文章集中在一棵树中,并返回相同的simhash散列值,这样在使用simhash方法时,可以方便进行相似文章去重,从而计算出相似文章的数量,并检索出这些相似文章。故而,解决了现有技术中在给定一篇文章时,无法基于simhash计算出与给定文章相似的文章的数量,并检索出这些相似文章的技术问题。
具体实施方式
本发明实施例通过提供一种检索相似文章的方法及装置,解决了现有技术中在给定一篇文章时,无法基于simhash计算出与给定文章相似的文章的数量,并检索出这些相似文章的技术问题。
本发明实施例的技术方案为解决上述技术问题,总体思路如下:
一种检索相似文章的方法,包括:获取目标文章;计算目标文章的simhash散列值;获取双亲森林数据模型;双亲森林数据模型由多棵树组成,其中,每一个叶子节点代表一篇文章的simhash散列值,每一个根节点代表整棵树的simhash散列值,任意两个根节点之间的simhash散列值的海明距离大于预设值,同一颗树上的任意两个节点的simhash散列值的海明距离小于等于所述预设值;基于目标文章的simhash散列值,在双亲森林数据模型中检索与目标文章相似的文章。
为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。
首先说明,本文中出现的术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
其次说明,本文中出现的术语“多个”是指两个以上,包含两个。
实施例一
如图1所示,本实施例提供了一种检索相似文章的方法,包括:
步骤S101:获取一目标文章。
在具体实施过程中,目标文章(即:背景技术中的给定文章)可以是任意一篇文章(例如:一篇新闻、或一个微博、或一个贴吧回帖、等等)。
步骤S102:计算目标文章的simhash散列值。
在具体实施过程中,simhash是业界很具有影响力也是使用广泛的大规模相似文章去重的方法。具体而言,simhash是一种字符串散列值的计算方法,用于把一个任意长度的字符串映射为一个64位的整数签名值,其特点是特征相似的字符串计算出的simhash散列值的海明距离(两个码字的对应比特取值不同的比特数,称为这两个码字的海明距离)较小。通常,对于给定的两篇文章,如果这两篇文章通过simahsh计算出的散列值的海明距离小于等于3,则认为这两篇文章相似。
具体来讲,目标文章的simhash散列值的计算步骤,如下:
首先,将目标文章转换为一组特征权重对集合{(feature,weight)},其中feature是特征,weight是其权重。(本方法中feature是文章中的词,weight是词出现的频次)。
然后,初始化一个64维的整数数组V,数组中每一个元素初始值为0。
再次,遍历上述特征权重对特征集合中的每一个特征权重对:a)利用哈希函数映射feature到一个64位的散列值;b)对这个64位的散列值,如果第i比特位上为1,对数组V中第i个元素加上这个特征的权值weight,否则减去特征的权值weight。
最后,根据数组V中每一个元素的正负符号来确定最终生成的64位散列值,如果数组V的第i个元素的符号为正,则对应的散列值的第i比特位为1,否则为0。
在步骤S102中,可以计算整篇目标文章的simhash散列值。
但是,通过浏览相似文章,发现在一些相似的文章中,绝大多数段落描述的内容都是一样的,而只有个别段落会加上笔者的少量的修改,而这样的两篇文章计算出的simhash散列值的海明距离是大于3的,也就会被误判为是不相似的两篇文章。
为了解决这个问题,在本实施例中,在计算目标文章的simhash散列值时,可以进行优化,具体优化方案是:从目标文章中提取最长的句子,最长的句子用于代表目标文章,计算最长的句子的simhash散列值,最长的句子的simhash散列值用于代表目标文章的simhash散列值。由于选择文章中最长的句子代表整篇文章,而不是把整篇文章全部计算在内,这样就避免了个别段落内容不同导致文章计算出的simhash散列值的海明距离较大,从而加强了计算目标文章的simhash散列值时的鲁棒性。
步骤S103:获取双亲森林数据模型。
研究发现,simhash方法不能计算相似文章数量,不能检索相似文章,其原因是:simhash算法不能为相似的文章计算出相等的simhash散列值。如果能使相似的文章产生的simhash散列值相同,就可以很容易解决这两个问题。由此可以想到的解决办法是对一篇文章,使返回其一个固定散列值,要求与该文章相似的文章的散列值与该文章的散列值相同。
为了满足这个约束,本发明提出了一种双亲森林数据结构模型,来维护已知文章的simhash散列值,所述已知文章包含网络上的大量文章(理想状态下,包含网络上的全部文章,例如:新闻、微博、贴吧回帖、等等)。在该双亲森林数据结构模型中存储有每一篇文章的simhash散列值。
具体来讲,该双亲森林数据结构模型要满足如下条件:
条件(1):由多棵树(即:双亲树)组成,其中,每一棵树的高度为2。
条件(2):每一个simhash散列值在该双亲森林中有且只有一个节点(根节点或叶子节点)与其对应,每一个叶子节点代表一篇文章的simhash散列值,每个根节点代表整棵树的simhash散列值,同一颗树上的任意两个节点的simhash散列值的海明距离小于等于预设值。
条件(3):任意两个根节点之间的simhash散列值的海明距离大于预设值。
条件(4):每一个叶子节点至少存在一个兄弟节点,每一个叶子节点与其对应的根节点的海明距离小于等于预设值。
在条件(1)中,由于计算simhash值需要从树的任意一个节点查找到其根节点。此处,设置树的高度为2,目的是使树的高度尽可能变小,树的高度减少后,通过节点来查找根节点,每次只需要顺着当前文章的节点向上扫描一步即可。而如果不限制树的高度,那么每次查找都需要从当前节点一路向上访问到根节点才行,随着文章越来越多,树高度越来越高,查找速度会越来越慢,不受控制。
在条件(2)中,每一棵树都有唯一的一个根节点,每一棵树可以具有一个或多个叶子节点,同一棵树上的任意两个节点(包括根节点和叶子节点)的simhash值的海明距离都小于预设值,也就是说,同一颗树上的所有节点都代表是相似的文章。叶子节点的simhash值是文章计算出来的simhash值,因为根节点的唯一性,选用根节点的simhash值作为整棵树的最终的散列值,可以保证相似的文章具有相同的simhash散列值。并且,由于在现有技术中,如果两篇文章的simahsh散列值的海明距离小于等于3,则认为这两篇文章相似,因此,预设值选择为3。
在条件(3)中,其目的是:保证任意两棵树的根节点的对应的文章不相似,也就是保证任意两棵树代表不相似的两组文章。
在条件(4)中,其目的是:保证一棵树内部的每个节点(代表的文章)都存在其他的节点(代表的文章)与其相似。
在该双亲森林数据模型中,一篇文章只会存在于一棵树中,每一棵树的根节点只有一个,因此,返回的根节点是唯一的。双亲森林数据模型的作用是要使相似文章的simhash散列值相同。由于相似的文章的simhash值都挂在了同一棵树中,通过查找根节点,使所有文章的最终签名值都是其根节点的simhash散列值,所以相似文章的simhash散列值就都是其根节点的simhash散列值。
举例来讲,如图2所示,在该双亲森林数据结构模型中共有4棵树,分别为树1、树2、树3、树4;其中,树1由根节点A和叶子节点E、F、G、H、I组成;树2由根节点B和叶子节点J、K、L组成;树3由根节点C和叶子节点M、N、O组成;树4由根节点D和叶子节点P、Q组成。在每一棵树中,每个叶子节点代表一篇文章,且存储有对应文章的simhash散列值。在同一颗树中,任意两个节点的simhash值的海明距离都小于等于3,也就是说,同一棵树中所有节点对应的文章都是相似文章(即:树1中所有节点对应的文章都是相似文章,树2、树3和树4也是一样)。并且,根节点A、B、C、D中任意两个根节点的simhash散列值的海明距离都大于3,也就是说,树1、树2、树3和树4可以代表4组不同的相似文章。
步骤S104:基于目标文章的simhash散列值,在双亲森林数据模型中检索与目标文章相似的文章。
作为一种可选的实施例,如图3所示,步骤S104,包括:
步骤S201:获取一simhash散列值表,simhash散列值表中存储有双亲森林数据模型中所有节点的simhash散列值;
步骤S202:判断在simhash散列值表中是否存在与目标文章的simhash散列值的海明距离小于等于预设值的simhash散列值;其中,预设值为3;
步骤S203:若存在,则在simhash散列值表中找出所有与目标文章的simhash散列值的海明距离小于等于预设值的simhash散列值,构成集合S;
步骤S204:基于集合S,在双亲森林数据模型中确定一棵目标树,并返回目标树的根节点的simhash散列值,目标树中的所有节点对应的文章都是目标文章的相似文章。
作为一种可选的实施例,在步骤S204中,所述基于集合S,在双亲森林数据模型中确定一棵目标树,包括:
在双亲森林数据模型中查找集合S中的每个元素,并获得每个元素对应的根节点;若仅获得一个根节点,则将该根节点对应的树确定为目标树;若获得多个根节点,那么就是说,目标文章可以加入到这些树根对应的任何一棵树中,而由于一篇文章的simhash散列值在双亲森林数据模型中只对应唯一的一个节点,那么只能选择其中的一个最合理树(即:目标树),所以可以将多个根节点对应的多棵树作为候选目标树(即:获得多棵候选目标树),并基于冲突解决规则,从多棵候选目标树中选择一棵候选目标树作为目标树。
下面,参照图2,举例说明:
【例1】
首先,在simhash散列值表中查找与目标文章的simhash散列值的海明距离小于等于3的simhash散列值,若仅找到1个simhash散列值,则将这个simhash散列值构成集合S;然后,在双亲森林数据模型中找出集合S中这个simhash散列值对应的节点(例如:对应叶子节点I);最后,获得叶子节点I对应的根节点(即:根节点A)。此处,由于基于集合S在双亲森林数据模型中只获得了一个根节点(即:根节点A),则将该根节点(即:根节点A)对应的树(即:树1)作为目标树。
【例2】
首先,在simhash散列值表中查找与目标文章的simhash散列值的海明距离小于等于3的simhash散列值,若找到两个simhash散列值,则将这两个simhash散列值构成集合S;然后,在双亲森林数据模型中找出集合S中这两个simhash散列值对应的节点(例如:对应叶子节点H、I);最后,获得叶子节点H、I对应的根节点(即:根节点A)。此处,由于基于集合S在双亲森林数据模型中只获得了一个根节点(即:根节点A),则将该根节点(即:根节点A)对应的树(即:树1)作为目标树。
【例3】
首先,在simhash散列值表中查找与目标文章的simhash散列值的海明距离小于等于3的simhash散列值,若找到两个simhash散列值,则将这两个simhash散列值构成集合S;然后,在双亲森林数据模型中找出集合S中这两个simhash散列值对应的节点(例如:对应叶子节点I和叶子节J);最后,获得叶子节点I和叶子节点J各自对应的根节点(即:根节点A和根节点B)。此处,由于基于集合S在双亲森林数据模型中获得了两个根节点(即:根节点A和根节点B),所以需要基于冲突解决规则,从这两个根节点(即:根节点A和根节点B)对应的树(即:树1和树2)中选择一棵候树作为目标树。
【例4】
首先,在simhash散列值表中查找与目标文章的simhash散列值的海明距离小于等于3的simhash散列值,若找到3个simhash散列值,则将这3个simhash散列值构成集合S;然后,在双亲森林数据模型中找出集合S中这3个simhash散列值对应的节点(例如:对应叶子节点L、叶子节点M和叶子节点N);最后,获得叶子节点L、叶子节点M和叶子节点N自对应的根节点(即:根节点B和根节点C)。此处,由于基于集合S在双亲森林数据模型中获得了两个根节点(即:根节点B和根节点C),所以需要基于冲突解决规则,从这两个根节点(即:根节点B和根节点C)对应的树(即:树2和树3)中选择一棵候树作为目标树。
作为一种可选的实施例,所述基于冲突解决规则,从多个候选目标树中选择一棵候选目标树作为目标树,包括:
统计每一棵候选目标树的叶子节点的数量;从候选目标树中找出叶子节点的数量最多的候选目标树;若叶子节点的数量最多的候选目标树仅有一棵,则将叶子节点的数量最多的候选目标树作为目标树。此处,选择叶子节点的数量最多的树,其原因是:文章去重的目的是把相似的文章划分在一起,如果有多个候选目标树,则选择叶子节点最多的候选目标树作为最终的目标树,这是要尽量的把更多的文章聚合在一起,这样去重后,得到的相似文章数量较大,更能反映出一个舆情观点的真实热度。
若叶子节点的数量最多的候选目标树有多棵,则统计叶子节点的数量最多的候选目标树中每一棵候选目标树的添加时间(即:添加到双亲森林数据模型的时间);从叶子节点的数量最多的候选目标树中找出添加时间最早的候选目标树;若添加时间最早的候选目标树仅有一棵,则将添加时间最早的候选目标树作为目标树。此处,添加时间最早,说明文章发布的时间最早,更很可能是原创文章,而添加时间晚的文章都是借鉴的。
若添加时间最早的候选目标树有多棵,则统计添加时间最早的候选目标树中每一棵候选目标树的根节点的simhash散列值;从添加时间最早的候选目标树中选出根节点的simhash散列值最小的候选目标树作为目标树。这是兜底的解决办法。
举例来讲,在【例3】中,需要在树1和树2中选出一棵树作为目标树,则可以统计每一棵树的叶子节点的数量,树1具有E、F、G、H、I共5个叶子节点,而树2具有J、K、L共3个叶子节点,所以,树1的叶子节点数量最多,则选择树1作为目标树。
举例来讲,在【例4】中,需要在树2和树3中选出一棵树作为目标树,由于树2和树3的叶子节点数都是3个,则需要进一步获取树1和树2中的添加时间,若树3的添加时间早于树2,则选择树3作为目标树。
进一步,若树2和树3的添加时间也相同,则选择根节点simhash散列值最小的一棵树,若根节点B的simhash散列值最小,则选择树2作为目标树。
进一步,在获得目标树,并返回目标树的根节点的simhash散列值后,即可根据返回的目标树的根节点的simhash散列值,在双亲森林数据模型中找到目标树,并计算相似文章的数量,并检索出相似文章。
具体而言,在计算相似文章数量时,可以使用SQL中的Group By语法和聚合函数,计算目标树中所有节点的数量,进而获得相似文章的数量。
具体而言,在检索相似的文章时,可以对目标树中每个节点的simhash散列值做倒排索引,并通过输入目标文章的simhash散列值来检索相似的文章。
作为一种可选的实施例,在算相似文章的数量,并检索出相似文章之后,还包括:
将目标文章的simhash散列值作为一个新的叶子节点添加到目标树中。
在具体实施过程中,在找到目标树后,由于目标文章与该目标树中的所有文章都是相似文章,所以,可以将目标文章也添加到目标树中(即:将目标文章的simhash散列值作为一个新的叶子节点添加到目标树中),从对目标树中的数据进行补充。
作为一种可选的实施例,在步骤S202之后,还包括:
步骤S205:若不存在,则向双亲森林数据模型中添加一棵新树,并将目标文章的simhash散列值作为新树的树根,返回新树的树根的simhash散列值。
在具体实施过程中,如果在simhash散列值表没有任何一个simhash散列值与目标文章的simhash散列值的海明距离小于等于3,则表明在双亲森林数据模型中不存在其它文章与目标文章相似。因此,目标文章不属于双亲森林数据模型中的任何一棵树,需要新创建一棵树,并把目标文章的simhash散列值作为树根,从而实现了对双亲森林数据模型的数据补充。
在本发明实施例中,首先借鉴simhash方法,把目标文章映射为64位的simhash散列值,然后通过维护一个双亲森林数据模型,把相似的文章聚合在双亲森林中的同一棵树中,选择树根的simhash散列值作为整棵树所有文章的散列值,这样就可以把相似的文章映射为相等的simhash散列值,从而实现基于simhash方法计算相似文章的数量并检索出相似文章的目的。
上述本发明实施例中的技术方案,至少具有如下的技术效果或优点:
在本发明实施例中,公开了一种检索相似文章的方法,包括:获取目标文章;计算目标文章的simhash散列值;获取双亲森林数据模型;双亲森林数据模型由多棵树组成,其中,每一个叶子节点代表一篇文章的simhash散列值,每一个根节点代表整棵树的simhash散列值(即:使相似的文章返回相同的simhash散列值),任意两个根节点之间的simhash散列值的海明距离大于预设值(即:使不同的两棵树代表不同的两组相似文章),同一颗树上的任意两个节点的simhash散列值的海明距离小于等于所述预设值(即:使得相似的文章集中在一棵树中);基于目标文章的simhash散列值,在双亲森林数据模型中检索与目标文章相似的文章。由于该双亲森林数据模型可以使得相似的文章集中在一棵树中,并返回相同的simhash散列值,这样在使用simhash方法时,可以方便进行相似文章去重,从而计算出相似文章的数量,并检索出这些相似文章。故而,解决了现有技术中在给定一篇文章时,无法基于simhash计算出与给定文章相似的文章的数量,并检索出这些相似文章的技术问题。
实施例二
基于同一发明构思,如图4所示,本实施例提供了一种检索相似文章的装置,包括:
第一获取单元401,用于获取目标文章;
第一计算单元402,用于计算所述目标文章的simhash散列值;
第二获取单元403,用于获取双亲森林数据模型;所述双亲森林数据模型由多棵树组成,其中,每一个叶子节点代表一篇文章的simhash散列值,每一个根节点代表整棵树的simhash散列值,任意两个根节点之间的simhash散列值的海明距离大于预设值,同一颗树上的任意两个节点的simhash散列值的海明距离小于等于所述预设值;
检索单元404,用于基于所述目标文章的simhash散列值,在所述双亲森林数据模型中检索与所述目标文章相似的文章。
作为一种可选的实施例,第一计算单元402,具体用于:
从所述目标文章中提取最长的句子,所述最长的句子用于代表所述目标文章;计算所述最长的句子的simhash散列值,所述最长的句子的simhash散列值用于代表所述目标文章的simhash散列值。
作为一种可选的实施例,检索单元404,具体用于:
获取simhash散列值表,所述simhash散列值表中存储有所述双亲森林数据模型中所有节点的simhash散列值;判断所述simhash散列值表中是否存在与所述目标文章的simhash散列值的海明距离小于等于所述预设值的simhash散列值;若存在,则在所述simhash散列值表中找出所有与所述目标文章的simhash散列值的海明距离小于等于所述预设值的simhash散列值,构成集合S;基于所述集合S,在所述双亲森林数据模型中确定一棵目标树,并返回所述目标树的根节点的simhash散列值,所述目标树中的所有节点对应的文章即为所述目标文章的相似文章。
作为一种可选的实施例,检索单元404,具体用于:
在所述双亲森林数据模型中查找所述集合S中的每个元素,并获得所述每个元素对应的根节点;若仅获得一个根节点,则将该根节点对应的树确定为所述目标树;若获得多个根节点,则将所述多个根节点对应的多棵树作为候选目标树,并基于冲突解决规则,从所述候选目标树中选择一棵候选目标树作为所述目标树。
作为一种可选的实施例,检索单元404,具体用于:
统计每一棵候选目标树的叶子节点的数量;从所述候选目标树中找出叶子节点的数量最多的候选目标树;若所述叶子节点的数量最多的候选目标树仅有一棵,则将所述叶子节点的数量最多的候选目标树作为所述目标树。
作为一种可选的实施例,检索单元404,具体用于:
若所述叶子节点的数量最多的候选目标树有多棵,则统计所述叶子节点的数量最多的候选目标树中每一棵候选目标树的添加时间,所述添时间为添加到所述双亲森林数据模型的时间;从所述叶子节点的数量最多的候选目标树中找出添加时间最早的候选目标树;若所述添加时间最早的候选目标树仅有一棵,则将所述添加时间最早的候选目标树作为所述目标树。
作为一种可选的实施例,检索单元404,具体用于:
若所述添加时间最早的候选目标树有多棵,则统计所述添加时间最早的候选目标树中每一棵候选目标树的根节点的simhash散列值;从所述添加时间最早的候选目标树中选出根节点的simhash散列值最小的候选目标树作为所述目标树。
作为一种可选的实施例,检索单元404,还用于:
将所述目标文章的simhash散列值作为一个新的叶子节点添加到所述目标树中。
作为一种可选的实施例,检索单元404,还用于:
在所述判断所述simhash散列值表中是否存在与所述目标文章的simhash散列值的海明距离小于等于所述预设值的simhash散列值之后,若不存在,则向所述双亲森林数据模型中添加一棵新树,并将所述目标文章的simhash散列值作为所述新树的根节点;返回所述新树的根节点的simhash散列值。
作为一种可选的实施例,预设值为3。
作为一种可选的实施例,所述的检索相似文章的装置,还包括:
第二计算单元,用于基于所述双亲森林数据模型,计算所述相似的文章的数量。
由于本实施例所介绍的一种检索相似文章的装置为实施本发明实施例中检索相似文章的方法所采用的装置,故而基于本发明实施例中所介绍的检索相似文章的方法,本领域所属技术人员能够了解本实施例的检索相似文章的装置的具体实施方式以及其各种变化形式,所以在此对于该检索相似文章的装置如何实现本发明实施例中的方法不再详细介绍。只要本领域所属技术人员实施本发明实施例中检索相似文章的方法所采用的装置,都属于本发明所欲保护的范围。
上述本发明实施例中的技术方案,至少具有如下的技术效果或优点:
在本发明实施例中,公开了一种检索相似文章的装置,包括:第一获取单元,用于获取目标文章;第一计算单元,用于计算所述目标文章的simhash散列值;第二获取单元,用于获取双亲森林数据模型;所述双亲森林数据模型由多棵树组成,其中,每一个叶子节点代表一篇文章的simhash散列值,每一个根节点代表整棵树的simhash散列值,任意两个根节点之间的simhash散列值的海明距离大于预设值,同一颗树上的任意两个节点的simhash散列值的海明距离小于等于所述预设值;检索单元,用于基于所述目标文章的simhash散列值,在所述双亲森林数据模型中检索与所述目标文章相似的文章。由于该双亲森林数据模型可以使得相似的文章集中在一棵树中,并返回相同的simhash散列值,这样在使用simhash方法时,可以方便进行相似文章去重,从而计算出相似文章的数量,并检索出这些相似文章。故而,解决了现有技术中在给定一篇文章时,无法基于simhash计算出与给定文章相似的文章的数量,并检索出这些相似文章的技术问题。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图5是根据一示例性实施例示出的一种检索相似文章的装置800的框图。例如,装置800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图5,装置800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(I/O)的接口812,传感器组件814,以及通信组件816。
处理组件802通常控制装置800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理元件802可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理部件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
存储器804被配置为存储各种类型的数据以支持在设备800的操作。这些数据的示例包括用于在装置800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电力组件806为装置800的各种组件提供电力。电力组件806可以包括电源管理系统,一个或多个电源,及其他与为装置800生成、管理和分配电力相关联的组件。
多媒体组件808包括在所述装置800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当设备800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(MIC),当装置800处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
I/O接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件814包括一个或多个传感器,用于为装置800提供各个方面的状态评估。例如,传感器组件814可以检测到设备800的打开/关闭状态,组件的相对定位,例如所述组件为装置800的显示器和小键盘,传感器组件814还可以检测装置800或装置800一个组件的位置改变,用户与装置800接触的存在或不存在,装置800方位或加速/减速和装置800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件816被配置为便于装置800和其他设备之间有线或无线方式的通信。装置800可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信部件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信部件816还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,装置800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由装置800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由移动终端的处理器执行时,使得移动终端能够执行一种检索相似文章的方法,所述方法包括:获取目标文章;计算目标文章的simhash散列值;获取双亲森林数据模型;双亲森林数据模型由多棵树组成,其中,每一个叶子节点代表一篇文章的simhash散列值,每一个根节点代表整棵树的simhash散列值,任意两个根节点之间的simhash散列值的海明距离大于预设值,同一颗树上的任意两个节点的simhash散列值的海明距离小于等于所述预设值;基于目标文章的simhash散列值,在双亲森林数据模型中检索与目标文章相似的文章。
图6是本发明实施例中一种检索相似文章的装置作为服务器时的结构图。该服务器1900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,CPU)1922(例如,一个或一个以上处理器)和存储器1932,一个或一个以上存储应用程序1942或数据1944的存储介质1930(例如一个或一个以上海量存储设备)。其中,存储器1932和存储介质1930可以是短暂存储或持久存储。存储在存储介质1930的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1922可以设置为与存储介质1930通信,在服务器1900上执行存储介质1930中的一系列指令操作。
服务器1900还可以包括一个或一个以上电源1926,一个或一个以上有线或无线网络接口1950,一个或一个以上输入输出接口1958,一个或一个以上键盘1956,和/或,一个或一个以上操作系统1941,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。