緣起:
(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條外鏈,第二天沒事,第三天也是沒事的 問題在於下次大更新時就不一樣了,我的站在消失...