亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

如何運用python完成Sim哈希算法

89542767 / 756人閱讀

  此篇文章主要是闡述了如何運用python完成Sim哈希算法,文章內(nèi)容依托于python的相關信息開展Sim哈希算法的詳細介紹一下,具有很強的參考意義,感興趣的朋友可以了解一下


  1.為何需用Simhash?


  傳統(tǒng)式相關性優(yōu)化算法:語義相似度測算,一般采用線性空間實體模型(VSM),先向文字中文分詞,提取特征,依據(jù)特點創(chuàng)建文字空間向量,把文字中間相關性測算轉化成矩陣的特征值之間的距離測算,如歐氏距離、余弦交角等。


  缺陷:大數(shù)據(jù)技術前提下復雜性會比較高。


  Simhash應用情景:測算規(guī)模性語義相似度,完成大量文本內(nèi)容去重。


  Sim哈希算法基本原理:根據(jù)hash值較為相關性,根據(jù)2個字符串數(shù)組測算出來的hash值,開展取反實際操作,隨后獲得相距的數(shù)量,數(shù)據(jù)越多則差別越多。


  2.文章內(nèi)容關鍵字svm算法優(yōu)化算法TD-IDF


  高頻詞(TF):一個成語在全篇文章中存在的頻次與詞句總數(shù)量比例;


  反向高頻詞(IDF):一個成語,在大多數(shù)文中出現(xiàn)頻率都很高,這個詞不有代表性的,就能夠降低它的作用,其實就是給予其比較小的權重值。


  分子結構意味著文章內(nèi)容數(shù)量,真分數(shù)表明該詞句在各種文章內(nèi)容發(fā)生的篇幅。通常會采用真分數(shù)加一點的辦法,避免真分數(shù)為0的情況發(fā)生,在這一比率以后取對數(shù),便是IDF了。


  最后用tf*idf獲得一個成語的權重值,從而測算篇文章核心關鍵詞。再根據(jù)每篇比照其關鍵字的方法去文章結構開展去重。sim哈希算法對效率特性開展均衡,既能非常少對比(關鍵字不可以取過多),又可有一個好的標志性(關鍵字不可以太少)。


  3.Simhash基本原理


  Simhash是一類部分比較敏感hash。即假設A、B具有很強的相關性,在hash之后,依然可以保持這類相關性,就稱為部分比較敏感hash。


  獲得篇文章關鍵字結合,根據(jù)hash的辦法把關鍵字集合hash成一長串2進制,立即比照二進制,其相關性便是幾篇文本文檔的相關性,在查詢相關性時使用海明間距,則在比照二進制情況下,看它的有多少個位不一樣,就稱海明間距為是多少。


  將文章內(nèi)容simhash獲得一長串64席的2進制,依據(jù)工作經(jīng)驗通常取海明間距為3做為閥值,則在64位2進制中,只要是有3位之內(nèi)不一樣,就能覺得2個文本文檔是相近的,這兒的閥值還可以根據(jù)自己的喜好來設定。就是把1個文本文檔hash之后獲得一長串二進制的優(yōu)化算法,稱這一個hash為simhash。


  simhash實際完成過程如下所示:


  1.將文本文檔中文分詞,取個論文的TF-IDF權重值最高前20個詞(feature)和權重值(weight)。即一篇文章文本文檔獲得了一個長短為20的(feature:weight)的結合。


  2.對涉及的詞匯(feature),開展普通hach以后獲得了一個64求的2進制,獲得長短為20的(hash:weight)的結合。


  3.依據(jù)(2)中獲得一長串二進制(hash)中相對應位置在1是0,對相對應部位取正逢weight和負數(shù)weight。比如一個詞語經(jīng)過(2)獲得(010111:5)經(jīng)過過程(3)以后可以獲得目錄[-5,5,-5,5,5,5]。從而可以獲得20個長短為64的目錄[weight,-weight...weight]意味著1個文本文檔。


  4.對(3)中20個目錄開展列向累加獲得了一個目錄。如[-5,5,-5,5,5,5]、[-3,-3,-3,3,-3,3]、[1,-1,-1,1,1,1]開展列向累加獲得[-7,1,-9,9,3,9],那樣,對于1個文本文檔獲得,1個長短為64的目錄。


  5.對(4)中獲得的頁面上每一個值作出判斷,當以負數(shù)時去0,正逢取1。比如,[-7,1,-9,9,3,9]獲得010111,這個就獲得了一個文本文檔的simhash值了。


  6.測算相關性。兩個simhash取取反,看在其中1的數(shù)量是不是超出3。超出3則認定是不類似,應當小于等于3則認定是類似。


  Simhash總體流程表如下所示:

