Files
kis_bot/scratch/extract_chat.py

74 lines
2.5 KiB
Python

import json, re
with open('/home/hoon/kis_bot/.cursor_chat/d8d6e45a-37b6-463f-8e19-b57bbce698af/d8d6e45a-37b6-463f-8e19-b57bbce698af.jsonl') as f:
lines = f.readlines()
# timestamp 파싱: <timestamp>Wednesday, Sep 2, 2026, 5:30 PM (UTC+9)</timestamp>
# 17:30 이후 = 5:30 PM 이후
TS_PATTERN = re.compile(r'<timestamp>(.*?)</timestamp>')
# Sep 2, 2026 이고 시간 >= 5:30 PM 인 메시지 추출
def parse_hour(ts_str):
"""Sep 2, 2026, 5:30 PM → (date_str, hour_24)"""
m = re.search(r'(\w+ \d+, \d+), (\d+:\d+) (AM|PM)', ts_str)
if not m:
return None, None
date_str = m.group(1) # e.g. "Sep 2, 2026"
time_str = m.group(2) # e.g. "5:30"
ampm = m.group(3)
h, mi = map(int, time_str.split(':'))
if ampm == 'PM' and h != 12:
h += 12
elif ampm == 'AM' and h == 12:
h = 0
return date_str, h * 60 + mi
TARGET_DATE = "Sep 2, 2026"
CUTOFF_MIN = 17 * 60 + 30 # 17:30
results = []
current_ts = None
current_ts_min = None
current_date = None
for i, line in enumerate(lines):
obj = json.loads(line)
role = obj.get('role', '?')
msg = obj.get('message', '')
# 메시지 텍스트 추출
raw_text = ''
if isinstance(msg, dict):
content = msg.get('content', [])
if isinstance(content, list):
for c in content:
if isinstance(c, dict) and c.get('type') == 'text':
raw_text += c.get('text', '')
elif isinstance(content, str):
raw_text = content
elif isinstance(msg, str):
raw_text = msg
# timestamp 찾기
ts_match = TS_PATTERN.search(raw_text)
if ts_match:
ts_str = ts_match.group(1)
date_str, ts_min = parse_hour(ts_str)
if date_str:
current_ts = ts_str
current_ts_min = ts_min
current_date = date_str
# Sep 2, 2026 && >= 17:30 인 경우만 수집
if current_date == TARGET_DATE and current_ts_min is not None and current_ts_min >= CUTOFF_MIN:
# 텍스트에서 timestamp 제거하고 user_query/assistant 내용만 추출
clean = re.sub(r'<timestamp>.*?</timestamp>', '', raw_text)
clean = re.sub(r'<user_query>|</user_query>', '', clean).strip()
results.append((i, role, current_ts, clean[:800]))
print(f'=== 2026-09-02 17:30 이후 메시지: {len(results)}개 ===\n')
for idx, (line_no, role, ts, text) in enumerate(results):
print(f'--- [{line_no}] {role.upper()} | {ts} ---')
print(text[:600])
print()