我有一个包含约 3000 万家公司的 SQL(MS SQL Server)数据库。例如:
+-----------------------+----------------+-----------+
| company_name | country | ID_number |
+-----------------------+----------------+-----------+
| Mercedes Benz Limited | Germany | 12345 |
| Apple Corporation | United States | 67899 |
| Aunt Mary Butcher | United Kingdom | 56789 |
+-----------------------+----------------+-----------+
然后,我有另一个公司列表,我想根据大致的公司名称匹配来分配 ID_number。
+--------------------+----------------+
| company | country |
+--------------------+----------------+
| Mercedes Benz Ltd. | Germany |
| Apple Corp. | United States |
| Butcher Aunt Mary | United Kingdom |
| Volkswagen Gmbh | Germany |
+--------------------+----------------+
我的目标显然是限制我必须进行的比较次数。所以我通过以下方式处理它:
- 规范化名称 - 删除 Ltd. Corp. 等。
- 按国家过滤
- 按名称长度过滤(我假设长度非常不同的字符串不能非常相似)
- 按前 n 个字母过滤
- 计算与 Levenshtein 或 Jaccard 对所有过滤公司的相似度
- 选择最佳匹配
因此,对于Mercedes Benz
我来说,我只会选择以 ME 开头且长度为Mercedes Benz
+-7 个字母的德国公司。但是,Aunt Mary Butcher
这不起作用,因为Butcher Aunt Mary
它不是以 AU 开头的。
除了这种非常幼稚的方法之外,它也非常缓慢。我可以在上面放置更多硬件,但我认为该方法本身并不有效。你通常如何解决这样的问题?