出处:(1)原创不易,网络上抄袭现象屡见不鲜。新网页是否与网页库中的现有网页重复?这就是本文要讨论的问题(尽量用大家能马上理解的语言和例子来表达)。1.传统签名算法和文本完整性判断的问题:(1)运维上线一个bin文件,分发给4台上线的机器。如何判断所有的bin文件是否一致?(2)用户A向用户B发送消息msg,用户B如何判断收到的msg_t是用户A发送的msg?思路:逐字节比较两个大文件或网页,效率很低。我们可以用一个签名值(比如md5值)来表示一个大文件。rate)answer:(1)bin文件使用md5,在??线4台机器上bin文件使用md5。如果五个md5值相同,则说明一致。(2)用户A将消息的msg和md5发送给用户B,用户B收到msg_t后也取md5。如果获取的值与用户A发送的md5值相同,则说明msg_t与msg相同。结论:md5是一种签名算法,常用于判断数据的完整性和完整性。一致的md5设计原则:即使两个文本之间只有一位的差异,md5签名值的差异也会非常大,因此只适用于“完整性”检查,不适用于“相似性”检查。一个新的问题出现了:有没有一种签名算法,如果文本很相似,那么签名值也很相似?2.文本相似度签名算法上面提出的问题可以用局部敏感哈希(LocalitySensitiveHash)来解决。LocalitySensitiveHash是一种哈希算法,文本越相似,哈希值越相似。有兴趣的同学自行百度,这里分享一下minHash的思路。提出的问题:什么是minHash?答:minHash是一种局部敏感哈希。常用于快速判断集合的相似度,也常用来检测网页的重复。其思想是使用相同的规则从集合中提取少量元素来表示整个集合。如果少数元素重叠度很高,则很可能整个集合重复度很高。例:待求集合为A{1,7,5,9,3,11,15,13}已有集合为:B{10,8,2,4,6,0,1,16},C{100,700,500,900,300,1100,1500,1300},D{1,3,2,4,6,5,8,7}假设规则是用部分元素替换整个集合就是:对集合内的元素进行排序,选出4个最小的值(这个过程有信息损失,我们可以认为是哈希过程)。处理结果为:A{1,3,5,7}B{0,1,2,4}=>A和B有1个相同的元素C{100,300,500,700}=>A和C有0个相同的元素D{1,2,3,4}=>A和D有2个相同的元素结论:我们认为集合A和集合D是最相似的。这个例子有点2,但基本能说明整体思路。在实际实现过程中:(1)我们可以使用更多的元素来表示集合,以提高准确率(例如将上例中的4个元素表示集合升级为8个元素表示集合)(2)我们可以使用更多的哈希函数来表示集合以提高准确性(例如,在上面的示例中,除了“取值最小的4个元素表示集合”之后的排序之外,还可以添加一个哈希函数“这4个元素排序后的最大值代表集合”)(3)minHash可以量化判断相似度,也可以判断网页是否重复(一个分类问题),设置相似度阈值,阈值以上为重复,阈值以下(4)在实际去重过程中,可以预先计算网页数据库中的哈希值,只需要对待确定的集合或网页临时计算哈希值。3、minHash和长文本重复检测有什么关系?目前看来与它无关,但是如果我们可以用一个集合来表示每一个长文本,我们就可以用minHash来表示长文本的相似度。解决了。提出的问题:如何将长文本转化为集合?答:我去,分词不行吗?例子:待判断的长文本是A{我是58神剑,我是58道家}现有网络图书馆馆藏是:B{我是58狼}C{58到家,发球在家}D{这件事与我无关,我只是凑个数}分词收集以上文字:A{我,58,沈健,来自,到家}B{我,58,来自,狼}C{58,服务,家}D{事,我,凑数,关系}判断结论:当当当,转化为集合后,可以快速判断A和B的相似度最高。当然,在实际执行过程中,除了分词之外,还得考虑词频。使用这种方法对长文本进行相似度检测准确率非常高(文本越长越准确)4.有没有更有效的方法使用上述方法进行文本相似度检测,需要中文分词,词频统计、哈希值计算、相似度计算,计算量很小。不过,抄袭是家常便饭,一字不改的风气让技术有了更广阔的优化空间,赞!如何优化呢?不再分词,而是“分句”,用标点符号把长篇文章分成句子,用N个句集(比如一篇文章中最长的5句作为署名,注意长句比短句短)更具辨识度)作为文章的署名,在抄袭盛行的互联网环境中,这种方法通过判断网页的重复可以大大降低工程的复杂度,准确率也极高。五、结论在抄袭盛行的互联网环境下,采用“句子”的方式,将最长的5个网页内容作为网页的签名,可以大大降低重复排名系统的复杂度,提高重复排名的准确性。一个不错的选择。收下《建筑师之路》,不错的订阅号!58---沉剑
