查询两个表以进行滥用单词分析

时间:2018-12-01 18:33:55

标签: mysql sql

我做一个聊天分析器,其中包含有关所用辱骂词和相应评分的统计信息。

表结构:

消息: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

-不要考虑具有超过一定数量的辱骂词的消息,但在这种情况下,每条消息只需要一个不超过一个辱骂词即可

1 个答案:

答案 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