document-parser / document_processing.py
segovia
some fixes
5234643
Raw
History Blame Contribute Delete
1.68 kB
from __future__ import annotations
import base64
import io
from pathlib import Path
SUPPORTED_EXTENSIONS = {".txt", ".pdf", ".docx", ".jpg", ".jpeg", ".png"}
IMAGE_EXTENSIONS = {".jpg", ".jpeg", ".png"}
def extract_text(file_path: Path) -> str:
suffix = file_path.suffix.lower()
if suffix == ".txt":
return file_path.read_text(encoding="utf-8", errors="ignore")
if suffix == ".pdf":
from pypdf import PdfReader
reader = PdfReader(str(file_path))
pages = [page.extract_text() or "" for page in reader.pages]
return "\n".join(pages)
if suffix == ".docx":
from docx import Document
document = Document(str(file_path))
paragraphs = [paragraph.text for paragraph in document.paragraphs]
return "\n".join(paragraphs)
raise ValueError(f"Unsupported file type: {file_path.suffix}")
def load_documents(folder: Path) -> list[Path]:
if not folder.exists():
raise FileNotFoundError(f"Input folder does not exist: {folder}")
files = [path for path in folder.rglob("*") if path.is_file() and path.suffix.lower() in SUPPORTED_EXTENSIONS]
return sorted(files)
def is_image_document(file_path: Path) -> bool:
return file_path.suffix.lower() in IMAGE_EXTENSIONS
def to_data_uri(file_path: Path) -> str:
mime_type = {
".jpg": "image/jpeg",
".jpeg": "image/jpeg",
".png": "image/png",
}.get(file_path.suffix.lower())
if not mime_type:
raise ValueError(f"Unsupported image file type: {file_path.suffix}")
encoded = base64.b64encode(file_path.read_bytes()).decode("ascii")
return f"data:{mime_type};base64,{encoded}"