/**
* 计算字符串之间的编辑距离,反映其相似度
* @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();
}
分享到:
相关推荐
在IT领域,尤其是在数据分析、图像处理以及模式识别中,计算两个曲线之间的相似度是一个重要的任务。本主题聚焦于“比较曲线相似度”,采用余弦相似度和位移比较法来解决这一问题。以下是对这些概念的详细解释: **...
在IT领域,尤其是在自然语言处理(NLP)中,词义相似度计算是核心任务之一。Java作为一种广泛应用的编程语言,提供了丰富的库和工具来实现这一功能。本篇将深入探讨标题和描述中提到的几个关键概念:语义识别、词语...
在IT领域,文本相似度计算是一项重要的技术,广泛应用于自然语言处理、信息检索、机器学习等领域。本资源提供了一个易语言实现的快速计算文本相似度的源码,可以帮助开发者高效地进行文本比较和分析。 易语言是一种...
在"易语言文本相似度算法"这个主题中,我们主要关注的是如何使用易语言来实现文本相似度的计算。文本相似度算法是自然语言处理领域的一个重要组成部分,它用于衡量两个或多个文本之间的相似程度。 文本相似度算法...
### 余弦相似度计算代码解析 #### 一、引言 余弦相似度是一种用于衡量两个非零向量之间角度的度量方法,广泛应用于信息检索、文本挖掘、推荐系统等领域。它通过计算两个向量之间的夹角余弦值来评估它们之间的相似...
在IT领域,文本相似度计算是一项重要的任务,用于找出两篇或多篇文章之间的相似性。本文主要探讨了如何利用C#编程语言实现基于TF-IDF的余弦算法来完成这一任务,特别是针对文章内容以及图片的相似度比较。下面将详细...
在C#编程环境中,图像相似度比较是一个常见的需求,特别是在图像处理、计算机视觉以及机器学习等领域。本示例代码“c#图像相似度比较demo”是利用灰度直方图方法来实现图像相似度评估的一个小项目。灰度直方图是一种...
在图像处理领域,计算图像之间的相似度是一项至关重要的任务,广泛应用于图像检索、图像分类、图像拼接等场景。本资料包重点介绍了三种在MATLAB环境中实现的图像相似度计算方法,分别是灰度分布计算方法、颜色分布...
在这个特定的程序中,"相似度大小图像匹配"旨在实现一种算法,它能够对四幅图像进行比较,选择其中一幅作为目标图像,并根据与其他三幅图像的相似度进行排序。这涉及到计算机视觉和机器学习的多个知识点。 首先,...
字符串相似度算法 字符串相似度算法是一种衡量两个字符串之间相似度的方法,广泛应用于自然语言处理、数据挖掘、机器学习等领域。在本文中,我们将讨论一种常用的字符串相似度算法:Levenshtein Distance。 什么是...
"AudioCompare 音频相似度比较"是这样一个工具,它能够对两个或多个音频文件进行比较,并计算出它们之间的相似度。这种技术的核心在于通过算法分析音频的特性,如频率分布、时间序列模式等,从而量化音频之间的相似...
在数据库管理领域,相似度分析是一项重要的任务,用于评估数据之间的相似程度,这对于数据清洗、数据匹配、推荐系统以及异常检测等应用场景具有关键价值。在本文中,我们将深入探讨Oracle和Mysql数据库如何进行...
例如,使用余弦相似度,可以将分词后的结果转化为向量,然后应用余弦公式计算两个句子的相似度。 总之,IKAnalyzer是一个强大的中文分词工具,结合合适的句子相似度计算方法,可以有效地处理中文文本分析任务。在...
Oracle字符相似度函数是Oracle数据库系统提供的一种功能,用于评估两个字符串之间的相似性。这个功能在数据清洗、信息检索、文本分析等领域具有广泛的应用。在SQL查询中,我们可以直接使用这些函数来比较不同字符串...
余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值, 来评估他们的相似度。 余弦相似度将向量根据坐标值,绘制到向量空间中,如常见的二维空间。 余弦相似度衡量的是2个向量间的夹角大小,通过夹角的...
文本相似度判断在信息处理、自然语言处理以及机器学习等领域有着广泛的应用,例如搜索引擎的搜索结果排序、抄袭检测、文本分类等。这个"易语言文本相似度判断模块"就是为实现这些功能而编写的代码。 在易语言中实现...
在IT领域,词汇相似度计算是一项重要的任务,尤其在自然语言处理(NLP)和信息检索(IR)中。此项目“基于知网的词汇相似度计算源代码”旨在利用知网的数据资源来实现高效的词汇相似度计算。知网是中国最大的学术...
### MySQL 计算字符串相似度 #### 背景与需求 在许多应用场景中,我们需要对两个字符串进行相似度比较,比如搜索引擎中的关键词匹配、文本分析中的近义词识别等。MySQL 提供了多种方法来实现字符串相似度的计算,...
在Python编程环境中,余弦相似度算法是一种常用于计算文本相似度的方法,尤其适用于文档向量化处理后的场景。本文将详细介绍如何使用Python实现余弦相似度,并探讨其背后的概念、步骤以及具体源码分析。 余弦相似度...
《MP3音频文件相似度比对软件解析及技术要点》 在数字音频处理领域,MP3音频文件的相似度比对是一项重要的技术应用。本文将深入探讨这一主题,并结合提供的软件资源,阐述其核心原理与关键技术。 MP3,全称MPEG ...