我有一份大约10万个名称的列表。这些名称包括个人姓名、公司名称等,名称可能是完全匹配的,也可能在某些方面有所不同。我也有一些地址,但这些地址可能是错误的或者不存在。我需要收集并统计每个名称以进行分析。以下是一个示例集,
Bank America, N.ABOABank f AmercaAmerica BankWells Fargo BankWells FargoWells Fargo, N.AFargo Bank
对于Bank of America
,计数将是三,因为America Bank
是不同的。对于Wells Fargo
,计数也将是三,因为Fargo Bank
是不同的。
编辑:
除了使用机器学习之外,另一种选择是使用模糊匹配。我已经查看了difflib和fuzzywuzzy库,但问题是我没有参考列表;逻辑本身需要找出参考(这就是我认为机器学习是答案的原因)。
因此,作为练习,这里是第二个数据示例,
John Smith - 首次发现,因此标记为ID 1Chase Bank - 首次发现,标记为ID 2John J. Smith - 与John Smith相似,因此标记为ID 1BOA - 首次发现,标记为ID 3Bank of America - 与BOA不相似,因此标记为ID 4(技术上这是BOA,但系统起初不会知道)BOA, N.A. - 与BOA相似,因此标记为ID 3
现在让我们看看BOA
和Bank of America
。程序如何知道它们是相同的?它不会知道,所以我需要返回并指出BOA
和Bank of America
是相同的。如果我们选择机器学习的路线,我可以创建一个新字段,手动指出BOA
和Bank of America
是相同的,然后重新尝试这个过程以获得更好的结果。但假设我们想走简单路线,不这样做,有没有Python库可以帮助我?
我更需要一个好的起点而不是实际的代码。
回答:
我仍然想尝试使用机器学习,但我已经创建了一个Python解决方案,我将使用FuzzyWuzzy来实现。
我将基于对数据库的循环生成一个动态参考列表。因此,在第一次循环中,我将为该文本创建一个唯一ID。这将被存储在一个表中。在第二次循环中,我将查看新表中的记录并尝试匹配,如果有匹配,该ID将被分配给下一条记录。如果没有找到匹配的文本,该文本将被添加到新表中并分配一个新的唯一ID…依此类推。这种方法避免了机器学习,并且对于当前的需求集来说可能已经足够好了。
编辑:我正在添加一个额外的表,因此表格将如下所示
表1 = 未处理的源数据表表2 = 唯一名称表表3 = 唯一名称的所有派生
我还将获取一个最常见名称的唯一列表,并将其添加到表2和表3中。这将只是一个起点。