利用编辑距离计算文本相似性
来源:互联网 发布:中控科门禁软件下载 编辑:程序博客网 时间:2024/05/16 00:25
文本相似性
编辑距离
- 什么是编辑距离?
看下百度百科的介绍:编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。
比如说:
kitten->sitten (k→s)
sitten->sittin (e→i)
sittin->sitting (插入g)
找出字符串s1和字符串s2的编辑距离,就是求出字符串s1变成字符串s2的最小操作步骤,主要操作步骤有三种:交换、删除、插入。可以利用动态规划的思想来求解字符转 s1和字符串s2的编辑距离。
动态规划公式如下所示:
- 代码示例
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 }}
0 0
- 利用编辑距离计算文本相似性
- 利用sklearn计算文本相似性
- 利用余弦计算文本相似性
- 文本相识度算法(余弦相似性、简单共有词、编辑距离、SimHash、汉明距离、Jaccard相似性系数、欧几里得距离、曼哈顿距离 )
- 模式识别相似性测度距离计算---欧式距离
- 模式识别相似性测度距离计算---tanimoto距离
- 基于词的编辑距离文本相似度计算
- LSHForest进行文本相似性计算
- [算法]计算编辑距离
- 计算字符串编辑距离
- 计算编辑距离
- 计算最小编辑距离
- 文本相似度计算的几个距离公式(欧氏距离、余弦相似度、Jaccard距离、编辑距离)
- 模式识别相似性测度距离计算---马氏距离
- 模式识别相似性测度距离计算---几种距离对比
- 余弦相似性的文本计算思想
- 推荐系统-文本相似性计算(1)
- 推荐系统-文本相似性计算(2)
- 如何赚到100万?最有可能赚到100万的7个方法
- 几个JAVA集合中常用的接口学习:Collection、Iterator和Map
- Django实现的Web GUI的LTE频点和频率换算工具
- 用UpdateResource修改EXE文件图标的多源码(已修正) 注:转帖请包函作者信息.(作者:菜新)
- linux c读取tty和消息队列的使用demo
- 利用编辑距离计算文本相似性
- UC/OS II 学习笔记(一)
- python中的单链表操作
- 判断一个数是否为2的N次方问题
- 【Codeforces 652 D Nested Segments】+ 树状数组 + 离散化
- [工具代码]使JTextfield具有默认提示文字的功能
- 想看TCP/IP卷一
- Java实现多线程断点下载(下载过程中可以暂停)
- 浅淡安卓json的三种解析