我的项目正在导入一个相当大的集合+来自平面Excel文件的500K行数据,这些数据由一组人员手动创建。现在的问题是,所有这些都需要规范化,以便客户端搜索。例如,公司字段将包含多个公司拼写并包含分支,例如“IBM”和“IBM Inc.”另外,我的产品名称是字母数字,例如“A46-Rhizonme Pentahol”, SOUNDEX单独无法处理。
通过使用 AJAX自动建议将所有数据输入通过网络表单,我可以长期解决问题。然而,在那之前,我仍然需要处理大量现有数据。根据我在这里读到的内容,这让我想到了一个我认为是一个好的过程:
http://msdn.microsoft.com/en-us/magazine/cc163731.aspx
创建自定义模糊逻辑查找和模糊逻辑分组的步骤
我一直在谷歌搜索,搜索StackOverflow,阅读有关此问题的MySQL.com讨论等,试图找到预建的解决方案。有什么想法吗?
答案 0 :(得分:4)
所以,我放弃了,只为mysql做了一个字符串标记功能。这是代码:
CREATE DEFINER = `root`@`localhost` FUNCTION `NewProc`(in_string VARCHAR(255), delims VARCHAR(255), str_replace VARCHAR(255))
RETURNS varchar(255)
DETERMINISTIC
BEGIN
DECLARE str_len, delim_len, a, b, is_delim INT;
DECLARE z, y VARBINARY(1);
DECLARE str_out VARBINARY(256);
SET str_len = CHAR_LENGTH(in_string), delim_len = CHAR_LENGTH(delims),a = 1, b = 1, is_delim = 0, str_out = '';
-- get each CHARACTER
WHILE a <= str_len DO
SET z = SUBSTRING(in_string, a, 1);
-- loop through the deliminators
WHILE b <= delim_len AND is_delim < 1 DO
SET y = SUBSTRING(delims, b, 1);
-- search for each deliminator
IF z = y THEN
SET is_delim = 1;
END IF;
SET b = b + 1;
END WHILE;
IF is_delim = 1 THEN
SET str_out = CONCAT(str_out, str_replace);
ELSE
SET str_out = CONCAT(str_out, z);
END IF;
SET b = 0;
SET is_delim = 0;
SET a = a + 1;
END WHILE;
RETURN str_out;
END;
它被称为:
strtok(“this.is.my.input.string”,“。,:;”,“|”)
并将返回
“this | is | my | input | string”
我希望其他人觉得这很有用。干杯!
答案 1 :(得分:2)
您应该查看Google Refine。
Google Refine是一款处理凌乱数据并清理数据的强大工具 up,将它从一种格式转换为另一种格式,并将其扩展 Web服务,并将其链接到Freebase等数据库。