om-extractor-v1 / src /summary.py
SarahXia0405's picture
Update src/summary.py
e03ad3f verified
Raw
History Blame Contribute Delete
1.18 kB
# src/summary.py
from __future__ import annotations
import re
from typing import Dict, List, Tuple
from schema import ExtractedDocument
def _top_keywords(keywords: Dict[str, int], top_n: int = 10) -> List[Tuple[str, int]]:
items = sorted(keywords.items(), key=lambda x: x[1], reverse=True)
return [(k, v) for k, v in items if v > 0][:top_n]
def _guess_address(text: str) -> str:
# Very naive US-style address guess
# e.g., "123 Main St, Dallas, TX 75201"
pattern = r"\b\d{1,6}\s+[A-Za-z0-9.\- ]+\s+(Street|St|Avenue|Ave|Road|Rd|Boulevard|Blvd|Lane|Ln|Drive|Dr)\b.*?\b[A-Z]{2}\s+\d{5}\b"
m = re.search(pattern, text, flags=re.IGNORECASE)
return m.group(0).strip() if m else ""
def naive_summary(doc: ExtractedDocument) -> Dict[str, object]:
words = doc.text.split()
address_guess = _guess_address(doc.text[:20000]) # only scan early chunk
return {
"filename": doc.filename,
"reader": doc.reader,
"num_pages": doc.num_pages,
"word_count": len(words),
"table_count": len(doc.tables),
"top_keyword_hits": _top_keywords(doc.keywords, top_n=12),
"address_guess": address_guess,
}