<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| 第一福利永久视频精品| 亚洲色偷精品一区二区三区 | 国内精品伊人久久久影院| 久久精品国产成人AV| 久久99精品久久久久久野外| 国产精品无码制服丝袜| 国产成人精品亚洲日本在线| 久久青草精品38国产免费| 精品国精品国产自在久国产应用男| 精品哟哟哟国产在线不卡| 中文字幕动漫精品专区| 亚洲AV无码成人精品区在线观看| 国产午夜精品一本在线观看| 成人国产精品999视频| 国产精品青草久久| 精品无码久久久久久国产 | 久久国产精品久久精品国产| 国产精品成人观看视频| 精品一区精品二区| 国产精品亚洲va在线观看| 国产精品无码亚洲精品2021| 最新国产成人亚洲精品影院| 亚洲欧洲久久精品| 911精品国产亚洲日本美国韩国| 久久久国产成人精品| 国产精品v片在线观看不卡| 中文字幕无码精品三级在线电影| 国产免费久久精品99久久| 国产精品狼人久久久久影院 | 国产成人福利精品视频| 国产精品亚洲综合一区在线观看 | 337P日本欧洲亚洲大胆精品| 日韩精品福利片午夜免费观着| 最新日韩精品中文字幕| 久久久久久久久无码精品亚洲日韩 | 精品视频在线观看一区二区三区| 国产精品女上位在线观看|