Java基于余弦方法实现的计算相似度算法示例

引导语:Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,以下是小编整理的Java基于余弦方法实现的`计算相似度算法示例,欢迎参考阅读!

(1)余弦相似性

通过测量两个向量之间的角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。所以,它通常用于文件比较。

相关介绍可参考百度百科:余弦相似性

(2)算法实现的中未使用权重(IDF ---逆文档频率),使用词项的出现次数作为向量空间的值。

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

public class SimilarDegreeByCos

{

/*

* 计算两个字符串(英文字符)的相似度,简单的余弦计算,未添权重

*/

public static double getSimilarDegree(String str1, String str2)

{

//创建向量空间模型,使用map实现,主键为词项,值为长度为2的数组,存放着对应词项在字符串中的出现次数

MapvectorSpace = new HashMap();

int[] itemCountArray = null;//为了避免频繁产生局部变量,所以将itemCountArray声明在此

//以空格为分隔符,分解字符串

String strArray[] = str1.split(" ");

for(int i=0; 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

{

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基于余弦方法实现的计算相似度算法示例】相关文章:

相似度计算 java_Java基于余弦方法实现的计算相似度算法示例相关推荐

  1. pq法潮流计算matlab,基于MATLAB电力系统PQ潮流计算程序设计(范文1)

    <基于MATLAB电力系统PQ潮流计算程序设计.doc>由会员分享,可免费在线阅读全文,更多与<基于MATLAB电力系统PQ潮流计算程序设计>相关文档资源请在帮帮文库(www. ...

  2. python计算最大公约数函数_Python实现的求解最大公约数算法示例

    本文实例讲述了Python实现的求解最大公约数算法.分享给大家供大家参考,具体如下: 使用Python求解两个数的最大公约数的时候用到了前面介绍的分解质因式.其实,我写分解质因式程序的时候就是因为发现 ...

  3. aes加密算法python实现_Python基于pycrypto实现的AES加密和解密算法示例

    本文实例讲述了Python基于pycrypto实现的AES加密和解密算法.分享给大家供大家参考,具体如下: 一 代码 # -*- coding: UTF-8 -*- import string imp ...

  4. 单相短路计算matlab,基于MATLAB的电力系统短路计算.doc

    摘要:供电系统要求稳定的,不间断地对负荷供电,以保证社会的稳定和发展.但由于各种原因,电力系统经常会发生故障,破坏系统的正常运行,而最常见的故障就是短路.借助仿真软件分析系统短路故障,既可作为教师课堂 ...

  5. monkey 运行时间怎么计算_基于STM32F103C8T6工控板利用定时器计算某段代码的运行时间...

    本人参考了热心网友分享的一些案例,并增加了一些个人认为比较好的想法,重新整合了一下代码. 硬件:某宝网上购买的STM32F103C8T6工控板,价格50¥左右: 思路: 1)利用通用定时器(选择定时器 ...

  6. 阶乘的计算java_java中四种阶乘的计算

    package com.zf.s2;//创建一个包 import java.math.BigInteger;//导入类 import java.util.ArrayList; import java. ...

  7. 定义一个长方形的类。在这个类中有二个属性长和宽。 定义一个计算长方形周长的方法 定义一个计算长方形面积的方法...

    好的,以下是一个定义长方形类的 Python 代码: class Rectangle:def __init__(self, length, width):self.length = lengthsel ...

  8. python最大公约数计算的程序代码_Python实现的求解最大公约数算法示例

    本文实例讲述了Python实现的求解最大公约数算法.分享给大家供大家参考,具体如下: 使用Python求解两个数的最大公约数的时候用到了前面介绍的分解质因式.其实,我写分解质因式程序的时候就是因为发现 ...

  9. 基于Abaqus的边坡可靠度计算

    文章目录 基于Abaqus的边坡可靠度计算 一.利用Abaqus建立边坡模型并进行强度折减计算 1.在CAE中建立边坡模型 2.将CAD模型导入CAE 3.建模过程 4.后处理 二.Abaqus强度折 ...

最新文章

  1. C# 温故而知新:Stream篇(二)
  2. 产品经理的知识结构是什么
  3. 288家众筹平台正常运营 43家停运或倒闭
  4. java ArrayList转数组
  5. Linux(六) 磁盘与文件系统
  6. Python数据结构与算法--数据类型
  7. spring学习(45):util名称空间注入
  8. 【Bootstrap】 bootstrap-table表格组件
  9. 恢复到特定点(时间点、scn、日志序列号),rman不完全恢复
  10. oracle sql分析 cost,Oracle SQL的优化技巧详解
  11. 一道和逆向和溢出有关的竞赛题分析
  12. 直方图python_python实现直方图的应用
  13. 腐蚀rust服务器命令_服务器指令_腐蚀rust服务器命令一览 腐蚀rust有哪些服务器命令_3DM单机...
  14. 短信验证码的发送、接收验证流程
  15. 函数的应用及其解析大全!
  16. 企业微信oauth认证_OAuth验证接口
  17. vs2017 15.5.x dll调试不成功问题
  18. 程序员与爱情不仅只是擦肩而过
  19. 15 路由器综合路由配置
  20. 单片机开发,口袋秤单片机芯片的开发流程

热门文章

  1. Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器
  2. 对于大批量赋值功能,使用if判断是否能提高性能
  3. C#数据库类(zz)
  4. CentOS搭建全功能服务器(Nginx+Tomcat+PHP+SSL)
  5. 根据一览,自动生成Sheet页
  6. 有り様、状態、様子 の 区別
  7. 营口(熊岳)温泉旅游归来!
  8. 【Python-3.3】win7 安装pip
  9. 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)
  10. WebSocket 解决javascript跨域问题一剂良药