`
zhaoyanfangeye
  • 浏览: 124836 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

相似度

阅读更多

/**
	 * 计算字符串之间的编辑距离,反映其相似度
	 * @param str           待比较字符串
	 * @param strCmp        待比较字符串
	 * @return
	 */
	public static double editDistance (String str,String strCmp)
	{
		double result=0;
		if((str!=null && strCmp!=null))
		{
			String strTemp=str;
			String strLargeTemp=strCmp;
			if(strTemp.length()>strCmp.length())
			{
				strTemp=strCmp;
				strLargeTemp=str;
			}
			int[] tempInt=new int[strTemp.length()+1];	
			int[] resultInt=new int[strTemp.length()+1];
			//initialize the array "tempInt" 
			for(int i=0;i<=strTemp.length();i++)
			{
				tempInt[i]=i;
				resultInt[i]=i;
			}
			
			for(int j=1;j<=strLargeTemp.length();j++)
			{
			    resultInt[0]=j;
				for(int k=1;k<=strTemp.length();k++)
				{
					if(strTemp.charAt(k-1)==strLargeTemp.charAt(j-1))
						resultInt[k]=tempInt[k-1];
					else
					{
						int min=tempInt[k]<tempInt[k-1]? tempInt[k]:tempInt[k-1];
						min=min<resultInt[k-1]? min:resultInt[k-1];
						resultInt[k]=min+1;
					}
					
				}
				
				for(int l=0;l<=strTemp.length();l++)
				{
					tempInt[l]=resultInt[l];
				}

			}
			
			if(strLargeTemp.length()!=0)
				result=(double)(resultInt[strTemp.length()])/(strLargeTemp.length());
			if(resultInt[strTemp.length()]==strLargeTemp.length()-strTemp.length())
			{
				result=-result;
			}
		}
		return result;
	}
	
	
	/**
	 * 计算两个字符串的最长公共子序列
	 * @param str
	 * @param strCmp
	 * @return
	 */
	public static double longestSubstring(String str,String strCmp)
	{
		double result=0;
		if((str!=null && strCmp!=null))
		{
			str=sortString(str);
			strCmp=sortString(strCmp);
			String strTemp=str;
			String strLargeTemp=strCmp;
			if(strTemp.length()>strCmp.length())
			{
				strTemp=strCmp;
				strLargeTemp=str;
			}
			int[] tempInt=new int[strTemp.length()+1];	
			int[] resultInt=new int[strTemp.length()+1];
			//initialize the array "tempInt" 
			for(int i=0;i<=strTemp.length();i++)
				tempInt[i]=0;
			
			for(int j=1;j<=strLargeTemp.length();j++)
			{
			    resultInt[0]=0;
				for(int k=1;k<=strTemp.length();k++)
				{
					if(strTemp.charAt(k-1)==strLargeTemp.charAt(j-1))
						resultInt[k]=tempInt[k-1]+1;
					else
					{
						resultInt[k]=tempInt[k]>resultInt[k-1]? tempInt[k]:resultInt[k-1];
					}
					
				}
				
				for(int l=0;l<=strTemp.length();l++)
				{
					tempInt[l]=resultInt[l];
				}

			}
			
			if(strLargeTemp.length()!=0 && strTemp.length()!=0)
			{
				double  biZhi=(double)(strLargeTemp.length())/strTemp.length();
				double  divisor=Math.pow(strTemp.length(),2)*(2-Math.pow(2, (1-biZhi)));
				divisor=Math.sqrt(divisor);
				result=((double)(resultInt[strTemp.length()]))/divisor;
			}
		}
		return (result);
	}
	
	/**
	 * 字符串排序(包含中文字符)
	 * @param str
	 * @return
	 */
	public static String sortString(String str)
	{
		if (str==null)
			return "";
		StringBuilder strTemp=new StringBuilder("");
		int i=0,j=0;
		int length=str.length();
		int temp=0;
		int[] arrayTemp=new int[length];
		for(i=0;i<length;i++)
		{
			arrayTemp[i]=str.codePointAt(i);
		}
		
		for (i=0;i<length;i++)
		{
			for(j=0;j<length-1-i;j++)
			{
				if(arrayTemp[j]>arrayTemp[j+1])
				{
					temp=arrayTemp[j];
					arrayTemp[j]=arrayTemp[j+1];
					arrayTemp[j+1]=temp;
				}
			}
		}
		
		
		for(i=0;i<length;i++)
		{
			strTemp.appendCodePoint(arrayTemp[i]);
		}
		
		return strTemp.toString();
	}

分享到:
评论

相关推荐

    比较曲线相似度zzzzzz

    在IT领域,尤其是在数据分析、图像处理以及模式识别中,计算两个曲线之间的相似度是一个重要的任务。本主题聚焦于“比较曲线相似度”,采用余弦相似度和位移比较法来解决这一问题。以下是对这些概念的详细解释: **...

    Java之词义相似度计算(语义识别、词语情感趋势、词林相似度、拼音相似度、概念相似度、字面相似度)

    在IT领域,尤其是在自然语言处理(NLP)中,词义相似度计算是核心任务之一。Java作为一种广泛应用的编程语言,提供了丰富的库和工具来实现这一功能。本篇将深入探讨标题和描述中提到的几个关键概念:语义识别、词语...

    易语言快速计算文本相似度

    在IT领域,文本相似度计算是一项重要的技术,广泛应用于自然语言处理、信息检索、机器学习等领域。本资源提供了一个易语言实现的快速计算文本相似度的源码,可以帮助开发者高效地进行文本比较和分析。 易语言是一种...

    易语言文本相似度算法

    在"易语言文本相似度算法"这个主题中,我们主要关注的是如何使用易语言来实现文本相似度的计算。文本相似度算法是自然语言处理领域的一个重要组成部分,它用于衡量两个或多个文本之间的相似程度。 文本相似度算法...

    余弦相似度计算代码

    ### 余弦相似度计算代码解析 #### 一、引言 余弦相似度是一种用于衡量两个非零向量之间角度的度量方法,广泛应用于信息检索、文本挖掘、推荐系统等领域。它通过计算两个向量之间的夹角余弦值来评估它们之间的相似...

    C#余弦算法比较文章相似度

    在IT领域,文本相似度计算是一项重要的任务,用于找出两篇或多篇文章之间的相似性。本文主要探讨了如何利用C#编程语言实现基于TF-IDF的余弦算法来完成这一任务,特别是针对文章内容以及图片的相似度比较。下面将详细...

    c#图像相似度比较demo

    在C#编程环境中,图像相似度比较是一个常见的需求,特别是在图像处理、计算机视觉以及机器学习等领域。本示例代码“c#图像相似度比较demo”是利用灰度直方图方法来实现图像相似度评估的一个小项目。灰度直方图是一种...

    图像相似度计算方法集,图片相似度算法,matlab

    在图像处理领域,计算图像之间的相似度是一项至关重要的任务,广泛应用于图像检索、图像分类、图像拼接等场景。本资料包重点介绍了三种在MATLAB环境中实现的图像相似度计算方法,分别是灰度分布计算方法、颜色分布...

    相似度大小图像匹配

    在这个特定的程序中,"相似度大小图像匹配"旨在实现一种算法,它能够对四幅图像进行比较,选择其中一幅作为目标图像,并根据与其他三幅图像的相似度进行排序。这涉及到计算机视觉和机器学习的多个知识点。 首先,...

    字符串相似度算法 字符串相似度算法 字符串相似度算法

    字符串相似度算法 字符串相似度算法是一种衡量两个字符串之间相似度的方法,广泛应用于自然语言处理、数据挖掘、机器学习等领域。在本文中,我们将讨论一种常用的字符串相似度算法:Levenshtein Distance。 什么是...

    AudioCompare 音频相似度比较

    "AudioCompare 音频相似度比较"是这样一个工具,它能够对两个或多个音频文件进行比较,并计算出它们之间的相似度。这种技术的核心在于通过算法分析音频的特性,如频率分布、时间序列模式等,从而量化音频之间的相似...

    Mysql相似度分析,Oracle相似度分析,样本相似度分析,字段相似度分析。

    在数据库管理领域,相似度分析是一项重要的任务,用于评估数据之间的相似程度,这对于数据清洗、数据匹配、推荐系统以及异常检测等应用场景具有关键价值。在本文中,我们将深入探讨Oracle和Mysql数据库如何进行...

    IKAnalyzer中文分词计算句子相似度

    例如,使用余弦相似度,可以将分词后的结果转化为向量,然后应用余弦公式计算两个句子的相似度。 总之,IKAnalyzer是一个强大的中文分词工具,结合合适的句子相似度计算方法,可以有效地处理中文文本分析任务。在...

    Oracle字符相似度函数

    Oracle字符相似度函数是Oracle数据库系统提供的一种功能,用于评估两个字符串之间的相似性。这个功能在数据清洗、信息检索、文本分析等领域具有广泛的应用。在SQL查询中,我们可以直接使用这些函数来比较不同字符串...

    余弦相似度算法(python代码)

    余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值, 来评估他们的相似度。 余弦相似度将向量根据坐标值,绘制到向量空间中,如常见的二维空间。 余弦相似度衡量的是2个向量间的夹角大小,通过夹角的...

    易语言文本相似度判断模块

    文本相似度判断在信息处理、自然语言处理以及机器学习等领域有着广泛的应用,例如搜索引擎的搜索结果排序、抄袭检测、文本分类等。这个"易语言文本相似度判断模块"就是为实现这些功能而编写的代码。 在易语言中实现...

    基于知网的词汇相似度计算源代码

    在IT领域,词汇相似度计算是一项重要的任务,尤其在自然语言处理(NLP)和信息检索(IR)中。此项目“基于知网的词汇相似度计算源代码”旨在利用知网的数据资源来实现高效的词汇相似度计算。知网是中国最大的学术...

    mysql 计算字符串相似度

    ### MySQL 计算字符串相似度 #### 背景与需求 在许多应用场景中,我们需要对两个字符串进行相似度比较,比如搜索引擎中的关键词匹配、文本分析中的近义词识别等。MySQL 提供了多种方法来实现字符串相似度的计算,...

    (python)使用余弦相似度算法计算两个文本的相似度的简单实现

    在Python编程环境中,余弦相似度算法是一种常用于计算文本相似度的方法,尤其适用于文档向量化处理后的场景。本文将详细介绍如何使用Python实现余弦相似度,并探讨其背后的概念、步骤以及具体源码分析。 余弦相似度...

    mp3音频文件相似度比对软件

    《MP3音频文件相似度比对软件解析及技术要点》 在数字音频处理领域,MP3音频文件的相似度比对是一项重要的技术应用。本文将深入探讨这一主题,并结合提供的软件资源,阐述其核心原理与关键技术。 MP3,全称MPEG ...

Global site tag (gtag.js) - Google Analytics