我有一个包含大学名称列的数据库。这些值是通过自由格式的用户文本输入收集的。因此,实际上有很多重复值,但它们并不完全相同。
例如:
Washington St. University
Washington State University
Washington State University
WASHINGTON STATE UNIVERSITY
Washington State
WSU
我应该如何从此列表中删除重复项?我考虑使用像levenshtein
和similar_text
这样的PHP函数,并调整匹配排除的阈值。但是我想知道在挖掘兔子洞之前是否有更好的方法。
我正在寻找能够解决问题的概念策略或算法的答案。我对任何编程语言或伪代码感到满意。
答案 0 :(得分:1)
3种方式......您的风格和数据将是决定哪条路线的关键。
1 - 翻译表。创建一个包含2列的表,输入第一列。使用所有misc术语的不同列表填充值。手动浏览(在电子表格中更容易)这些输入中的每一个并填充“显示”名称。 Gordon的评论就是这样......我曾经使用一家临时公司雇用15个人一周来对这样的搜索术语进行一次分类,如果您的输入列表很大,那么这可能是很好的练习。
2 - Levenshtein距离。这不是最漂亮但适用于大多数人(80/20规则)https://blog.pythian.com/implementing-fuzzy-search-in-sql-server-part-2-levenshtein-distance/这里有很多配置,而且不是很简单(IE,华盛顿州的6种变体中的哪一种应该将它们分组一切都是?)。根据我过去的经验,我将表格加入到表格中......使用了table1.input和table2.input之间的Levenshtein距离以及一个计数来找出哪个术语最匹配。这是一个巨大的兔子洞,如果这是你要去的路线,那就准备好了......无论如何都要有良好的学习经验。
你可以在某种程度上结合选项1和2 ...按照第一步创建带有输入的表,使用脚本填充使用levenshtien的'display'列,然后手动浏览数据并更正为需要的。