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

在日常应用中,文本比较是一个比较常见的问题。文本比较算法也是一个老生常谈的话题。
文本比较的核心就是比较两个给定的文本(可以是字节流等)之间的差异。目前,主流的比较文本之间的差异主要有两大类。一类是基于编辑距离(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语言或其他编程语言实现了这个问题,看来自己的编程技巧还要好好提高。明天继续加油

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值