利用编辑距离计算文本相似性
2016-12-22 00:02
253 查看
文本相似性
编辑距离
什么是编辑距离?看下百度百科的介绍:编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。
比如说:
kitten->sitten (k→s)
sitten->sittin (e→i)
sittin->sitting (插入g)
找出字符串s1和字符串s2的编辑距离,就是求出字符串s1变成字符串s2的最小操作步骤,主要操作步骤有三种:交换、删除、插入。可以利用动态规划的思想来求解字符转 s1和字符串s2的编辑距离。
动态规划公式如下所示:
distance[i][0]=i,if(i>=0,j==0) distance[0][j]=j,if(i==0,j>=0) distance[i][j]=min(distance[i−1][j],distance[i][j−1],distance[i−1][j−1]),if(s1[i]==s2[j]) distance[i][j]=min(distance[i−1][j],distance[i][j−1],distance[i−1][j−1]+1),if(s1[i]≠s2[j])
代码示例
package com.myapp.ml.nlp; import org.apache.commons.lang3.StringUtils; /** * Created by lionel on 16/12/21. */ public class EditDistance { public int editDistance(String A, String B) { if (StringUtils.isBlank(A + B)) { return 0; } int lengthA = A.length(); int lengthB = B.length(); int[][] distance = new int[lengthA + 1][lengthB + 1]; for (int i = 0; i < lengthA; i++) { distance[i][0] = i; } for (int i = 0; i < lengthB; i++) { distance[0][i] = i; } for (int i = 1; i < lengthA; i++) { for (int j = 1; j < lengthB; j++) { int cost = A.charAt(i - 1) == B.charAt(j - 1) ? 0 : 1; int deletion = distance[i - 1][j] + 1; int insertion = distance[i][j - 1] + 1; int exchange = distance[i - 1][j - 1] + cost; distance[i][j] = Math.min(exchange, Math.min(insertion, deletion)); } } return distance[lengthA - 1][lengthB - 1]; } public static void main(String[] args) { EditDistance editDistance = new EditDistance(); String str2 = "kitten"; String str1 = "sitting"; System.out.println(editDistance.editDistance(str1, str2));//3 } }
相关文章推荐
- Python文本相似性计算之编辑距离详解
- Python文本相似性计算之编辑距离详解
- 利用sklearn计算文本相似性
- 利用编辑距离(Edit Distance)计算两个字符串的相似度
- 【文本相似度】利用余弦相似性计算句子的相似度
- java文本相似度计算(Levenshtein Distance算法(中文翻译:编辑距离算法))----代码和详解
- 文本编辑距离的计算
- 文本相似度计算的几个距离公式(欧氏距离、余弦相似度、Jaccard距离、编辑距离)
- 利用编辑距离(Edit Distance)计算两个字符串的相似度
- 利用sklearn计算文本相似性
- 利用余弦计算文本相似性
- 文本编辑距离计算,简单清晰
- 利用最小编辑距离算法实现文本diff
- 基于词的编辑距离文本相似度计算
- 文本相似度计算之--- 编辑距离 && 最长公共子串
- 利用Levenshtein Distance (编辑距离)实现文档相似度计算
- java文本相似度计算(Levenshtein Distance算法(中文翻译:编辑距离算法))----代码和详解
- 利用python对中文文本数据进行LDA训练、计算概率距离
- 利用经纬度计算距离
- 计算字符串的相似度---编辑距离