如何在MySQL中标记字符串?
我的项目正在从平面Excel文件导入一个相当大的集合+500K行数据,这些文件是由一组人员手动创建的。现在的问题是,对于客户端搜索,所有这些都需要规范化。例如,company字段将有多个公司拼写,并包括分支机构,如“IBM”,然后是“IBM Inc.”和“IBM Japan”等。此外,我还有字母数字的产品名称,如“A46 Rhizonme Pentahol”,这是SOUNDEX单独无法处理的 我可以通过使用AJAX自动建议通过web表单输入所有数据,从长远来看解决这个问题。然而,在那之前,我仍然需要处理大量现有数据的收集。根据我在这里读到的内容,我认为这是一个很好的过程: 创建自定义模糊逻辑查找和模糊逻辑分组的步骤如何在MySQL中标记字符串?,mysql,normalization,levenshtein-distance,soundex,tf-idf,Mysql,Normalization,Levenshtein Distance,Soundex,Tf Idf,我的项目正在从平面Excel文件导入一个相当大的集合+500K行数据,这些文件是由一组人员手动创建的。现在的问题是,对于客户端搜索,所有这些都需要规范化。例如,company字段将有多个公司拼写,并包括分支机构,如“IBM”,然后是“IBM Inc.”和“IBM Japan”等。此外,我还有字母数字的产品名称,如“A46 Rhizonme Pentahol”,这是SOUNDEX单独无法处理的 我可以通过使用AJAX自动建议通过web表单输入所有数据,从长远来看解决这个问题。然而,在那之前,我仍然
所以,我放弃了,只是为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;
CREATE DEFINER=`root`@`localhost`函数`NewProc`(在字符串VARCHAR(255)、delims VARCHAR(255)、str_replace VARCHAR(255)中)
返回varchar(255)
确定性
开始
声明str_len,delim_len,a,b,is_delim INT;
声明z,y变量为二进制(1);
声明str_out VARBINARY(256);
设置str_len=CHAR_LENGTH(in_string),delim_len=CHAR_LENGTH(delims),a=1,b=1,is_delim=0,str_out='';
--获取每个字符
虽然是一个伟大的资源,谢谢!我必须看看它集成得有多好,因为这是一个高度手动的解决方案。我很好奇这个过程是否可以自动化。我喜欢这个。在MySQL中标记字符串的唯一方法是使用像您这样的存储函数。是的,这有点烦人,不过有趣的是MySQL支持正则表达式。我是一名PHP开发人员,但我一直在深入研究MySQL,并尝试将更多的逻辑移到DB中进行优化。我认为在进行字符串操作的情况下,最好在应用程序代码中这样做。当然,在某些情况下,在性能方面,您可能会被迫使用MySQL,但这是RDBMS并不特别适合的任务。我敢肯定你在MySQL上看到了REGEXP并开始垂涎三尺,但却意识到它不是瑞士军刀,而是在许多其他语言中。。。我想问一下,您是否对使用PHP和使用MySQL函数的令牌化进行过时间比较?mike-没有,因为性能取决于用例。如果您只想对几行进行标记化,那么可以在PH中查询行,在PHP中进行标记化,并输出到HTML/INSERT/UPDATE等。如果您在MySQL中进行中等复杂的搜索或过滤,使用此标记化函数是最好的方法,而不是在PHP中提取每一行进行处理。