Spaces:
Running on Zero
Running on Zero
File size: 1,682 Bytes
fd842a4 5234643 fd842a4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 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}" |