feat(Core/UI): 백테스트 전역 엔진 선택 버튼 추가 및 스캘핑 Rust 방어로직 포팅 1차 완료
This commit is contained in:
73
scratch/extract_chat.py
Normal file
73
scratch/extract_chat.py
Normal file
@@ -0,0 +1,73 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user