数据库
首页 > 数据库> > 如何在MySQL中对字符串进行标记?

如何在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