日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

版權(quán)聲明:本文為博主原創(chuàng)文章,地址:http://blog.csdn.net/napoay,轉(zhuǎn)載請留言。

總結(jié)Jackcard相似度和余弦相似度。

一、集合的Jackcard相似度

1.1Jackcard相似度

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

數(shù)學(xué)公式描述:

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

    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("互聯(lián)網(wǎng)");s1.add("金融");s1.add("房產(chǎn)");s1.add("融資");s1.add("科技");Set<String> s2 = new HashSet<String>();s2.add("互聯(lián)網(wǎng)");s2.add("開源");s2.add("人工智能");s2.add("軟件");s2.add("科技");System.out.println(calJackcardSim(s1, s2));} }

    運(yùn)行結(jié)果

    [科技, 房產(chǎn), 軟件, 融資, 人工智能, 互聯(lián)網(wǎng), 開源, 金融] [科技, 互聯(lián)網(wǎng)] 0.25

    二、向量空間模型

    2.1簡介

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

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

    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實(shí)現(xiàn)

    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);} }

    運(yùn)行結(jié)果:

    [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

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。