我是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: 👀...👋🏾 ✋🏿
简短的回答是您已经进入了 Unicode 的世界。
你会看到许多相似的曲折段落。
你会发现len(〽️) == 2,因为字符是由两个字符组成,显示为一个。这会导致关于删除它需要多少个退格键的奇怪行为。
您可能会读到: https://uniseg-py.readthedocs.io/en/latest/graphemecluster.html
有很多七个字符的旗帜。 有传言称某些基于字符的名称被用来创建超过 1K 字节的单个可显示字符。
您可能还意识到 Unicode 与 Zork 属于同一时代,并且大致相同。