我正在尝试清理一个数据库,这些数据库多年来获得了许多重复记录,名称略有不同.例如,在公司表中,有"Some Company Limited"和"SOME COMPANY LTD!"等名称.
我的计划是将违规表导出为R,将名称转换为小写,替换常见的同义词(如"limited" - >"ltd"),删除非字母字符然后agrep用来查看看起来相似的内容.
我的第一个问题是agrep只接受一个匹配的模式,并且循环每个公司名称以匹配其他公司名称的速度很慢.(有些待清理的表会有数十个,可能有数十万个要检查的名称.)
我已经非常简要地看了一下这个tm包(JSS文章),它看起来非常强大,但它主要用于分析大块文本,而不仅仅是名称.
我有一些相关的问题:
tm包是否适合这类任务?
有更快的替代方案agrep吗?(所述函数使用Levenshtein编辑距离,传闻速度慢.)
R中还有其他合适的工具,除了agrep和tm?
我是否应该在R中执行此操作,还是应该直接在数据库中执行此类操作?(这是一个Access数据库,所以如果可能,我宁愿避免触摸它.)
是否有包含Levenshtein距离计数功能的包,它是作为C或Fortran代码实现的?我有很多的字符串进行比较,并stringMatch从MiscPsycho对这个太慢了.
我在R中使用'agrep'函数,它返回一个匹配向量.我想要一个类似于agrep的函数,它只返回最佳匹配,或者如果有关系则返回最佳匹配.目前,我正在使用包'cba'中的'sdist()'函数对结果向量的每个元素执行此操作,但这似乎非常多余.
/ edit:这是我目前正在使用的功能.我想加快速度,因为计算距离两次似乎是多余的.
library(cba)
word <- 'test'
words <- c('Teest','teeeest','New York City','yeast','text','Test')
ClosestMatch <- function(string,StringVector) {
matches <- agrep(string,StringVector,value=TRUE)
distance <- sdists(string,matches,method = "ow",weight = c(1, 0, 2))
matches <- data.frame(matches,as.numeric(distance))
matches <- subset(matches,distance==min(distance))
as.character(matches$matches)
}
ClosestMatch(word,words)
Run Code Online (Sandbox Code Playgroud) 我正在开展一项涉及清理大学专业数据清单的项目.我发现有很多拼写错误,所以我希望用这个函数gsub()用正确的拼写替换拼错拼写的函数.例如,假设'biolgy'在名为Major的专业列表中拼写错误.如何让R检测拼写错误并用正确的拼写替换它?我试过gsub('biol', 'Biology', Major)但只能替换'biolgy'中的前四个字母.如果我这样做gsub('biolgy', 'Biology', Major),它仅适用于那种情况,但这并不能检测出"生物学"的其他形式的拼写错误.
谢谢!
我想测量两个词之间的相似度。想法是使用OCR读取文本并检查关键字的结果。我要寻找的功能应该比较两个单词并以%返回相似度。因此,将单词与自身进行比较应该是100%相似的。我自己编写了一个函数,然后逐个字符比较char,然后返回与长度成比例的匹配数。但是问题是
wordComp('h0t',hot')
0.66
wordComp('tackoverflow','stackoverflow')
0
Run Code Online (Sandbox Code Playgroud)
但是直观的两个示例都应该具有很高的相似度> 90%。加Levenstein距离
import nltk
nltk.edit_distance('word1','word2')
Run Code Online (Sandbox Code Playgroud)
在我的函数中会将第二个结果提高到92%,但第一个结果仍然不好。
我已经找到了针对“ R”的解决方案,可以将此功能与另一种方法结合rpy2使用或agrepy用作另一种方法。但是我想通过更改接受基准来使程序变得越来越敏感(仅接受相似度> x%的匹配项)。
我还有其他可以使用的好方法吗?或者您有什么想法可以改善我的功能?
r ×4
agrep ×1
character ×1
expression ×1
gsub ×1
measure ×1
packages ×1
performance ×1
python ×1
similarity ×1
string ×1
stringdist ×1
text ×1