Mysql 计算每个单词的频率

Mysql 计算每个单词的频率,mysql,Mysql,我一直在上网,意识到MySQL并不是实现这一点的最佳方式,但我还是要问。有人看到或使用过哪些查询、函数或存储过程可以获取文本列中单词的频率 ID|comment ---------------------- Ex. 1|I love this burger 2|I hate this burger word | count -------|------- burger | 2 I | 2 this

我一直在上网,意识到MySQL并不是实现这一点的最佳方式,但我还是要问。有人看到或使用过哪些查询、函数或存储过程可以获取文本列中单词的频率

    ID|comment
    ----------------------
 Ex. 1|I love this burger
     2|I hate this burger

     word   |  count
     -------|-------
     burger |  2
     I      |  2
     this   |  2
     love   |  1
     hate   |  1

这样的办法应该行得通。只需确保不要传入长度为0的字符串

SET @searchString = 'burger';

SELECT 
    ID, 
    LENGTH(comment) - LENGTH(REPLACE(comment, @searchString, '')) / LENGTH(@searchString) AS count
FROM MyTable;

这个解决方案似乎可以完成这项工作(几乎一字不差地从中窃取)。它需要一个
辅助表
表,表中填充从1到至少预期的不同字数的序列号。这对于检查辅助表是否足够大非常重要,否则结果将是错误的(没有显示错误)

选择
子字符串索引(子字符串索引(maintable.comment,,,auxiliary.id),“”,-1)作为单词,
计数(*)作为频率
从主表
连接辅助
长度(注释)>0和子字符串索引(子字符串索引(注释,,,辅助.id),“”,-1)
子字符串索引(子字符串索引(注释“”,辅助.id-1),“”,-1)
逐字分组
“有”字
按频率顺序描述;

这种方法效率很低,因为它不能使用任何索引


作为替代,我将使用一个统计表,我将使用触发器保持最新。也许可以用上面的内容初始化统计表。

你要输入单词吗?@clhereistian不输入任何单词,MySQL是我唯一的选择(现在)哇。你的意思是要解析该列中的所有单词,然后计算每个单词出现的次数?@clhereistian正确,对吗?这更适合php之类的编程语言。
SELECT
    SUBSTRING_INDEX(SUBSTRING_INDEX(maintable.comment, ' ', auxiliary.id), ' ', -1) AS word,
    COUNT(*) AS frequency
FROM maintable 
JOIN auxiliary ON
    LENGTH(comment)>0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id), ' ', -1)
    <> SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id-1), ' ', -1)
GROUP BY word
HAVING word <> ' '
ORDER BY frequency DESC;