# Compact "call episode" digests from captions for analyst adjudication: key phrases only, with IST minute. import re,sys,datetime as dt,pandas as pd sys.path.insert(0,'scripts'); from subs2txt import load from extract_calls import ACT,SL,TG,CT,CS PLAN=re.compile(r'एंट्री (लेंगे|करेंगे|प्लान|लेने वाले|होगी)|ट्रेड (लेंगे|प्लान|मारेंगे|लूंगा)|स्कैल्प मार|रिस्क (ले|लेंगे|उठा)|री ?एंट्री') STK=re.compile(r'(\d{2},?\d{3})\s*(का|की|के)?\s*(कॉल|पुट|पीई|सीई|सी|पी)') SIDE=re.compile(r'कॉल|पुट|सीई|पीई') PX=re.compile(r'(\d{2,4})\s*(के अराउंड|से एंट्री|पे एंट्री|पर एंट्री|इस एरिया|एरिया|के ऊपर|के नीचे|का लेवल|लेवल)') def digest(vid,start,gap=120): L=load(f'data/subs/{vid}.hi-orig.json3'); st=dt.datetime.fromisoformat(start); hits=[] for t,x in L: if 'गोल्ड' in x or 'क्रूड' in x: continue tags=[] for nm,rx in (('ACT',[ACT]),('PLAN',[PLAN]),('STK',[STK]),('SL',SL),('TG',TG),('CLAIM_T',[CT]),('CLAIM_SL',[CS]),('PX',[PX])): for r in rx: for m in r.finditer(x): tags.append(f'{nm}:{m.group(0)}') if tags: hits.append((t,tags,SIDE.findall(x))) eps=[]; cur=None for t,tags,sd in hits: if cur and t-cur['end']<=gap: cur['end']=t; cur['items'].append((t,tags,sd)) else: cur=dict(start=t,end=t,items=[(t,tags,sd)]); eps.append(cur) out=[] for e in eps: if not any(any(g.startswith(('ACT','PLAN')) for g in tg) for _,tg,_ in e['items']): continue s=f"EP {(st+dt.timedelta(seconds=e['start'])).strftime('%H:%M:%S')}-{(st+dt.timedelta(seconds=e['end'])).strftime('%H:%M')} off={int(e['start'])}: " s+=' | '.join(f"{(st+dt.timedelta(seconds=t)).strftime('%H:%M')} "+','.join(tg)+(f" [{''.join(x[0] for x in sd)}]" if sd else '') for t,tg,sd in e['items']) out.append(s) return out if __name__=='__main__': inv=pd.read_csv('results/stream_inventory.csv').set_index('id') for v in sys.argv[1:]: print('###',v,inv.loc[v,'start_ist']); [print(x) for x in digest(v,inv.loc[v,'start_ist'])]