提问人:Dom Vito 提问时间:4/22/2018 更新时间:11/27/2019 访问量:2512
在SQLite中处理表情符号
Processing Emojis in SQLite
问:
我希望使用 SQL Lite 确定哪些表情符号在文本对话中使用最多。我正在使用DB浏览器,表情符号的显示方式就像在iMessage中一样(见下图),但我对如何计算它们感到困惑。
我在想,如果有一种方法可以检查并查看字符是否不是字母/数字/标点符号,那么我可以计算所有不符合先决条件列表的字符的频率。也就是说,我不熟悉SQLite命令以及如何实现它。
有没有更好的方法呢?如果您需要更多上下文来回答这个问题,请告诉我。
答:
我可以看到直接使用SQLite执行此操作的唯一方法是从源代码编译SQLite,以便您可以添加对 .regex_replace
但是,您只计划执行一次,重新编译 SQLite 可能有点矫枉过正。
相反,您可以将列复制到纯文本文件中,并运行以下命令:text
sed 's/\(.\)/\1\n/g' temp.txt | sed 's/[[:alnum:].-]//g' | sort -r | uniq -c
这将变成以下内容:
Hello! Are you stuck? 🤔
I saw 🐻🐻🐻 in the park!!!!!
🎂🎂🎂🎂🎂🎂 - all lies.
Easy as 123! 😎😎😎😎😎😎😎😎😎😎😎
到:
1 🤔
11 😎
3 🐻
6 🎂
1 ?
7 !
17
50
希望这足以让你达到你的目标。最后两个条目用于制表符和空格。
sed
是一个 Linux 命令,因此,如果您运行的是 Windows,则可能需要在此处获取 Windows 版本:https://github.com/mbuilov/sed-windows
构建表情符号表,在文本字段中包含表情符号字符串,然后尝试以下操作:
SELECT emojis.text, sum(length(replace(message.text, emojis.text, emojis.text || '_')) - length( message.text))
FROM message
INNER JOIN emojis ON message.text LIKE '%' || emojis.text || '%'
GROUP BY emojis.text
您可以使用此方法计算消息中任何文本的出现次数...
评论
可能不是最有效的示例,但您可以使用 group_concat 函数将文本合并到单个字符串中,然后使用递归 cte 将其转换为单个字符表。您可以使用大于 7F 的十六进制函数过滤掉所有“正常”acii 字符(参见 asii 表),您可能需要根据你的表情符号是什么以及您是否有大量非拉丁 unicode 在那里。然后,如果您只想要总数,则可以进行计数,或者如果您想知道单个表情符号计数是多少,则可以使用计数进行分组。
WITH RECURSIVE theChars (
position
,charValue
)
AS (
SELECT 2
,substr((
SELECT group_concat(TEXT, '')
FROM message
), 1, 1)
UNION ALL
SELECT position + 1
,substr((SELECT group_concat(TEXT, '') FROM message)
,position
,1)
FROM theChars LIMIT length((SELECT group_concat(TEXT, '') FROM message))
)
SELECT charValue,count(*)
FROM theChars
WHERE hex(charValue) > '7F'
group by charValue;
评论