ki:galnet:werkzeuge:autotag
autotag.py
Gibt pro Meldung Vorschläge aus (bekannte Namen, Systeme, unbekannte Personen) – Grundlage für die Durchsicht durch Claude.
Ablage beim Arbeiten: autotag.py. Herunterladen: auf den Dateinamen über dem Code klicken.
- autotag.py
import json,re,sys,csv from pathlib import Path import names as N R=Path(sys.argv[1]); years={int(x) for x in sys.argv[2].split(',')} def load(L): d={} for f in (R/L).glob('*.json'): if int(f.stem[:4])-1286 in years: for a in json.load(open(f,encoding='utf-8'))['articles']: d[a['id']]=a return d EN,DE=load('EN'),load('DE') idx=[r for r in csv.DictReader(open(R/'index.csv',encoding='utf-8'),delimiter=';') if int(r['date'][:4]) in years] def find(t,d): return sorted({v for k,v in d.items() if re.search(r'(?<![\w-])'+re.escape(k),t)}) known=set(N.PERSONS)|set(N.CORPORATIONS)|set(N.CODEX) for n,r in enumerate(idx): a=EN.get(r['frontier_id']); de=DE.get(r['frontier_id'],{}) t=a['title']+'\n'+a['body'] # alerts header nicht als Pilotenvereinigung werten t2=re.sub(r"\*?Pilots[’'] Federation ALERT\*?",'',t) sysc=set(re.findall(r"System(?:s)? ((?:[A-Z0-9][\w'+.-]*)(?: (?:[A-Z0-9][\w'+.-]*|Sector|[a-z]\d[\w-]*))*)",de.get('body',''))) sysc|=set(re.findall(r"the ((?:[A-Z0-9][\w'+.-]*)(?: [A-Z0-9][\w'+.-]*)*) system",a['body'])) pc=set(re.findall(r"\b(?:President|Admiral|Senator|Councillor|Commander|Captain|Professor|Dr\.?|CEO|Chancellor|Ambassador|Emperor|Prime Minister|Vice President|Director|General|Minister|Commodore|Shadow President|Princess|Prince|Senator)\s+((?:[A-Z][\w'-]+)(?:\s[A-Z][\w'-]+)*)",a['body'])) pc|=set(re.findall(r"\b([A-Z][a-z]+(?:-[a-z]+)? [A-Z][a-z]+(?:-[A-Z]?[a-z]+)?)\b,? (?:said|stated|added|explained|told|announced|commented|declared|continued|confirmed)",a['body'])) pc={p for p in pc if not any(p in k or k in p for k in known)} tags=dict(factions=find(t2,N.FACTIONS),corporations=find(t2,N.CORPORATIONS),persons=find(t2,N.PERSONS),codex=find(t2,N.CODEX),ships=find(t2,N.SHIPS)) short=lambda v:[x.split(':')[-1] if not x.endswith('start') else x.split(':')[-2] for x in v] print(f"#{n} {r['frontier_id']} {r['date_ingame']} | {a['title']}") print(' A:',{k:short(v) for k,v in tags.items() if v},'| SYS:',sorted(sysc),'| P?:',sorted(pc)) print(' ',re.sub(r'\s+',' ',a['body'])[:260])
ki/galnet/werkzeuge/autotag.txt · Zuletzt geändert: (Externe Bearbeitung)
