当前位置:  开发笔记 > 编程语言 > 正文

如何将MYSQL中的公司名称与PHP进行模糊匹配以实现自动完成?

如何解决《如何将MYSQL中的公司名称与PHP进行模糊匹配以实现自动完成?》经验,为你挑选了3个好方法。

我的用户将通过剪切和粘贴一个包含公司名称的大字符串来导入.

我有一个现有的,不断增长的公司名称MYSQL数据库,每个都有一个独特的company_id.

我希望能够解析字符串并为每个用户输入的公司名称分配模糊匹配.

现在,只是做一个直接的字符串匹配,也很慢.**Soundex索引会更快吗?如何在用户输入时为用户提供一些选项?**

例如,某人写道:

Microsoft       -> Microsoft
Bare Essentials -> Bare Escentuals
Polycom, Inc.   -> Polycom

我发现以下线程似乎与此问题类似,但海报尚未批准,我不确定他们的用例是否适用:

如何在大型字符串数据库中找到字符串的最佳模糊匹配

在Java中匹配不精确的公司名称



1> Tomalak..:

您可以从使用开始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日).



2> 小智..:

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



3> 小智..:

首先,我想补充一点,在使用任何形式的语音/模糊匹配算法时都应该非常小心,因为这种逻辑正好是模糊的,或者说它更简单; 可能不准确.当用于匹配公司名称时尤其如此.

一个好的方法是从其他数据中寻求佐证,例如地址信息,邮政编码,电话号码,地理坐标等.这将有助于确认数据准确匹配的可能性.

有关B2B数据匹配的一系列问题太多,无法在这里解决,我在博客中写了更多关于公司名称匹配的内容,但总的来说,关键问题是:

查看整个字符串是无益的,因为公司名称中最重要的部分不一定在公司名称的开头.即"宝洁公司"或"美国联邦储备"

缩写在公司名称中很常见,例如HP,GM,GE,P&G,D&B等.

一些公司故意将其名称拼写错误,作为其品牌的一部分,并将自己与其他公司区分开来.

匹配确切的数据是很容易的,但匹配的非确切的数据可以更加耗费时间,我会建议你考虑你将如何确认非完全匹配,以确保这些都是可接受的质量.

在我们建立Match2Lists.com之前,我们过去花费了不健康的时间来验证模糊匹配.在Match2Lists中,我们采用了强大的可视化工具,使我们能够查看非完全匹配,这证明在匹配验证方面真正改变了游戏规则,降低了成本并使我们能够更快地交付结果.

祝你好运!

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有