我希望在使用SQL Lite的文本对话中确定哪些表情符号最常用。我正在使用数据库浏览器,表情符号就像在iMessage中一样显示(见下图),但我对如何计算它们感到难过。
我在想是否有办法检查并查看某个字符是不是字母/数字/标点符号,然后我可以计算所有不符合先决条件列表的字符的频率。也就是说,我不熟悉SQLite命令以及如何实现这一点。
还有更好的方法吗?如果您需要更多背景来回答这个问题,请告诉我。
答案 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;