<sup id="m40ya"></sup>
  • 
    
  • <kbd id="m40ya"></kbd>
    <samp id="m40ya"></samp>
    <ul id="m40ya"></ul>
  • 更多精彩內(nèi)容,歡迎關(guān)注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    當(dāng)前位置:首頁 科技百科 java simhash

    java simhash

    文檔

    java simhash

    java simhash是java程序中的一種算法。Simhash和一般的hash算法不同,它具有兩個(gè)關(guān)鍵的特點(diǎn):1、一個(gè)文檔的指紋是所有屬性的某種hash;2、相似文檔的hash應(yīng)該是相似的。
    推薦度:
    導(dǎo)讀java simhash是java程序中的一種算法。Simhash和一般的hash算法不同,它具有兩個(gè)關(guān)鍵的特點(diǎn):1、一個(gè)文檔的指紋是所有屬性的某種hash;2、相似文檔的hash應(yīng)該是相似的。

    java simhash是什么?讓我們一起來了解一下吧!

    java simhash是java程序中的一種算法。Simhash算法產(chǎn)生與2002年,設(shè)計(jì)非常美妙,它輸入是一個(gè)向量,得出的結(jié)果是一個(gè)F位的簽名值。

    Simhash和一般的hash算法不同,它具有兩個(gè)關(guān)鍵的特點(diǎn):

    1.一個(gè)文檔的指紋是所有屬性的某種hash;

    2.相似文檔的hash應(yīng)該是相似的;

    ?simhash 算法如下:1,將一個(gè) f 維的向量 V 初始化為 0 ; f 位的二進(jìn)制數(shù) S 初始化為 0 ;2,對每一個(gè)特征:用傳統(tǒng)的 hash 算法對該特征產(chǎn)生一個(gè) f 位的簽名 b 。對 i=1 到 f :如果b 的第 i 位為 1 ,則 V 的第 i 個(gè)元素加上該特征的權(quán)重;否則,V 的第 i 個(gè)元素減去該特征的權(quán)重。?3,如果 V 的第 i 個(gè)元素大于 0 ,則 S 的第 i 位為 1 ,否則為 0 ;4,輸出 S 作為簽名。

    simhash 算法代碼:

    package?com.xxxx.checkandbigdataquery.utils;
    ?
    import?it.unimi.dsi.fastutil.longs.LongOpenHashSet;
    import?it.unimi.dsi.fastutil.longs.LongSet;
    import?java.io.File;
    import?java.io.FileInputStream;
    import?java.io.IOException;
    import?java.nio.CharBuffer;
    import?java.util.Set;
    ?
    ?
    /**
    ?*?a?basic?SimHash?implementation
    ?*
    ?*
    ?*/
    public?class?SimHash?{
    ??public?static?final?int??HASH_SIZE??????????=?64;
    ??public?static?final?long?HASH_RANGE?????????=?2?^?HASH_SIZE;
    ??public?static?MurmurHash?hasher?????????????=?new?MurmurHash();
    ?
    ??/**
    ???*?use?short?cuts?to?obtains?a?speed?optimized?simhash?calculation
    ???*
    ???*?@param?s
    ???*??????????input?string
    ???*?@return?64?bit?simhash?of?input?string
    ???*/
    ?
    ??private?static?final?int?FIXED_CGRAM_LENGTH?=?4;
    ?
    ??public?static?long?computeOptimizedSimHashForString(String?s)?{
    ????return?computeOptimizedSimHashForString(CharBuffer.wrap(s));
    ??}
    ?
    ??public?static?long?computeOptimizedSimHashForString(CharBuffer?s)?{
    ?
    ????LongSet?shingles?=?new?LongOpenHashSet(Math.min(s.length(),?100000));
    ?
    ????int?length?=?s.length();
    ?
    ????long?timeStart?=?System.currentTimeMillis();
    ????for?(int?i?=?0;?i??56);
    ??????longAsBytes[1]?=?(byte)?(shingle?>>?48);
    ??????longAsBytes[2]?=?(byte)?(shingle?>>?40);
    ??????longAsBytes[3]?=?(byte)?(shingle?>>?32);
    ??????longAsBytes[4]?=?(byte)?(shingle?>>?24);
    ??????longAsBytes[5]?=?(byte)?(shingle?>>?16);
    ??????longAsBytes[6]?=?(byte)?(shingle?>>?8);
    ??????longAsBytes[7]?=?(byte)?(shingle);
    ?
    ??????long?longHash?=?FPGenerator.std64.fp(longAsBytes,?0,?8);
    ??????for?(int?i?=?0;?i?>?i)?&?1L)?==?1L;
    ????????v[i]?+=?(bitSet)???1?:?-1;
    ??????}
    ????}
    ?
    ????long?simhash?=?0;
    ????for?(int?i?=?0;?i??0)?{
    ????????simhash?|=?(1L?<>?i)?&?1L)?==?1L;
    ????????v[i]?+=?(bitSet)???1?:?-1;
    ??????}
    ????}
    ????long?simhash?=?0;
    ????for?(int?i?=?0;?i??0)?{
    ????????simhash?|=?(1L?<>>?-1);
    ??}
    ?
    ??public?static?void?main(String[]?args)?{
    ????try?{
    ??????//?File?file1?=?new?File("/Users/rana/academia.edu_01.html");
    ??????//?File?file2?=?new?File("/Users/rana/academia.edu_02.html");
    ?
    ??????File?file1?=?new?File(args[0]);
    ??????File?file2?=?new?File(args[1]);
    ?
    ??????byte?data1[]?=?new?byte[(int)?file1.length()];
    ??????byte?data2[]?=?new?byte[(int)?file2.length()];
    ??????FileInputStream?stream1?=?new?FileInputStream(file1);
    ??????FileInputStream?stream2?=?new?FileInputStream(file2);
    ??????stream1.read(data1);
    ??????stream2.read(data2);
    ??????String?string1?=?new?String(data1);
    ??????String?string2?=?new?String(data2);
    ?
    ??????long?timeStart?=?System.currentTimeMillis();
    ??????long?simhash1?=?computeSimHashFromString(Shingle.shingles(string1));
    ??????long?timeEnd?=?System.currentTimeMillis();
    ??????System.out.println("Old?Calc?for?Document?A?Took:"
    ??????????+?(timeEnd?-?timeStart));
    ??????timeStart?=?System.currentTimeMillis();
    ??????long?simhash2?=?computeSimHashFromString(Shingle.shingles(string2));
    ??????timeEnd?=?System.currentTimeMillis();
    ??????System.out.println("Old?Calc?for?Document?B?Took:"
    ??????????+?(timeEnd?-?timeStart));
    ??????timeStart?=?System.currentTimeMillis();
    ??????long?simhash3?=?computeOptimizedSimHashForString(string1);
    ??????timeEnd?=?System.currentTimeMillis();
    ??????System.out.println("New?Calc?for?Document?A?Took:"
    ??????????+?(timeEnd?-?timeStart));
    ??????timeStart?=?System.currentTimeMillis();
    ??????long?simhash4?=?computeOptimizedSimHashForString(string2);
    ??????timeEnd?=?System.currentTimeMillis();
    ??????System.out.println("New?Calc?for?Document?B?Took:"
    ??????????+?(timeEnd?-?timeStart));
    ?
    ??????int?hammingDistance?=?hammingDistance(simhash1,?simhash2);
    ??????int?hammingDistance2?=?hammingDistance(simhash3,?simhash4);
    ?
    ??????System.out.println("hammingdistance?Doc?(A)?to?Doc(B)?OldWay:"
    ??????????+?hammingDistance);
    ??????System.out.println("hammingdistance?Doc?(A)?to?Doc(B)?NewWay:"
    ??????????+?hammingDistance2);
    ????}?catch?(IOException?e)?{
    ??????e.printStackTrace();
    ????}
    ??}
    }

    以上就是小編今天的分享了,希望可以幫助到大家。

    文檔

    java simhash

    java simhash是java程序中的一種算法。Simhash和一般的hash算法不同,它具有兩個(gè)關(guān)鍵的特點(diǎn):1、一個(gè)文檔的指紋是所有屬性的某種hash;2、相似文檔的hash應(yīng)該是相似的。
    推薦度:
    為你推薦
    資訊專欄
    熱門視頻
    相關(guān)推薦
    java simpledateformat java sizeof java sm3加密 文章千古事得失寸心知是誰的名句 誠信的名言名句 關(guān)于讀書的名言名句 生日的經(jīng)典名句 感恩老師的名言名句 關(guān)于時(shí)間的名言名句 活著的經(jīng)典名句 java snappy 杜甫的名句 java snapshot 孟浩然的名句 關(guān)于誠信的名言名句 杜甫的名言名句 杜甫的名句有哪些 杜甫的千古名句 范仲淹的名句 范仲淹的十大經(jīng)典名句 java shuffle java sha256加密 java portal java pojo java plugin java sftp java plug-in java settimeout java platform java setlayout java serialversionuid java serializable接口 java serializable java sequence java separator java semaphore java selenium java selector java script java sandbox
    Top 国产精品大全国产精品| 久久久精品一区二区三区| 久久久久亚洲精品日久生情| 亚洲国产综合精品一区在线播放| 久久久久国产精品熟女影院| 国产精品美女久久久久AV福利 | 国产乱码精品一区二区三区四川 | 国产91久久精品一区二区| 国产亚洲精品va在线| 国产九九久久99精品影院| 日本国产成人精品视频| 国产精品国色综合久久| 国产精品久久久天天影视香蕉| 久久精品视频在线看99| 亚洲国产精品线观看不卡| 国产精品无码专区| 亚洲一级Av无码毛片久久精品| 精品无码人妻一区二区三区18| 精品无码久久久久久午夜| 亚洲精品国偷自产在线| 国产精品自产拍在线18禁| 国产在线精品一区二区| 精品久久久久久久无码久中文字幕| 99精品免费观看| 久久精品人人槡人妻人人玩| 精品99久久aaa一级毛片| 这里只有精品视频在线| 国内精品视频一区二区三区八戒| 999久久久无码国产精品| 骚片AV蜜桃精品一区| 亚洲国产精品无码一线岛国| 久久久久这里只有精品| 国产福利电影一区二区三区,亚洲国模精品一区| 成人H动漫精品一区二区| 亚洲精品综合在线影院| 亚洲国产精品日韩在线| 97在线视频精品| 精品少妇无码AV无码专区| 久久永久免费人妻精品| 亚洲AV无码成人精品区在线观看| 精品国产一区二区三区免费|