在SQLite中处理Emojis

时间:2018-04-21 16:32:59

标签: sql encoding sqlite emoji

我希望在使用SQL Lite的文本对话中确定哪些表情符号最常用。我正在使用数据库浏览器,表情符号就像在iMessage中一样显示(见下图),但我对如何计算它们感到难过。

我在想是否有办法检查并查看某个字符是不是字母/数字/标点符号,然后我可以计算所有不符合先决条件列表的字符的频率。也就是说,我不熟悉SQLite命令以及如何实现这一点。

还有更好的方法吗?如果您需要更多背景来回答这个问题,请告诉我。

Emoji Example

3 个答案:

答案 0 :(得分:0)

我可以直接使用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

答案 1 :(得分:0)

构建emojis表,在文本字段中包含emojis字符串,然后尝试:

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

您可以使用此方法计算消息中任何文本的出现次数...

答案 2 :(得分:0)

可能不是最有效的示例,但是您可以使用group_concat函数将文本合并为单个字符串,然后使用递归cte将其转换为单个char表。您可以使用大于7F(see asii table)的十六进制函数来过滤掉所有“普通” ASCII字符,具体取决于您的表情符号以及其中是否包含非拉丁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;