"""Check all volumes via direct SQLite query + spot-check via API.""" import sqlite3 import json import urllib.request import re DB = r"F:\_Ai\Tipitaka-AI-Expert\RAG\tipitaka_mcu.db" API = "http://localhost:8000/api/pages" db = sqlite3.connect(DB) db.row_factory = sqlite3.Row cur = db.cursor() # 1. Volume-by-volume footnote counts cur.execute(""" SELECT v.volume_number, v.title, COUNT(r.id) as fn_count FROM volumes v LEFT JOIN reference_markers r ON r.volume_num = v.volume_number AND r.type = 'footnote' GROUP BY v.volume_number ORDER BY v.volume_number """) rows = cur.fetchall() print(f"{'Vol':>3} {'FN':>5} Title") print("=" * 55) total_fn = 0 v_fn = 0 v_no = 0 for r in rows: cnt = r["fn_count"] total_fn += cnt if cnt > 0: v_fn += 1 else: v_no += 1 print(f"{r['volume_number']:>3} {cnt:>5} {r['title'][:40]}") print(f"\nWith FNs: {v_fn}, Without: {v_no}, Total: {total_fn}") # 2. Distinct marker IDs per volume print() print("Unique markers per volume:") cur.execute(""" SELECT volume_num, COUNT(DISTINCT marker_id) as unique_ids FROM reference_markers WHERE type = 'footnote' GROUP BY volume_num ORDER BY volume_num """) for r in cur.fetchall(): print(f" Vol {r['volume_num']}: {r['unique_ids']} unique marker IDs") # 3. Pages with most footnotes print() print("Top pages (most footnotes):") cur.execute(""" SELECT volume_num, page_num, COUNT(*) as cnt FROM reference_markers WHERE type = 'footnote' GROUP BY volume_num, page_num ORDER BY cnt DESC LIMIT 10 """) for r in cur.fetchall(): print(f" Vol {r['volume_num']:>2} P{r['page_num']:>3}: {r['cnt']}") db.close() # 4. Spot-check via API (first 15 volumes + heavy ones) print("\n\n=== API Spot Check ===") def get_json(url, timeout=8): try: resp = urllib.request.urlopen(url, timeout=timeout) return json.loads(resp.read()) except Exception as e: return {"_error": str(e)} # Check first 15 volumes for sup tags for vol in [1,2,3,5,10,14,15,20,25,30,35,40,45]: data = get_json(f"{API}/{vol}/1") if "_error" in data: print(f"Vol {vol}: API ERROR - {data['_error']}") continue fns = data.get("footnotes", []) html = data.get("content_html_formatted", "") sups = re.findall(r']*>.*?', html) blank = data.get("is_blank", False) fn_str = f"{len(fns)} FN" sup_str = f"{len(sups)} Sup" status = "✅" if len(fns) > 0 and len(sups) == 0: status = "⚠️ NOSUP" elif blank: status = "⬜ blank" print(f"Vol {vol:>2} P1: {fn_str:>7}, {sup_str:>7} {status}") # Check pages with most footnotes print() heavy = [(5,34), (11,172), (11,180)] # from top10 for vol, pg in heavy: data = get_json(f"{API}/{vol}/{pg}") if "_error" not in data: fns = data.get("footnotes", []) html = data.get("content_html_formatted", "") sups = re.findall(r']*>.*?', html) print(f"Vol {vol:>2} P{pg:>3}: {len(fns)} FN, {len(sups)} Sup {'✅' if len(fns)==len(sups) or len(sups)>0 else '⚠️'}")