概述
在日常应用中,文本比较是一个比较常见的问题。文本比较算法也是一个老生常谈的话题。
文本比较的核心就是比较两个给定的文本(可以是字节流等)之间的差异。目前,主流的比较文本之间的差异主要有两大类。一类是基于编辑距离(Edit Distance)的,例如LD算法。一类是基于最长公共子串的(Longest Common Subsequence),例如Needleman/Wunsch算法等。
LD算法(Levenshtein Distance)又成为编辑距离算法(Edit Distance)。他是以字符串A通过插入字符、删除字符、替换字符变成另一个字符串B,那么操作的过程的次数表示两个字符串的差异。
例如:字符串A:kitten如何变成字符串B:sitting。
第一步:kitten——》sitten。k替换成s
第二步:sitten——》sittin。e替换成i
第三步:sittin——》sitting。在末尾插入g
故kitten和sitting的编辑距离为3
楼主一开始遇到这个问题的时候也是思考良久,觉得利用R语言很难实现,但是R最大的优点就是包多,经过千辛万苦的谷歌翻墙搜索,让我找到了解决方法:
例题:设计一个算法,求下列所示专业名称中与“计算机科学与技术”最相似的名称:
1、计算机科学与应用,2、计算机科学技术,3、金融学计算机科学与应用,4、计算科学与技术
代码如下:
k1<-“计算机科学与技术”
k2<-‘计算机科学与应用’
k3<-‘计算机科学技术’
k4<-‘金融学计算机科学与应用’
k5<-‘计算科学与技术’
kn<-c(k2,k3,k4,k5)
agrep(k1,kn,max =1.1, value = TRUE,useBytes = T,costs = NULL)
[1] “计算机科学技术” “计算科学与技术”
其中参数max控制的是可以匹配的最大距离,useBytes控制的是按照字符比较还是Bytes比较。
下面贴出一个算法,返回一组数据中所有相似的字符串
km<-c(k1,k2,k3,k4,k5)
lapply(km, agrep, km, value = TRUE)
[1]
[1] “计算机科学与技术” “计算机科学技术” “计算科学与技术”
[2]
[1] “计算机科学与应用” “金融学计算机科学与应用”
[3]
[1] “计算机科学与技术” “计算机科学技术”
[4]
[1] “金融学计算机科学与应用”
[5]
[1] “计算机科学与技术” “计算科学与技术”
做完这个东西我不禁在想,好在找到一个函数巧妙的实现了这个问题,若没有实现,我该怎么办,楼主在搜索的过程中看到很多人用C语言或其他编程语言实现了这个问题,看来自己的编程技巧还要好好提高。明天继续加油
最后
以上就是温柔服饰为你收集整理的利用R语言如何进行文本比较算法——LD算法的全部内容,希望文章能够帮你解决利用R语言如何进行文本比较算法——LD算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复