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

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

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

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

(1)余弦相似性

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

相關介紹可參考百度百科:余弦相似性

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

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class SimilarDegreeByCos
{
  /*
   * 計算兩個字符串(英文字符)的相似度,簡單的余弦計算,未添權重
   */
   public static double getSimilarDegree(String str1, String str2)
   {
    //創(chuàng)建向量空間模型,使用map實現(xiàn),主鍵為詞項,值為長度為2的數(shù)組,存放著對應詞項在字符串中的出現(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);
       }
     }
     //計算相似度
     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));
   }
}

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

希望本文所述對大家java程序設計有所幫助。

相關文章

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

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

    北京時間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并指定返回類型的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java實現(xiàn)動態(tài)數(shù)字時鐘

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

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

    一文帶你深入了解Guava的緩存機制

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

    Shell重啟SpringBoot項目腳本的示例代碼(含服務守護)

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

    Java實現(xiàn)簡單畫畫畫板

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

    JAVA中 終止線程的方法介紹

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

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

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

    Java基礎語法:邏輯控制

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

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

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

最新評論