@@ -0,0 +1,59 @@
|
||||
"""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()
|
||||
Reference in New Issue
Block a user