ranjithkumar111's picture
Upload 54 files
0ab392d verified
Raw
History Blame Contribute Delete
1.36 kB
# File : app/documents/parser.py
# Purpose : Extract text from PDF, DOCX, TXT files
import io
from pathlib import Path
from typing import List, Dict
import pdfplumber
from docx import Document as DocxDocument
def parse_pdf(file_bytes: bytes) -> List[Dict]:
pages = []
with pdfplumber.open(io.BytesIO(file_bytes)) as pdf:
for i, page in enumerate(pdf.pages):
text = page.extract_text() or ""
text = text.strip()
if text:
pages.append({"page_number": i + 1, "content": text})
return pages
def parse_docx(file_bytes: bytes) -> List[Dict]:
doc = DocxDocument(io.BytesIO(file_bytes))
full_text = "\n".join([p.text for p in doc.paragraphs if p.text.strip()])
return [{"page_number": 1, "content": full_text}]
def parse_txt(file_bytes: bytes) -> List[Dict]:
text = file_bytes.decode("utf-8", errors="ignore").strip()
return [{"page_number": 1, "content": text}]
def parse_document(file_bytes: bytes, filename: str) -> List[Dict]:
ext = Path(filename).suffix.lower()
if ext == ".pdf":
return parse_pdf(file_bytes)
elif ext == ".docx":
return parse_docx(file_bytes)
elif ext == ".txt":
return parse_txt(file_bytes)
else:
raise ValueError(f"Unsupported file type: {ext}")