您的位置:首页 > 其它

利用R语言如何进行文本比较算法——LD算法

2015-05-03 01:01 531 查看
在日常应用中,文本比较是一个比较常见的问题。文本比较算法也是一个老生常谈的话题。

文本比较的核心就是比较两个给定的文本(可以是字节流等)之间的差异。目前,主流的比较文本之间的差异主要有两大类。一类是基于编辑距离(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语言