我从不同的网站获取评论并将其存储到表中。对于每条评论,我都会在单独的列中列出形容词
和名词
列表。
因此,对于每条评论,这里都有 3 个主要值。
评论、adjective_list、评分
现在我想计算形容词重复的次数。之后,仅推荐那些具有重复最多时间的形容词且具有 4-5 条评论的评论。
哪种方法是正确的?
我对此的想法:
创建触发器,在有插入审核操作时执行操作。 此触发器将读取包含形容词的列,计算出现次数(不知道如何?)并存储最常见的形容词及其出现次数。
在推荐时选择出现次数最多的形容词,并查看 4-5 个评分的评论。
我不确定什么是正确的方法。任何帮助都是值得赞赏的
主表如下所示:
最佳答案
未经测试,但如果我正确理解您的要求,您应该能够基于类似的查询来完成这项工作:-
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 个逗号分隔的单词(很容易扩展,但会比较慢)。
关于mysql - 计算mysql表中的单词出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22986022/