Mysql 计算每个单词的频率
我一直在上网,意识到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
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;