文本相似度——编辑距离算法&java简单实现
来源:互联网 发布:手机基站测试软件 编辑:程序博客网 时间:2024/05/16 17:50
从问题出发,来学算法~
问题:找出字符串的编辑距离,即把一个字符串s1最少经过多少步操作变成字符串s2?
操作有三种,添加一个字符,删除一个字符,修改一个字符。
分析:核心就是Function——edit(i,j),它表示字符串s1的长度为i的子串到字符串s2的长度为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) },当s1的第i 个字符不等于s2的第j个字符时,f(i, j) = 1;否则,f(i, j) = 0。
public class LevenshteinTest {private int[][] array;private String str1;private String str2;public LevenshteinTest(String str1,String str2){this.str1 = str1;this.str2 = str2;} public int edit(){int max1 = str1.length();int max2 = str2.length();//建立数组,比字符长度大一个空间 array = new int[max2+1][max1+1]; for(int i=0;i<=max1;i++){array[0][i] = i;}for(int j=0;j<=max2;j++){array[j][0] = j;}for(int i=1;i<=max1;i++){for(int j=1;j<=max2;j++){array[j][i] = levenshtein(i,j,str1.charAt(i-1),str2.charAt(j-1));System.out.println("j=="+j+" i=="+i+" "+array[j][i]);}}System.out.println("*********"+array[max2][max1]);return array[max2][max1]; }public int levenshtein(int i,int j,char si,char sj){int result = 0; if(i>=1&&j>=1){ int a = array[j-1][i] + 1;int b = array[j][i-1] + 1; int c = array[j-1][i-1] + ((si!=sj)?1:0); result = min(a,b,c);}return result;}public int min(int a,int b,int c){int temp = a<b?a:b;return temp<c?temp:c;} //计算相似度 public float similarity(){ float similarity = 1 - (float) array[max2][max1] / Math.max(str1.length(), str2.length()); return similarity; }public static void main(String args[]){String str1 = "叶尖压力高";String str2 = "系统压力高";LevenshteinTest lt = new LevenshteinTest(str1,str2); lt.edit(); }}
0 0
- 文本相似度——编辑距离算法&java简单实现
- 文本相似度 -- 最小编辑距离算法
- java实现编辑距离算法,计算字符串相似度
- 相似度的算法(编辑距离法)(Java实现代码)
- java文本相似度计算(Levenshtein Distance算法(中文翻译:编辑距离算法))----代码和详解
- java文本相似度计算(Levenshtein Distance算法(中文翻译:编辑距离算法))----代码和详解
- java两字符串相似度计算算法——Levenshtein distance编辑距离算法
- 相似度算法(一)------编辑距离
- 相似度算法(编辑距离原理)
- 计算两个中文字符串相似度——编辑距离算法
- 计算两个中文字符串相似度——编辑距离算法
- 基于词的编辑距离文本相似度计算
- 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 文本相似度计算的几个距离公式(欧氏距离、余弦相似度、Jaccard距离、编辑距离)
- LCS算法实现简单中文文本相似度分析
- 字符串相似度算法 levenshtein distance 编辑距离算法
- 字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 字符串相似度算法 levenshtein distance 编辑距离算法
- 针对一些异常处理方法
- hadoop
- 一段神奇的js代码
- C# yield return 的作用
- 用nohup执行python程序时,print无法输出
- 文本相似度——编辑距离算法&java简单实现
- unity3d 从0开始学
- Android编译之MAKE
- 浏览器发送URL的编码特性
- 带指针参数的函数指针数组
- UI显示Bitmap整合前两章内容
- 设计模式之简单模式与策略模式
- ActiveMQ的消息重试机制
- 广义线性模型之logistic regression(二)