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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

k-shingle

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k-shingle 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文檔的k-shingle算法

本文主要是講解以Java實現。首先得出兩篇文檔的k-shingle,然后計算他們的Jaccard相似度:

集合的Jaccard相似度

集合S和T的Jaccard相似度為|S∩T|/|S∩T|,也就是集合S和T的交集的集合和集合并集大小之間的比率。一般將和T的相似度記作SIM(S,T)。


k-shingle

一篇文檔就是一個字符串。文檔的k-shingle定義為其中任意長度為k的子串。

  • 假設文檔D為字符串abcdabd,選擇k = 2, 則文檔中的所有2-shingle組成的集合為{ab,bc,cd,da,bd}。




計算 str1 = “ABCDE” 和 str2 = “ABCDF” 的 2-shingle 的jaccard相似度


- 當 k = 2時, str1 的 2-shingle 為集合A = {AB,BC,CD,DE},而str2的 2-shingle為集合B={AB,BC,CD,DF}。
- 因為A∪B = {AB,BC,CD,DE,DF},并且A∩B={AB,BC,CD},所以 SIM(A,B) = 3/5;


java代碼實現

import java.util.*;public class ShingleBased {public static void main(String args[]){ShingleBased j2 = new ShingleBased(2);// AB BC CD DE DF// 1 1 1 1 0// 1 1 1 0 1// => 3 / 5 = 0.6System.out.println(j2.similarity("ABCDE", "ABCDF"));}private int k;ShingleBased(final int k) {this.k = k;}public int getK() {return k;}public final Map<String, Integer> getProfile(String string) {HashMap<String, Integer> shingles = new HashMap<String, Integer>();for (int i = 0; i < (string.length() - k + 1); i++) {String shingle = string.substring(i, i + k);Integer old = shingles.get(shingle);if (old != null) {shingles.put(shingle, old + 1);} else {shingles.put(shingle, 1);}}return shingles;}public final double similarity(final String s1, final String s2) {if (s1.equals(s2)) {return 1;}Map<String, Integer> profile1 = getProfile(s1);Map<String, Integer> profile2 = getProfile(s2);Set<String> union = new HashSet<String>();union.addAll(profile1.keySet());union.addAll(profile2.keySet());int inter = profile1.keySet().size() + profile2.keySet().size()- union.size();return 1.0 * inter / union.size();}}

  • 文檔的k-shingle算法
    • k-shingle
      • 計算 str1 ABCDE 和 str2 ABCDF 的 2-shingle 的jaccard相似度
    • java代碼實現


參考

  • 大數據互聯網大規模數據挖掘與分布式處理
  • github.

總結

以上是生活随笔為你收集整理的k-shingle的全部內容,希望文章能夠幫你解決所遇到的問題。

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