01.png

  4.Simhash的不足


  完全無關的文本正好對應成了相同的simhash,精確度并不是很高,而且simhash更適用于較長的文本,但是在大規(guī)模語料進行去重時,simhash的計算速度優(yōu)勢還是很不錯的。


  5.Simhash算法實現(xiàn)


  #!/usr/bin/python
  #coding=utf-8
  class Simhash:
  def __init__(self,tokens='',hashbits=128):
  self.hashbits=hashbits
  self.hash=self.simhash(tokens)
  def __str__(self):
  return str(self.hash)
  #生成simhash值
  def simhash(self,tokens):
  v=[0]*self.hashbits
  for t in[self._string_hash(x)for x in tokens]:#t為token的普通hash值
  for i in range(self.hashbits):
  bitmask=1<<i
  if t&bitmask:
  v<i>+=1#查看當前bit位是否為1,是的話將該位+1
  else:
  v<i>-=1#否則的話,該位-1
  fingerprint=0
  for i in range(self.hashbits):
  if v<i>>=0:
  fingerprint+=1<<i
  return fingerprint#整個文檔的fingerprint為最終各個位>=0的和
  #求海明距離
  def hamming_distance(self,other):
  x=(self.hash^other.hash)&((1<<self.hashbits)-1)
  tot=0
  while x:
  tot+=1
  x&=x-1
  return tot
  #求相似度
  def similarity(self,other):
  a=float(self.hash)
  b=float(other.hash)
  if a>b:
  return b/a
  else:
  return a/b
  #針對source生成hash值
  def _string_hash(self,source):
  if source=="":
  return 0
  else:
  x=ord(source[0])<<7
  m=1000003
  mask=2**self.hashbits-1
  for c in source:
  x=((x*m)^ord(c))&mask
  x^=len(source)
  if x==-1:
  x=-2
  return x
  測試:
  if __name__=='__main__':
  s='This is a test string for testing'
  hash1=Simhash(s.split())
  s='This is a string testing 11'
  hash2=Simhash(s.split())
  print(hash1.hamming_distance(hash2),"",hash1.similarity(hash2))


  綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)韼椭?/p>


文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://www.ezyhdfw.cn/yun/128830.html

相關文章

  • python協(xié)程3:用仿真實驗學習協(xié)程

    摘要:徘徊和行程所用的時間使用指數(shù)分布生成,我們將時間設為分鐘數(shù),以便顯示清楚。迭代表示各輛出租車的進程在各輛出租車上調(diào)用函數(shù),預激協(xié)程。 前兩篇我們已經(jīng)介紹了python 協(xié)程的使用和yield from 的原理,這一篇,我們用一個例子來揭示如何使用協(xié)程在單線程中管理并發(fā)活動。。 什么是離散事件仿真 Wiki上的定義是: 離散事件仿真將系統(tǒng)隨時間的變化抽象成一系列的離散時間點上的事件,通過...

    banana_pi 評論0 收藏0
  • 協(xié)同過濾算法

    摘要:協(xié)作型過濾協(xié)同過濾是利用集體智慧的一個典型方法。這就是協(xié)同過濾的核心思想。要實現(xiàn)協(xié)同過濾,需要以下幾個步驟搜集偏好尋找相近用戶推薦物品搜集偏好首先,我們要尋找一種表達不同人及其偏好的方法。 協(xié)作型過濾 協(xié)同過濾是利用集體智慧的一個典型方法。要理解什么是協(xié)同過濾 (Collaborative Filtering, 簡稱CF),首先想一個簡單的問題,如果你現(xiàn)在想看個電影,但你不知道具體看哪...

    Batkid 評論0 收藏0
  • Item-Based Collaborative Filtering Recommendation

    摘要:用戶過去的偏好很可能展示或者反應未來的興趣偏好。數(shù)據(jù)集我們選用,下載地址數(shù)據(jù)集算法理論算法框架如圖,輸入是的評分矩陣,該矩陣非常稀疏。所以預測分兩步進行計算項目之間的相似性和根據(jù)相似性進行預測評分。 【參考文獻】:Sarwar B M . Item-based collaborative filtering recommendation algorithms[C]// Internat...

    voyagelab 評論0 收藏0
  • Python圖像處理之圖片文字識別(OCR)

    摘要:與介紹將圖片翻譯成文字一般被稱為光學文字識別,。是目前公認最優(yōu)秀最精確的開源系統(tǒng)。我們以圖片為例輸入命令識別結果如下只識別錯了一個字,識別率還是不錯的。最后加一句,對于彩色圖片的識別效果沒有黑白圖片的效果好。 OCR與Tesseract介紹 ??將圖片翻譯成文字一般被稱為光學文字識別(Optical Character Recognition,OCR)??梢詫崿F(xiàn)OCR 的底層庫并不多,...

    W4n9Hu1 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<