我试图清理一个数据库,多年来它已经积累了许多重复记录,名称略有不同。例如,在公司表中,存在像"Some Company Limited"和"SOME COMPANY LTD!"这样的名称。
我的计划是将问题表导出到R中,将名称转换为小写,替换常见的同义词(如"limited"->"ltd"),去除非字母字符,然后使用agrep
来查看相似之处。
我的第一个问题是,agrep
只接受单个模式匹配,循环每个公司名称以匹配其他名称很慢。(需要清理的一些表可能有数万甚至数十万个名称要检查。)
我简要地看了看tm
包(JSS article),它似乎非常强大,但更适用于分析大块文本,而不仅仅是名称。
我有几个相关的问题:
tm
包是否适用于这种任务?是否有比
agrep
更快的替代方案?(该函数使用莱文斯坦编辑距离,据说很慢。)除了
agrep
和tm
之外,R中是否有其他合适的工具?我应该在R中做这件事,还是直接在数据库中处理?(它是一个Access数据库,所以如果可能的话,我想避免触及它。)