gpt4 book ai didi

mysql - 如何使用 PHP 对 MYSQL 中的公司名称进行模糊匹配以实现自动完成?

转载 作者:IT老高 更新时间:2023-10-28 12:57:36 25 4
gpt4 key购买 nike

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

我有一个现有且不断增长的 MYSQL 公司名称数据库,每个数据库都有一个唯一的 company_id。

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

现在,直接进行字符串匹配也很慢。 ** Soundex 索引会更快吗?如何在用户输入时为他们提供一些选项? **

例如,有人写道:

Microsoft       -> MicrosoftBare Essentials -> Bare EscentualsPolycom, Inc.   -> Polycom

我发现了以下与此问题相似的主题,但发布者尚未批准,我不确定它们的用例是否适用:

How to find best fuzzy match for a string in a large string database

Matching inexact company names in Java

最佳答案

您可以从使用 SOUNDEX() 开始,这可能会满足您的需要(我想象了一个自动建议框,其中包含用户正在输入的现有替代方案)。

SOUNDEX()的缺点是:

  • 它无法区分较长的字符串。只考虑前几个字符,最后发散的较长字符串会生成相同的 SOUNDEX 值
  • 第一个字母必须相同,否则您将无法轻松找到匹配项。 SQL Server 有 DIFFERENCE() 函数来告诉你两个 SOUNDEX 值相差多少,但我认为 MySQL 没有内置这种类型。
  • 对于 MySQL,至少根据 the docs , SOUNDEX 无法输入 unicode

例子:

SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')

/* all of these return 'M262' */

对于更高级的需求,我认为您需要查看 Levenshtein distance (也称为“编辑距离”)两个字符串并使用阈值。这是更复杂(=更慢)的解决方案,但它允许更大的灵 active 。

主要缺点是,您需要两个字符串来计算它们之间的距离。使用 SOUNDEX,您可以将预先计算的 SOUNDEX 存储在您的表中,并对其进行比较/排序/分组/过滤。使用 Levenshtein 距离,您可能会发现“Microsoft”和“Nzcrosoft”之间的差异只有 2,但要得出这个结果还需要更多时间。

无论如何,可以在 codejanitor.com: Levenshtein Distance as a MySQL Stored Function (Feb. 10th, 2007) 找到 MySQL 的 Levenshtein 距离函数示例。 .

关于mysql - 如何使用 PHP 对 MYSQL 中的公司名称进行模糊匹配以实现自动完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/369755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com