依靠字符串匹配算法清理和规范化大量数据的最佳方法

Sha*_*gan 4 algorithm machine-learning string-matching data-cleaning

我目前正在开展数据建模项目,作为我大学夏季项目的一部分.客户数据需要大量清理,因为许多列依赖于人工输入并具有自由文本.

举一个例子,商业名称列有同一公司的多个条目.对于"Hugo Boss",这包括"Hugo Bos","Huggo Boss","Hugo Boss Ltd".

我可能会遍历每一行并识别所有已使用的值并为每个条目创建一个映射,但考虑到我处理的是100万条记录,这非常耗时且不太理想.

人们知道这种/类似实现的源代码吗?我研究了匹配算法,但是它们依赖于预先计算的模式.我可以使用哪些其他匹配算法或机器学习技术来开发一个自动化过程来清理数据,即将所有不同的名称匹配到一个名称.

任何帮助,将不胜感激.

Tho*_*lut 5

该研究领域称为"数据匹配"或"记录链接".

Peter Christen有一本非常好的技巧调查书.他还深入研究了机器学习模型以及如何从简单的字符串距离等基本方法中改进它们(正如其他已经提出的答案).

为了让您先行一步,您可以尝试计算标题的字符数n-gram.

对于n = 3和Hugo Boss,你会得到

[hug, ugo, go , o b,  bo, bos, oss]
Run Code Online (Sandbox Code Playgroud)

现在,您可以计算这两组ngram之间的jaccard相似度.

这里,例如之间Hugo BossHuggo Boss:

[hug, ugo, go , o b,  bo, bos, oss]
[hug, ugg, ggo, go , o b,  bo, bos, oss]
jaccard similarity: 0.6666666666666666
Run Code Online (Sandbox Code Playgroud)

如果您不想自己实现所有这些功能,请使用Lucene.它也非常快,可以很好地扩展到数十亿个文档.


ser*_*iyb 0

另一种选择是查看 Levenshtein 距离https://en.wikipedia.org/wiki/Levenshtein_distance

这将对您处理Hugo BossHuggo Boss等情况有所帮助,但不适用于Hugo BossHugo Boss