gpt4 book ai didi

python - 如何将 Twitch IRC 响应中的表情解析为字典列表?

转载 作者:行者123 更新时间:2023-12-01 03:50:12 24 4
gpt4 key购买 nike

我想将来自 Twitch 的 IRC 消息解析为字典列表,以解释表情。

以下是我可以从 Twitch 获得的示例:

"Testing. :) Confirmed!"

{"emotes": [(1, (9, 10))]}

它描述了从字符 9 到 10 存在 ID 为 1 的表情(字符串为零索引)。

我希望我的数据采用以下格式:

[
{
"type": "text",
"text": "Testing. "
},
{
"type": "emote",
"text": ":)",
"id": 1
},
{
"type": "text",
"text": " Confirmed!"
}
]

有没有一种相对干净的方法来实现这一点?

最佳答案

我不确定您收到的消息是否如下所示:

message = '''\
"Testing. :) Confirmed!"

{"emotes": [(1, (9, 10))]}'''

或者

text = "Testing. :) Confirmed!"
meta = '{"emotes": [(1, (9, 10))]}'

我假设是后者,因为很容易从前者转换为后者。也可能这些是 python 表示。你没说清楚。

有一种大大更好的方法来解决这个问题,即不使用正则表达式而仅使用字符串解析:

import json                                                                                                                                                                                                                     

text = 'Testing. :) Confirmed! :P'
print(len(text))
meta = '{"emotes": [(1, (9, 10)), (2, (23,25))]}'
meta = json.loads(meta.replace('(', '[').replace(')', ']'))


results = []
cur_index = 0
for emote in meta['emotes']:
results.append({'type': 'text', 'text': text[cur_index:emote[1][0]]})
results.append({'type': 'emote', 'text': text[emote[1][0]:emote[1][1]+1],
'id': emote[0]})
cur_index = emote[1][1]+1

if text[cur_index:]:
results.append({'type': 'text', 'text': text[cur_index:]})

import pprint; pprint.pprint(results)
<小时/>

根据您的评论,数据采用自定义格式。我从评论中复制/粘贴了一些字符,我不确定实际上是否出现在传入的数据中,我希望我的部分正确。消息中也只有一种类型的表情,所以我不完全确定它如何表示多种不同的表情类型 - 我希望有一些分隔符而不是多个 emote= 部分,或者这个方法需要一些重大修改,但这应该提供不需要正则表达式的解析。

from collections import namedtuple


Emote = namedtuple('Emote', ('id', 'start', 'end'))


def parse_emotes(raw):
emotes = []
for raw_emote in raw.split('/'):
id, locations = raw_emote.split(':')
id = int(id)
locations = [location.split('-')
for location in locations.split(',')]
for location in locations:
emote = Emote(id=id, start=int(location[0]), end=int(location[1]))
emotes.append(emote)
return emotes

data = r'@badges=moderator/1;color=#0000FF;display-name=2Cubed;emotes=25:6-10,12-16;id=05aada01-f8c1-4b2e-a5be-2534096057b9;mod=1;room-id=82607708;subscriber=0;turbo=0;user-id=54561464;user-type=mod:2cubed!2cubed@2cubed.tmi.twitch.tv PRIVMSG #innectic :Hiya! Kappa Kappa'

meta, msgtype, channel, message = data.split(' ', maxsplit=3)
meta = dict(tag.split('=') for tag in meta.split(';'))
meta['emotes'] = parse_emotes(meta['emotes'])

关于python - 如何将 Twitch IRC 响应中的表情解析为字典列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38382703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com