You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQLite中统计文本对话里高频使用的Emoji?

统计SQLite对话中高频Emoji的可行方案

嘿,这个需求我刚好实操过,在DB Browser for SQLite里完全能实现,给你两个思路的方案,你可以根据自己的需求选:

方案一:精准匹配Emoji的Unicode范围(推荐)

这个方法能准确筛选出各类Emoji,避免把其他特殊字符混进来。核心思路是先用递归CTE把每条消息拆成单个字符,再通过Unicode码点判断是否属于Emoji,最后统计频次。

假设你的对话内容存在messages表的content字段里,直接在DB Browser的SQL编辑器里运行这段代码:

WITH RECURSIVE split_messages AS (
    -- 初始化:取每条消息的第一个字符
    SELECT 
        content,
        1 AS pos,
        substr(content, 1, 1) AS char
    FROM messages
    WHERE content IS NOT NULL AND content != ''
    UNION ALL
    -- 递归:依次取后续每个字符
    SELECT 
        content,
        pos + 1,
        substr(content, pos + 1, 1) AS char
    FROM split_messages
    WHERE pos < length(content)
)
-- 筛选Emoji并统计频次
SELECT 
    char AS emoji,
    COUNT(*) AS frequency
FROM split_messages
WHERE 
    -- 覆盖绝大多数常见Emoji的Unicode区间
    unicode(char) BETWEEN 0x1F600 AND 0x1F64F -- 表情符号
    OR unicode(char) BETWEEN 0x1F300 AND 0x1F5FF -- 符号与象形文字
    OR unicode(char) BETWEEN 0x1F680 AND 0x1F6FF -- 交通与地图符号
    OR unicode(char) BETWEEN 0x1F1E0 AND 0x1F1FF -- 国旗表情
    OR unicode(char) BETWEEN 0x2600 AND 0x26FF -- 杂项符号
    OR unicode(char) BETWEEN 0x2700 AND 0x27BF -- 装饰符号
    OR unicode(char) BETWEEN 0x1F900 AND 0x1F9FF -- 补充表情符号
GROUP BY emoji
ORDER BY frequency DESC;

代码说明:

  • 递归CTEsplit_messages会把每条消息的内容拆成单个字符,SQLite的substr默认按UTF-8字符处理,不用担心多字节Emoji拆分错误。
  • unicode(char)函数能获取字符的Unicode码点,通过判断码点是否在Emoji专属区间里,精准筛选目标字符。
  • 最后按Emoji分组统计,按频次降序排列,最常用的Emoji会排在最前面。

方案二:排除字母/数字/标点(快速凑合用)

如果你不想记Unicode区间,也可以用排除法,把字母、数字和常见标点之外的字符筛选出来统计。不过这个方法可能会混入一些非Emoji的特殊字符(比如数学符号、中文括号等),适合快速验证需求:

WITH RECURSIVE split_messages AS (
    SELECT 
        content,
        1 AS pos,
        substr(content, 1, 1) AS char
    FROM messages
    WHERE content IS NOT NULL AND content != ''
    UNION ALL
    SELECT 
        content,
        pos + 1,
        substr(content, pos + 1, 1) AS char
    FROM split_messages
    WHERE pos < length(content)
)
SELECT 
    char AS emoji,
    COUNT(*) AS frequency
FROM split_messages
WHERE 
    -- 排除字母、数字和常见标点,你可以根据自己的需求增减标点符号
    char NOT GLOB '[a-zA-Z0-9.,!?;:''"-()<>]'
GROUP BY emoji
ORDER BY frequency DESC;

小提示:

如果你的对话里有带肤色修饰、性别修饰的组合Emoji(比如👨🏿‍💻),上面的方法会把它们拆成单个字符统计。要是需要统计完整的组合Emoji,就得更复杂的逻辑去识别多字符组合,不过一般日常统计单个Emoji的频次已经足够啦。

内容的提问来源于stack exchange,提问作者Dom Vito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:42:00