如何在MySQL中对字符串进行标记?
作者:互联网
我的项目是从平面Excel文件中导入大量的500K行数据,这些数据由一组人手动创建.现在的问题是,所有这些都需要规范化,以便客户端搜索.例如,公司字段将包含多个公司拼写并包含分支,例如“IBM”和“IBM Inc.”另外,我的产品名称是字母数字,例如“A46-Rhizonme Pentahol”,SOUNDEX单独无法处理.
我可以通过使用AJAX自动建议将所有数据输入通过Web表单来长期解决问题.然而,在那之前,我仍然需要处理大量现有数据.根据我在这里读到的内容,这让我知道我认为是一个很好的过程:
http://msdn.microsoft.com/en-us/magazine/cc163731.aspx
创建自定义模糊逻辑查找和模糊逻辑分组的步骤
>列表项目
>将字符串标记为关键字
>计算关键字TF-IDF(总频率 – 逆文档频率)
>计算关键词之间的levenshtein距离
>在可用的alpha字符串上计算Soundex
>确定关键字的上下文
>根据上下文将关键字放置到单独的数据库表中,例如“公司”,“产品”,“成分”
我一直在谷歌搜索,搜索StackOverflow,阅读关于这个问题的MySQL.com讨论等,试图找到一个预建的解决方案.有任何想法吗?
解决方法:
所以,我放弃了,只为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”,“.,:;”,“|”)
并将返回
“这|是|我的|输入|字符串”
我希望其他人觉得这很有用.干杯!
标签:mysql,tf-idf,normalization,levenshtein-distance,soundex 来源: https://codeday.me/bug/20190826/1731943.html