Files
2026-07-16 11:12:17 +08:00

60 lines
1.8 KiB
Python

"""Quick probe of sample documents for chunking strategy planning."""
import re
import zipfile
from pathlib import Path
DATA = Path(__file__).resolve().parent.parent / "data"
def probe_docx(p: Path) -> None:
with zipfile.ZipFile(p) as z:
media = [n for n in z.namelist() if n.startswith("word/media/")]
xml = z.read("word/document.xml").decode("utf-8", errors="ignore")
headings = len(re.findall(r'w:pStyle w:val="Heading', xml))
tables = xml.count("<w:tbl")
drawings = xml.count("<w:drawing") + xml.count("<w:pict")
print(f" media: {len(media)}, tables: {tables}, drawings: {drawings}, heading_styles: {headings}")
def probe_pdf(p: Path) -> None:
import fitz
doc = fitz.open(p)
imgs = sum(len(doc[i].get_images()) for i in range(len(doc)))
text_len = sum(len(doc[i].get_text()) for i in range(len(doc)))
print(f" pages: {len(doc)}, embedded_images: {imgs}, text_chars: {text_len}")
doc.close()
def probe_xlsx(p: Path) -> None:
import openpyxl
wb = openpyxl.load_workbook(p, read_only=True, data_only=True)
print(f" sheets: {len(wb.sheetnames)} -> {wb.sheetnames[:5]}")
for sn in wb.sheetnames[:2]:
ws = wb[sn]
print(f" {sn}: rows={ws.max_row}, cols={ws.max_column}")
wb.close()
def main() -> None:
for p in sorted(DATA.iterdir()):
if not p.is_file():
continue
print(f"=== {p.name} ({p.stat().st_size} bytes) ===")
ext = p.suffix.lower()
try:
if ext == ".docx":
probe_docx(p)
elif ext == ".pdf":
probe_pdf(p)
elif ext in (".xlsx", ".xls"):
probe_xlsx(p)
except Exception as e:
print(f" ERROR: {e}")
print()
if __name__ == "__main__":
main()