我有一张公司名称的表格。由于人为输入错误,有许多重复。如果应该包括细分,拼写错误等,有不同的看法。我希望所有这些重复标记为一个公司“1c”:
+------------------+
| company |
+------------------+
| 1c |
| 1c company |
| 1c game studios |
| 1c wireless |
| 1c-avalon |
| 1c-softclub |
| 1c: maddox games |
| 1c:inoco |
| 1cc games |
+------------------+
我认为Levenshtein distance是消除拼写错误的好方法。然而,当添加细分时,Levenshtein距离显着增加,并且不再是一个好的算法。它是否正确?
一般来说,我几乎没有任何计算语言学经验,所以我不知道应该选择哪种方法。
您会为此问题推荐哪些算法?我想在java中实现它。纯SQL也没关系。链接到来源将不胜感激。感谢。
答案 0 :(得分:2)
这是一个难题。可能对您有帮助的神奇搜索关键字是" 规范化" - 虽然有时它意味着非常不同的事情(例如,#34;数据库规范化"无关,例如),但您实际上是在尝试将输入规范化。
一个简单的解决方案是使用Levenshtein距离和令牌感知。 Python库Fuzzy Wuzzy做到了这一点,this blog post介绍了它如何与激励示例一起工作。基本的想法很简单,你应该能够用Java实现它,没有太大的困难。
在较高的层次上,我们的想法是将输入分成空格上的标记和标点符号,然后对标记进行排序并将它们视为一组,然后使用设置的交集大小 - 允许模糊匹配 - 作为度量标准。
一些相关链接: