`
dengqsintyt
  • 浏览: 291298 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论
阅读更多

一、概念

编辑距离:编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

如:将sailn一字转成failing:

sailn--->failn:   (s->f)插入,删除

sailn--->failin:  (+i)  插入

sailn--->failing: (+g)  插入

        则:sailn与failing的最少编辑距离就是3

问题:找出字符串的编辑距离,即把一个字符串s1最少经过多少步操作变成编程字符串s2,操作有三种,添加一个字符,删除一个字符,修改一个字符

 

二、思想

函数edit(i, j),它表示第一个字符串的长度为i的子串到第二个字符串的长度为j的子串的编辑距离。

简单描述动态规划公式:

if i == 0 且 j == 0,edit(i, j) = 0

if i == 0 且 j > 0,edit(i, j) = j

if i > 0 且j == 0,edit(i, j) = i

if i ≥ 1  且 j ≥ 1 ,edit(i, j) == min{ edit(i-1, j) + 1, edit(i, j-1) + 1, edit(i-1, j-1) + f(i, j) },当第一个字符串的第i个字符不等于第二个字符串的第j个字符时,f(i, j) = 1;否则,f(i, j) = 0。

        计算出两个文本的最少编辑距离之后,如果这个数字越小,那么说明这两篇文章越相似,但是很明显,通过这种方法计算的时间复杂度为,而且需要两两进行计算,所以只适合处理小数据的文本

三、实现

int min(int a, int b)
{
	return a < b ? a : b;
}

int edit(string str1, string str2)
{
	int max1 = str1.size();
	int max2 = str2.size();

	int **ptr = new int*[max1 + 1];
	for(int i = 0; i < max1 + 1 ;i++)
	{
		ptr[i] = new int[max2 + 1];
	}

	for(int i = 0 ;i < max1 + 1 ;i++)
	{
		ptr[i][0] = i;
	}

	for(int i = 0 ;i < max2 + 1;i++)
	{
		ptr[0][i] = i;
	}

	for(int i = 1 ;i < max1 + 1 ;i++)
	{
		for(int j = 1 ;j< max2 + 1; j++)
		{
			int d;
			int temp = min(ptr[i-1][j] + 1, ptr[i][j-1] + 1);
			if(str1[i-1] == str2[j-1])
			{
				d = 0 ;
			}
			else
			{
				d = 1 ;
			}
			ptr[i][j] = min(temp, ptr[i-1][j-1] + d);
		}
	}

	cout << "**************************" << endl;
	for(int i = 0 ;i < max1 + 1 ;i++)
	{
		for(int j = 0; j< max2 + 1; j++)
		{
			cout << ptr[i][j] << " " ;
		}
		cout << endl;
	}
	cout << "**************************" << endl;
	int dis = ptr[max1][max2];

	for(int i = 0; i < max1 + 1; i++)
	{
		delete[] ptr[i];
		ptr[i] = NULL;
	}

	delete[] ptr;
	ptr = NULL;

	return dis;
}

 

 

 

分享到:
评论

相关推荐

    django项目实战之文本相似度计算系统(源码+说明+演示视频).zip

    1.提供基于余弦相似度、编辑距离和Jaccard相似度等算法的文本相似度计算功能; 2.完成文本预处理功能,其中包括去除停用词、分词和词性标注等; 3.提供文本相似度计算结果的可视化功能,可以直观地展示两个文本之间...

    【基于Python+Django的毕业设计】文本相似度计算系统(源码+录像演示+说明).zip

    1.提供基于余弦相似度、编辑距离和Jaccard相似度等算法的文本相似度计算功能; 2.完成文本预处理功能,其中包括去除停用词、分词和词性标注等; 3.提供文本相似度计算结果的可视化功能,可以直观地展示两个文本之间...

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

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

    文本相似度计算数据文本相似度计算数据

    在文本相似度计算中,常见的方法有余弦相似度、Jaccard相似度、编辑距离(Levenshtein Distance)、Jaccard相似系数等。而随着深度学习的发展,基于神经网络的方法,如Siamese网络、BERT、RoBERTa等,已成为主流。...

    Python-对四种句子文本相似度计算方法进行实验与比较

    Python的`python-Levenshtein`库提供了计算编辑距离的函数。 最后,Word2Vec是一种深度学习模型,由Google提出,它能够学习到词的分布式表示,从而捕捉词汇的语义信息。在这种方法中,每个词被表示为一个向量,文本...

    基于Java实现的文本相似度计算工具包,可用于文本相似度计算、情感分析等任务,开箱即用

    由一系列算法组成的Java版相似度计算工具包,目标是传播自然语言处理中相似度计算方法。similarity具备工具实用、性能高效、架构清晰、语料时新、可自定义的特点。 提供下列功能: 词语相似度计算 词林编码法相似度...

    (基于python的毕业设计)文本相似度计算系统(源码+说明+演示视频).zip

    1.提供基于余弦相似度、编辑距离和Jaccard相似度等算法的文本相似度计算功能; 2.完成文本预处理功能,其中包括去除停用词、分词和词性标注等; 3.提供文本相似度计算结果的可视化功能,可以直观地展示两个文本之间...

    文本相似度

    在学术界、新闻媒体、搜索引擎优化(SEO)以及版权保护等多个领域,文本相似度计算都有广泛的应用。例如,通过计算文本相似度,可以检测论文是否存在抄袭现象,或者在信息检索系统中帮助用户找到最相关的搜索结果。 ...

    基于Python的文本相似度计算系统.zip

    (1)提供基于余弦相似度、编辑距离和Jaccard相似度等算法的文本相似度计算功能; (2)完成文本预处理功能,其中包括去除停用词、分词和词性标注等; (3)提供文本相似度计算结果的可视化功能,可以直观地展示两个...

    文本相似度计算方法研究综述1

    文本相似度计算是信息处理和自然语言处理领域中的关键技术,其目的是通过量化比较两段文本之间的相似程度,来实现信息检索、问答系统、文档分类、抄袭检测等多种应用场景。本文主要探讨了文本相似度计算的不同方法,...

    python项目文本相似度计算系统.zip

    该项目是一个使用Python语言开发的文本相似度计算系统。 1. **系统设计**:项目的主要目的是通过比较文本之间的相似性,帮助用户快速找到相关或重复的文本内容。 2. **技术实现**: - 利用了Python编程语言进行...

    java实现 文本相似度

    Java作为一种通用且强大的编程语言,提供了丰富的库和工具来实现文本相似度计算。以下我们将深入探讨如何在Java中实现文本相似度。 首先,文本相似度的计算通常基于特定的算法,例如余弦相似度、Jaccard相似度、...

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

    文本相似度计算是衡量两个文本在语义上的接近程度,它可以帮助我们找出重复或相似的内容,例如在搜索引擎中判断用户查询与网页内容的相关性。易语言中的实现通常会基于字符串处理和统计学方法,例如余弦相似度、...

    文本相似度计算

    在压缩包中的"similarity"文件,可能是包含示例代码、数据集或教程,用于展示如何利用Levenshtein距离或其他方法进行文本相似度计算。通过学习这些资源,我们可以深入理解如何将这些理论知识应用于实际项目,解决如...

    基于python的文本相似度计算系统源码数据库.docx

    **基于 Python 的文本相似度计算系统** 随着人工智能的迅速崛起,自然语言处理(NLP)技术已经成为科研和工业界关注的焦点。OpenAI 推出的 ChatGPT 更是为这个领域带来了革命性的突破,使得文本处理和理解的能力...

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

    4. **动态规划**:在计算编辑距离时,通常需要用到动态规划算法,它可以找到使两个字符串转换成彼此所需的最小操作数。这种算法在处理文本相似度时能提供有效解决方案。 5. **性能优化**:对于大量文本的处理,性能...

    易语言快速计算文本相似度源码.rar

    常见的文本相似度计算方法有Jaccard相似度、余弦相似度、Levenshtein距离、编辑距离等。Jaccard相似度是通过比较两个文本的交集和并集大小来计算的;余弦相似度则是通过计算两个文本向量在多维空间中的夹角余弦值;...

    易语言源码易语言快速计算文本相似度源码.rar

    在易语言中,可以实现动态规划算法来计算编辑距离。 7. **源码实现**:压缩包中的源码提供了具体的实现细节,包括上述各步骤的代码逻辑。通过阅读和学习这段源码,可以加深对文本相似度计算的理解,并且可以作为...

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

    1. **字符串匹配**:这是基础的文本相似度计算方法,包括精确匹配(如字符串等于或不等于)和部分匹配(如前缀、后缀、子串匹配)。 2. **编辑距离**(Levenshtein Distance):衡量两个字符串通过插入、删除或替换...

Global site tag (gtag.js) - Google Analytics