日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Jackcard相似度和余弦相似度(向量空间模型)的java实现

發布時間:2025/7/14 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jackcard相似度和余弦相似度(向量空间模型)的java实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

版權聲明:本文為博主原創文章,地址:http://blog.csdn.net/napoay,轉載請留言。

總結Jackcard相似度和余弦相似度。

一、集合的Jackcard相似度

1.1Jackcard相似度

Jaccard相似指數用來度量兩個集合之間的相似性,它被定義為兩個集合交集的元素個數除以并集的元素個數。

數學公式描述:

J(A,B)=|AB||AB|
這個看似簡單的算法有很大的用處,比如:
  • 抄襲文檔
    高明的抄襲者為了掩蓋自己抄襲的事實,會選擇性的抄襲文檔中的一些段落,或者對詞語或原始文本中的句序進行改變。jackcard相似度計算適合從字面上進行計算,如果是更高級的抄襲改變了語義jackcard相似度計算就無能為力了
  • 鏡像頁面
    多個主機上建立鏡像以共享加載內容,同一份內容有多個副本,這種情況實現jackcard相似度計算十分有效。
  • 同源新聞稿
    一個記者撰寫了一份新聞稿件投稿多家媒體,稿件經過少量修改后發布,使用這些同源新聞稿可以用jackcard相似度算法來檢測出來
  • 1.2 Java實現

    import java.util.HashSet; import java.util.Map; import java.util.Set;/*** Created by bee on 17/4/12.*/ public class JackcardSim {public static double calJackcardSim(Set<String> s1, Set<String> s2) {Set<String> all = new HashSet<>();all.addAll(s1);all.addAll(s2);System.out.println(all);Set<String> both = new HashSet<>();both.addAll(s1);both.retainAll(s2);System.out.println(both);return (double) both.size() / all.size();}public static void main(String[] args) {Set<String> s1 = new HashSet<String>();s1.add("互聯網");s1.add("金融");s1.add("房產");s1.add("融資");s1.add("科技");Set<String> s2 = new HashSet<String>();s2.add("互聯網");s2.add("開源");s2.add("人工智能");s2.add("軟件");s2.add("科技");System.out.println(calJackcardSim(s1, s2));} }

    運行結果

    [科技, 房產, 軟件, 融資, 人工智能, 互聯網, 開源, 金融] [科技, 互聯網] 0.25

    二、向量空間模型

    2.1簡介

    向量空間模型是一個把文本文件表示為標識符(比如索引)向量的代數模型。它應用于信息過濾、信息檢索、索引以及相關排序。

    文檔和查詢都用向量來表示。

    dj=(w1,j,w2,j,...,wt,j)q=(w1,q,w2,q,...,wt,q)
    cosθ=d2?qd2q=i=1Nwi,jwi,qi=1Nw2i,ji=1Nw2i,q

    2.2、java實現

    import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set;/*** Created by bee on 17/4/10.*/ public class Vsm {public static double calCosSim(Map<String, Double> v1, Map<String, Double>v2) {double sclar = 0.0,norm1=0.0,norm2=0.0,similarity=0.0;Set<String> v1Keys = v1.keySet();Set<String> v2Keys = v2.keySet();Set<String> both= new HashSet<>();both.addAll(v1Keys);both.retainAll(v2Keys);System.out.println(both);for (String str1 : both) {sclar += v1.get(str1) * v2.get(str1);}for (String str1:v1.keySet()){norm1+=Math.pow(v1.get(str1),2);}for (String str2:v2.keySet()){norm2+=Math.pow(v2.get(str2),2);}similarity=sclar/Math.sqrt(norm1*norm2);System.out.println("sclar:"+sclar);System.out.println("norm1:"+norm1);System.out.println("norm2:"+norm2);System.out.println("similarity:"+similarity);return similarity;}public static void main(String[] args) {Map<String, Double> m1 = new HashMap<>();m1.put("Hello", 1.0);m1.put("css", 2.0);m1.put("Lucene", 3.0);Map<String, Double> m2 = new HashMap<>();m2.put("Hello", 1.0);m2.put("Word", 2.0);m2.put("Hadoop", 3.0);m2.put("java", 4.0);m2.put("html", 1.0);m2.put("css", 2.0);calCosSim(m1, m2);} }

    運行結果:

    [css, Hello] sclar:5.0 norm1:14.0 norm2:35.0 similarity:0.22587697572631282

    三、參考資料

    https://zh.wikipedia.org/wiki/%E5%90%91%E9%87%8F%E7%A9%BA%E9%96%93%E6%A8%A1%E5%9E%8B
    http://baike.baidu.com/link?url=enqtEW1bEXe0iZvil1MBk8m2upnfmN118p4cgjNpYdoJYe2l-FC5_s_yYQAq_3GUtiQW0jgwfMMBBxM0U16JiRKeFToPQ0fj058H7P8mHlZ5RV7rERN9Je7jdrYdA3gI7SRMUNTDnNyGoGgBJZN7sq

    總結

    以上是生活随笔為你收集整理的Jackcard相似度和余弦相似度(向量空间模型)的java实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。