计算mysql表中的单词出现次数

时间:2014-04-10 10:55:39

标签: mysql sql

我从不同的网站获取评论并存储到表格中。对于每次审核,我都会在单独的列中列出adjectivenoun

因此,对于每次审核,此处都有3个主要值。

review, adjective_list, rate

现在我想计算形容词重复的次数。在此之后,仅推荐那些具有重复最长时间并具有4-5审查的形容词的评论。

这是正确的方法吗?

我对此的想法:

创建触发器,在执行插入查看操作时执行操作。 此触发器将读取具有形容词的列,计算出现(不知道如何?)并存储顶部形容词及其出现位置。

虽然建议选择具有最大发生率的形容词,并考虑4-5评级评论。

我不确定什么是正确的方法。任何帮助都很明显

主表如下所示:

enter image description here

1 个答案:

答案 0 :(得分:1)

未经测试,但如果我正确理解您的要求,您应该能够根据此类内容进行查询以完成工作: -

SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(adj_noun, ',', aCnt + 1), ',', -1), COUNT(*)
FROM Main_Table
INNER JOIN
(
    SELECT Units.i + Tends.i * 10 + Hundreds.i * 100 AS aCnt
    (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Units
    (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Tens
    (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Hundreds
) Integers_Query
ON aCnt <= (LENGTH(adj_noun) - LENGTH(REPLACE(adj_noun, ',', '')))
GROUP BY id, SUBSTRING_INDEX(SUBSTRING_INDEX(adj_noun, ',', aCnt + 1), ',', -1)

这使用一个子查询来获取一系列数字(0到999),并对你的表进行连接,其中数字小于或等于逗号在adj_noun列中出现的时间(即,从adj_noun的全长中删除所有逗号,减去adj_noun的长度。然后使用SUBSTRING_INDEX获取字符串到aCnt逗号,再次使用SUBSTRING_INDEX将该逗号中的字符串返回到上一个逗号(从结果中排除逗号)。

COUNT / GROUP BY应该为您提供每个单词在每个项目的结果列表中显示的次数。

可能相当低效。只处理1000个逗号分隔的单词(容易扩展,但速度会慢)。