我的用户将通过剪切和粘贴一个包含公司名称的大字符串来导入.
我有一个现有的,不断增长的公司名称MYSQL数据库,每个都有一个独特的company_id.
我希望能够解析字符串并为每个用户输入的公司名称分配模糊匹配.
现在,只是做一个直接的字符串匹配,也很慢.**Soundex索引会更快吗?如何在用户输入时为用户提供一些选项?**
例如,某人写道:
Microsoft -> Microsoft Bare Essentials -> Bare Escentuals Polycom, Inc. -> Polycom
我发现以下线程似乎与此问题类似,但海报尚未批准,我不确定他们的用例是否适用:
如何在大型字符串数据库中找到字符串的最佳模糊匹配
在Java中匹配不精确的公司名称
您可以从使用开始SOUNDEX()
,这可能会满足您的需求(我想象一下用户正在键入的已有替代品的自动建议框).
缺点SOUNDEX()
是:
它无法区分更长的字符串.仅考虑前几个字符,最后分叉的较长字符串生成相同的SOUNDEX值
第一个字母必须相同或者您不会轻易找到匹配的事实.SQL Server有DIFFERENCE()函数来告诉你两个SOUNDEX值有多大区别,但我认为MySQL没有内置的那种类型.
对于MySQL,至少根据文档,SOUNDEX因unicode输入而被破坏
例:
SELECT SOUNDEX('Microsoft') SELECT SOUNDEX('Microsift') SELECT SOUNDEX('Microsift Corporation') SELECT SOUNDEX('Microsift Subsidary') /* all of these return 'M262' */
对于更高级的需求,我认为您需要查看两个字符串的Levenshtein距离(也称为"编辑距离")并使用阈值.这是更复杂(=更慢)的解决方案,但它允许更大的灵活性.
主要缺点是,您需要两个字符串来计算它们之间的距离.使用SOUNDEX,您可以在表格中存储预先计算的SOUNDEX,并对其进行比较/排序/分组/过滤.使用Levenshtein距离,您可能会发现"Microsoft"和"Nzcrosoft"之间的区别仅为2,但需要花费更多时间才能得出结果.
在任何情况下,可以在codejanitor.com上找到MySQL的Levenshtein距离函数示例:Levenshtein距离作为MySQL存储函数(2007年2月10日).
SOUNDEX是一个很好的算法,但最近有关于这个主题的进展.创建了另一种称为Metaphone的算法,后来将其修改为Double Metaphone算法.我个人使用了双apphone的java apache commons实现,它是可定制和准确的.
他们也在维基百科页面上实现了许多其他语言的实现.这个问题已得到解答,但是如果您发现SOUNDEX中出现的任何问题都出现在您的应用程序中,那么很高兴知道有选项.有时它可以为两个非常不同的单词生成相同的代码.创建双metaphone是为了帮助解决这个问题.
从维基百科上偷来的:http://en.wikipedia.org/wiki/Soundex
作为对Soundex算法缺陷的回应,劳伦斯飞利浦为同样的目的开发了Metaphone算法.飞利浦后来对Metaphone进行了改进,他将其称为Double-Metaphone.Double-Metaphone包含比其前身更大的编码规则集,处理非拉丁字符的子集,并返回主编码和辅助编码,以说明英语中单个单词的不同发音.
在双metaphone页面的底部,他们有各种编程语言的实现:http://en.wikipedia.org/wiki/Double-Metaphone
Python和MySQL实现:https://github.com/AtomBoy/double-metaphone
首先,我想补充一点,在使用任何形式的语音/模糊匹配算法时都应该非常小心,因为这种逻辑正好是模糊的,或者说它更简单; 可能不准确.当用于匹配公司名称时尤其如此.
一个好的方法是从其他数据中寻求佐证,例如地址信息,邮政编码,电话号码,地理坐标等.这将有助于确认数据准确匹配的可能性.
有关B2B数据匹配的一系列问题太多,无法在这里解决,我在博客中写了更多关于公司名称匹配的内容,但总的来说,关键问题是:
查看整个字符串是无益的,因为公司名称中最重要的部分不一定在公司名称的开头.即"宝洁公司"或"美国联邦储备"
缩写在公司名称中很常见,例如HP,GM,GE,P&G,D&B等.
一些公司故意将其名称拼写错误,作为其品牌的一部分,并将自己与其他公司区分开来.
匹配确切的数据是很容易的,但匹配的非确切的数据可以更加耗费时间,我会建议你考虑你将如何确认非完全匹配,以确保这些都是可接受的质量.
在我们建立Match2Lists.com之前,我们过去花费了不健康的时间来验证模糊匹配.在Match2Lists中,我们采用了强大的可视化工具,使我们能够查看非完全匹配,这证明在匹配验证方面真正改变了游戏规则,降低了成本并使我们能够更快地交付结果.
祝你好运!