相关疑难解决方法(0)

查找近似重复记录的技术

我正在尝试清理一个数据库,这些数据库多年来获得了许多重复记录,名称略有不同.例如,在公司表中,有"Some Company Limited"和"SOME COMPANY LTD!"等名称.

我的计划是将违规表导出为R,将名称转换为小写,替换常见的同义词(如"limited" - >"ltd"),删除非字母字符然后agrep用来查看看起来相似的内容.

我的第一个问题是agrep只接受一个匹配的模式,并且循环每个公司名称以匹配其他公司名称的速度很慢.(有些待清理的表会有数十个,可能有数十万个要检查的名称.)

我已经非常简要地看了一下这个tm包(JSS文章),它看起来非常强大,但它主要用于分析大块文本,而不仅仅是名称.

我有一些相关的问题:

  1. tm包是否适合这类任务?

  2. 有更快的替代方案agrep吗?(所述函数使用Levenshtein编辑距离,传闻速度慢.)

  3. R中还有其他合适的工具,除了agreptm

  4. 我是否应该在R中执行此操作,还是应该直接在数据库中执行此类操作?(这是一个Access数据库,所以如果可能,我宁愿避免触摸它.)

duplicate-data r duplicate-removal fuzzy-comparison

46
推荐指数
3
解决办法
1万
查看次数

R中的快速Levenshtein距离?

是否有包含Levenshtein距离计数功能的包,它是作为C或Fortran代码实现的?我有很多的字符串进行比较,并stringMatchMiscPsycho对这个太慢了.

performance packages r levenshtein-distance stringdist

25
推荐指数
3
解决办法
1万
查看次数

agrep:只返回最佳匹配

我在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)

text r character string-matching agrep

23
推荐指数
2
解决办法
2万
查看次数

在R中,如何用另一个字符串替换包含某个模式的字符串?

我正在开展一项涉及清理大学专业数据清单的项目.我发现有很多拼写错误,所以我希望用这个函数gsub()用正确的拼写替换拼错拼写的函数.例如,假设'biolgy'在名为Major的专业列表中拼写错误.如何让R检测拼写错误并用正确的拼写替换它?我试过gsub('biol', 'Biology', Major)但只能替换'biolgy'中的前四个字母.如果我这样做gsub('biolgy', 'Biology', Major),它仅适用于那种情况,但这并不能检测出"生物学"的其他形式的拼写错误.

谢谢!

string expression r gsub

11
推荐指数
1
解决办法
2万
查看次数

Python中字符串的相似性度量

我想测量两个词之间的相似度。想法是使用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%的匹配项)。

我还有其他可以使用的好方法吗?或者您有什么想法可以改善我的功能?

python similarity measure

3
推荐指数
1
解决办法
389
查看次数