百度咋做長文字去重(一分鐘系列)

2021-08-13 12:12:33 字數 2222 閱讀 7707

緣起:

(1)原創不易,網際網路抄襲成風,很多原創內容在網上被抄來抄去,改來改去

這是本文要討論的問題(盡量用大家都能立刻明白的語言和示例表述)。

一、傳統簽名演算法與文字完整性判斷

問題丟擲:

(1)運維上線乙個bin檔案,將檔案分發到4臺線上機器上,

如何判斷bin檔案全部是一致的?

(2)使用者a將訊息msg傳送給使用者b,使用者b如何判斷收到的msg_t就是使用者a傳送的msg?

思路:

乙個位元組乙個位元組的比對兩個大檔案或者大網頁效率低,我們可以

用乙個簽名值(例如md5值)代表乙個大檔案,簽名值相同則認為大檔案相同

(先不考慮衝突率)

回答:(1)將bin檔案取md5,將4臺線上機器上的bin檔案也取md5,如果5個md5值相同,說明一致

(2)使用者a將msg以及訊息的md5同時傳送給使用者b,使用者b收到msg_t後也取md5,得到的值與使用者a傳送過來的md5值如果相同,則說明msg_t與msg相同

結論:md5是一種簽名演算法,常用來判斷資料的完整性與一致性

md5設計原則

:兩個文字哪怕只有1個bit不同,其md5簽名值差別也會非常大,故它只適用於「完整性」check,不適用於「相似性」check。

新問題丟擲:

有沒有一種簽名演算法,如果文字非常相似,簽名值也非常相似呢?

二、文字相似性的簽名演算法

上文提出的問題,可以用區域性敏感雜湊

問題的提出

:什麼是minhash? 回答

:minhash是區域性敏感雜湊的一種,它常用來快速判定集合的相似性,也常用於檢測網頁的重複性,其思路為,用相同的規則抽取集合中的少部分元素代表整個集合,如果少部分元素的重合度很高,非常可能整個集合的重複度也很高。

舉例:待判定的集合為a

已有的集合為: b,

c,d假設使用部分元素代替全體集合的規則為:

集合內元素進行排序,取值最小的4個

(這個過程有資訊損失,我們可以認為是乙個hash過程)

處理結果為: a

b      =>     a與b有1個元素相同

c      =>     a與c有0個元素相同

d      =>     a與d有2個元素相同

判斷結論:我們認為集合a與集合d是最相似的

這個例子有點2,但基本能說明整體思路,實際在執行的過程中:

(1)我們可以使用更多的元素來代表集合,以提高準確性(例如,將上例中的4個元素代表集合公升級為8個元素代表集合)

(2)我們可以

使用更多的hash函式來代表集合

,以提高準確性(例如,上例除了「排序後取值最小的4個元素代表集合」,還可以增加乙個雜湊函式「排序後取值最大的4個元素代表集合」)

(3)minhash可以量化評判相似度,亦可以評判網頁是否重複(乙個分類問題),設定相似度閾值,高於閾值為重複,低於閾值為不重複

(4)實際排重過程中,網頁庫中的雜湊值都可以提前計算,只有待判定的集合或者網頁的雜湊值需要臨時計算

三、minhash與長文字重複度檢測有什麼關係

目前看來沒什麼關係,但如果我們能將每乙個長文字用乙個集合來表示,就能將長文字的相似度用minhash來解決了。

問題的提出

:如何將長文字轉化為集合?

回答:我去,分詞不是就可以麼

舉例:待判定的長文字為a

已有網頁庫集合為: b

cd使用分詞將上述文字集合化: a

bcd判斷結論:噹噹噹噹,轉化為集合後,可以快速判斷a與b的相似度最高,當然實際執行過程中,除了分詞還得考慮詞頻,用這種方法對長文字進行相似度檢測,準確率非常高(文字越長越準)

四、還有沒有更有效的方法

使用上述方法進行文字相似度檢測,需要進行中文分詞,詞頻統計,雜湊值計算,相似度計算,計算量微大。

然而,抄襲成風,一字不改的風氣,讓技術有了更廣闊的優化空間,贊!

怎麼優化呢?

不再進行分詞,而是進行「分句」

,用標點符號把長文按照句子分開,使用n個句子集合(例如一篇文章中5條最長的句子作為簽名,注意,長句子比短句子更具有區分性)作為文章的簽名,在抄襲成風的網際網路環境下,此法判斷網頁的重複度能大大降低工程複雜度,並且準確度也異常的高。

五、結論

在抄襲成風的網際網路環境下,採用「分句」的方式,用5條最長的網頁內容作為網頁的簽名,能夠極大的降低排重系統複雜度,提高排重準確率,不失為一種好的選擇。

如果有收穫,幫忙**哈。

===【完】===

python百度文庫文字提取 百度文庫文字爬取

import requests import re import json headers 模擬手機 def get num url response requests.get url,headers headers text print response result re.search r md...

百度文字識別API

後台呼叫api時需要用到這幾個引數。後台呼叫 識別api的方法 public class pictoword 前端html 上傳後台 識別營業執照返回執照資訊 呼叫api得到 解析後的資訊,返回前端ajax string picmsg pictoword.getbussinesslicensemsg...

做百度SEO的絕不碰百度的產品

研究seo有兩年時間了,對seo,個人覺得我不算是個菜鳥!在這裡給大家乙個警告 做中文站seo的朋友絕不能用旗下相關 的任何產品!下面我來向大家介紹乙個我在門前搞動作的記錄和後果。2009年10月本人在貼吧陸續留下10條外鏈,第二天沒事,第三天也是沒事的 問題在於下次大更新時就不一樣了,我的站在消失...