欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java基于余弦方法實(shí)現(xiàn)的計(jì)算相似度算法示例

 更新時(shí)間:2017年08月08日 10:26:51   作者:damotiansheng  
這篇文章主要介紹了Java基于余弦方法實(shí)現(xiàn)的計(jì)算相似度算法,簡(jiǎn)單說明了余弦相似性的概念、原理并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)余弦相似性算法的相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Java基于余弦方法實(shí)現(xiàn)的計(jì)算相似度算法。分享給大家供大家參考,具體如下:

(1)余弦相似性

通過測(cè)量?jī)蓚€(gè)向量之間的角的余弦值來度量它們之間的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。從而兩個(gè)向量之間的角度的余弦值確定兩個(gè)向量是否大致指向相同的方向。所以,它通常用于文件比較。

相關(guān)介紹可參考百度百科:余弦相似性

(2)算法實(shí)現(xiàn)的中未使用權(quán)重(IDF ---逆文檔頻率),使用詞項(xiàng)的出現(xiàn)次數(shù)作為向量空間的值。

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class SimilarDegreeByCos
{
  /*
   * 計(jì)算兩個(gè)字符串(英文字符)的相似度,簡(jiǎn)單的余弦計(jì)算,未添權(quán)重
   */
   public static double getSimilarDegree(String str1, String str2)
   {
    //創(chuàng)建向量空間模型,使用map實(shí)現(xiàn),主鍵為詞項(xiàng),值為長(zhǎng)度為2的數(shù)組,存放著對(duì)應(yīng)詞項(xiàng)在字符串中的出現(xiàn)次數(shù)
     Map<String, int[]> vectorSpace = new HashMap<String, int[]>();
     int[] itemCountArray = null;//為了避免頻繁產(chǎn)生局部變量,所以將itemCountArray聲明在此
     //以空格為分隔符,分解字符串
     String strArray[] = str1.split(" ");
     for(int i=0; i<strArray.length; ++i)
     {
       if(vectorSpace.containsKey(strArray[i]))
         ++(vectorSpace.get(strArray[i])[0]);
       else
       {
         itemCountArray = new int[2];
         itemCountArray[0] = 1;
         itemCountArray[1] = 0;
         vectorSpace.put(strArray[i], itemCountArray);
       }
     }
     strArray = str2.split(" ");
     for(int i=0; i<strArray.length; ++i)
     {
       if(vectorSpace.containsKey(strArray[i]))
         ++(vectorSpace.get(strArray[i])[1]);
       else
       {
         itemCountArray = new int[2];
         itemCountArray[0] = 0;
         itemCountArray[1] = 1;
         vectorSpace.put(strArray[i], itemCountArray);
       }
     }
     //計(jì)算相似度
     double vector1Modulo = 0.00;//向量1的模
     double vector2Modulo = 0.00;//向量2的模
     double vectorProduct = 0.00; //向量積
     Iterator iter = vectorSpace.entrySet().iterator();
     while(iter.hasNext())
     {
       Map.Entry entry = (Map.Entry)iter.next();
       itemCountArray = (int[])entry.getValue();
       vector1Modulo += itemCountArray[0]*itemCountArray[0];
       vector2Modulo += itemCountArray[1]*itemCountArray[1];
       vectorProduct += itemCountArray[0]*itemCountArray[1];
     }
     vector1Modulo = Math.sqrt(vector1Modulo);
     vector2Modulo = Math.sqrt(vector2Modulo);
     //返回相似度
    return (vectorProduct/(vector1Modulo*vector2Modulo));
   }
   /*
   *
   */
   public static void main(String args[])
   {
     String str1 = "gold silver truck";
     String str2 = "Shipment of gold damaged in a fire";
     String str3 = "Delivery of silver arrived in a silver truck";
     String str4 = "Shipment of gold arrived in a truck";
     String str5 = "gold gold gold gold gold gold";
     System.out.println(SimilarDegreeByCos.getSimilarDegree(str1, str2));
     System.out.println(SimilarDegreeByCos.getSimilarDegree(str1, str3));
     System.out.println(SimilarDegreeByCos.getSimilarDegree(str1, str4));
     System.out.println(SimilarDegreeByCos.getSimilarDegree(str1, str5));
   }
}

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • IntelliJ IDEA 2023.2正式發(fā)布新UI和Profiler轉(zhuǎn)正(最新推薦)

    IntelliJ IDEA 2023.2正式發(fā)布新UI和Profiler轉(zhuǎn)正(最新推薦)

    北京時(shí)間2023年7月26日,IntelliJ IDEA 2023.2正式發(fā)布,IntelliJ IDEA 2023.2 引入 AI Assistant(AI助手),通過一組由 AI 提供支持的功能助力開發(fā),今天給大家分享IntelliJ IDEA 2023.2正式發(fā)布新UI和Profiler轉(zhuǎn)正,感興趣的朋友一起看看吧
    2023-10-10
  • JPA如何使用entityManager執(zhí)行SQL并指定返回類型

    JPA如何使用entityManager執(zhí)行SQL并指定返回類型

    這篇文章主要介紹了JPA使用entityManager執(zhí)行SQL并指定返回類型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘

    Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 一文帶你深入了解Guava的緩存機(jī)制

    一文帶你深入了解Guava的緩存機(jī)制

    緩存在現(xiàn)代編程中的作用非常大,它能提高應(yīng)用性能,減少數(shù)據(jù)庫壓力,簡(jiǎn)直就是性能優(yōu)化的利器,本文主要來和大家聊聊Google?Guava的緩存機(jī)制,感興趣的小伙伴可以了解下
    2023-12-12
  • Shell重啟SpringBoot項(xiàng)目腳本的示例代碼(含服務(wù)守護(hù))

    Shell重啟SpringBoot項(xiàng)目腳本的示例代碼(含服務(wù)守護(hù))

    本文介紹了如何使用?Bash?腳本來管理和守護(hù)運(yùn)行服務(wù),將展示一個(gè)示例腳本,該腳本可以停止、啟動(dòng)和守護(hù)運(yùn)行一個(gè)服務(wù),并提供了相應(yīng)的解釋和用法說明,文章通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Java實(shí)現(xiàn)簡(jiǎn)單畫畫畫板

    Java實(shí)現(xiàn)簡(jiǎn)單畫畫畫板

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單畫畫畫板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • JAVA中 終止線程的方法介紹

    JAVA中 終止線程的方法介紹

    JAVA中 終止線程的方法介紹,需要的朋友可以參考一下
    2013-03-03
  • Java異常處理中的各種細(xì)節(jié)匯總

    Java異常處理中的各種細(xì)節(jié)匯總

    這篇文章主要給大家介紹了關(guān)于Java異常處理中的各種細(xì)節(jié)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Java基礎(chǔ)語法:邏輯控制

    Java基礎(chǔ)語法:邏輯控制

    下面小編就為大家?guī)硪黄狫ava邏輯控制的基礎(chǔ)文章。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-08-08
  • spring中實(shí)現(xiàn)容器加載完成后再執(zhí)行自己的方法

    spring中實(shí)現(xiàn)容器加載完成后再執(zhí)行自己的方法

    這篇文章主要介紹了spring中實(shí)現(xiàn)容器加載完成后再執(zhí)行自己的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論