相关疑难解决方法(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万
查看次数

Levenshtein:MySQL + PHP

$word = strtolower($_GET['term']); 

$lev = 0;

$q = mysql_query("SELECT `term` FROM `words`"); 
while($r = mysql_fetch_assoc($q)) 
{ 
    $r['term'] = strtolower($r['term']); 

    $lev = levenshtein($word, $r['term']);

    if($lev >= 0 && $lev < 5)
    {
        $word = $r['term'];
    }
}
Run Code Online (Sandbox Code Playgroud)

如何将所有内容移动到一个查询中?不希望查询所有术语并在PHP中进行过滤.

php mysql levenshtein-distance

31
推荐指数
4
解决办法
3万
查看次数