如何从数据库中找到相似的名称?

时间:2011-01-20 12:03:47

标签: mysql sql

我有500k数据。

如何从数据库中找到相似的名称?

"Microsoft" -> Microsys,Microcode,Microsystems,Microgroup...etc

的示例

4 个答案:

答案 0 :(得分:1)

使用MySQL有一个命令“SOUNDS LIKE”,列出所有语音相似的条目。我确信所有其他数据库系统都有类似的东西。

答案 1 :(得分:1)

自提出问题以来已经有一段时间了,但我相信可以使用某种距离算法轻松解决原始问题。我建议Levenshtein distance

This article解释了如何在MySQL中实现levenshtein距离。

答案 2 :(得分:0)

您需要对类似名称进行分组或如何定义术语“类似”有一些逻辑。对于“相似”,不仅仅意味着匹配单词的前几个字符。例如: - 在这种情况下,“ Microsoft ”可以为您提供Microsys,Microcode等结果。但其他词语如软件,softtonic等也将被视为类似。

逻辑留给你,然后你可以相应地拆分原始字符串,然后使用 LIKE'%%'子句在表格中搜索。

答案 3 :(得分:0)

三种不同的方式,然后是真正的答案。

CREATE TABLE company_names (
    company_name VARCHAR(35) PRIMARY KEY
);

INSERT INTO company_names VALUES ('Microsoft');
INSERT INTO company_names VALUES ('Microcode');
INSERT INTO company_names VALUES ('TrendMicro');
INSERT INTO company_names VALUES ('Microphones, Inc.');
INSERT INTO company_names VALUES ('Softonic');
INSERT INTO company_names VALUES ('Soft Touch Cleaning');
INSERT INTO company_names VALUES ('Software Systems');
INSERT INTO company_names VALUES ('SoftTouch Movers');
  1. SELECT company_name FROM company_names ORDER BY SUBSTR(company_name,1,4);
  2. SELECT company_name FROM company_names WHERE company_name LIKE'Micro%';
  3. SELECT company_name FROM company_names WHERE company_name LIKE'%Micro%';
  4. 但如果您的目标是寻找类似的业务,我不会依赖他们名字中的相似之处。在美国,我可能会根据SIC代码或NAICS代码从infousa.com购买一个列表。您可以在NAICS Association网站上查看这些代码的工作原理。