我做一个聊天分析器,其中包含有关所用辱骂词和相应评分的统计信息。
表结构:
消息:id-唯一消息ID,from_id-发件人ID,日期-发送日期,文本-文本。
令人反感:
id-消息中发现的可恶词的唯一ID,键入-与可恶词的词根相关联的数值from_id-发件人的ID(与消息中相同),in_message-消息的ID使用此可恶词的消息,即文本-可恶词本身。
接下来,我执行以下查询以构建便盆顶部的人:
SELECT from_id, COUNT(*)
FROM `Offensive`
GROUP BY from_id
ORDER BY `COUNT(*)` DESC
然而,作弊者开始写诸如“操他妈的操”的信息。提高他的评级。我认为我可以通过使用查询建立等级来筛选这种作弊方式,即在N时间内不考虑超过一定数量的侮辱性单词,但是不幸的是,我不知道该怎么做。 ..
我也尝试过:
SELECT from_id, COUNT(*)
FROM (
SELECT count(*), from_id, in_message
FROM `Offensive`
GROUP BY in_message
HAVING `count(*)`<100
) AS lol
GROUP BY from_id
ORDER BY `COUNT(*)` DESC
-不要考虑具有超过一定数量的辱骂词的消息,但在这种情况下,每条消息只需要一个不超过一个辱骂词即可
答案 0 :(得分:0)
您可以简单地计算出不同侮辱性单词的数量。我认为这可以做到:
SELECT from_id, COUNT(DISTINCT id)
FROM Offensive
GROUP BY from_id
ORDER BY COUNT(*) DESC;
如果您想要更精细的限制,例如每个单词为“ 5”:
select from_id, sum(case when num <= 5 then num else 5 end)
from (select from_id, id, count(*) as num
from offensive
group by from_id, id
) o
group by from_id