如何在 python 3.9 中将多个代码点表情符号转换回单个字素

问题描述 投票:0回答:1

我是Python新手,正在创建一个whatsapp聊天解析器,并使用正则表达式从.txt文件中查找所有消息数据以进行分析。

我使用的正则表达式模式查找所有消息文本,但将带有修饰符的表情符号转换为各自的部分,例如:🤦🏾u200d♀️ 显示如下“🤦🏾\u200d♀️”。

如何将这些 unicode 序列转换回原来的单个字素,以便将它们保存到 sqlite3 数据库中?

这是我用来查找所有消息数据的正则表达式:

FULL_MESSAGE = "(\[([\d/]+), ([\d:]+.{3})\]) (.+?): (\X+)"

这是我试图解析的数据类型的示例

[26/9/2015, 12:05:18 am] David: 🤦🏾‍♀️ haha, I didn't even know those emojis existed!!!

这是我用来在字符串中查找表情符号的代码:

import regex
import emoji

def emoji_count(message):
    emoji_list = ''
    data = regex.findall(r'\X', message)
    for word in data:
        if any(char in emoji.UNICODE_EMOJI_ENGLISH for char in word):
            emoji_list += word
    return emoji_list

我有一种感觉,我需要进行某种编码/解码,但我找不到明确的答案。

编辑 - 经过更多测试后,我发现我用来读取 txt 文件的 .split() 方法可能会导致一些错误,或者可能与将表情符号放入字符串列表中有关,如下所示:

文本文件

[29/12/2021, 5:21:20 pm] Person1: Testing 🤦🏾‍♀️
[19/9/2015, 11:23:12 am] Person2: Testing with this one 👋🏾
[25/9/2015, 9:14:31 pm] Person1: 👀...👋🏾 ✋🏿

代码

import emoji
import regex

with open('_chat.txt', 'r') as f:
    text = f.read().split('\n')

with open('test.txt', 'w') as f:
    print(text, file=f)

输出:

['[29/12/2021, 5:21:20 pm] Person1: Testing 🤦🏾\u200d♀️', '[19/9/2015, 11:23:12 am] Person2: Testing with this one 👋🏾', '[25/9/2015, 9:14:31 pm] Person1: 👀...👋🏾 ✋🏿']

代码(无.split())

import emoji
import regex

with open('_chat.txt', 'r') as f:
    text = f.read()

with open('test.txt', 'w') as f:
    print(text, file=f)

输出:

[29/12/2021, 5:21:20 pm] Person1: Testing 🤦🏾‍♀️
[19/9/2015, 11:23:12 am] Person2: Testing with this one 👋🏾
[25/9/2015, 9:14:31 pm] Person1: 👀...👋🏾 ✋🏿
python-3.x sqlite
1个回答
0
投票

简短的回答是您已经进入了 Unicode 的世界。

你会看到许多相似的曲折段落。

你会发现len(〽️) == 2,因为字符是由两个字符组成,显示为一个。这会导致关于删除它需要多少个退格键的奇怪行为。

您可能会读到: https://uniseg-py.readthedocs.io/en/latest/graphemecluster.html

有很多七个字符的旗帜。 有传言称某些基于字符的名称被用来创建超过 1K 字节的单个可显示字符。

您可能还意识到 Unicode 与 Zork 属于同一时代,并且大致相同。

© www.soinside.com 2019 - 2024. All rights reserved.