detectiq / utils /extractor.py
Tasawar-prog1's picture
Upload 2 files
e271590 verified
Raw
History Blame Contribute Delete
1.02 kB
import io
import fitz
import docx
MAX_BYTES = 10 * 1024 * 1024 # 10 MB
MAX_PAGES = 100
MAX_CHARS = MAX_PAGES * 3000 # ~3000 chars/page ceiling
def extract_pdf(data: bytes) -> str:
doc = fitz.open(stream=data, filetype="pdf")
pages = min(len(doc), MAX_PAGES)
parts = []
for i in range(pages):
text = doc[i].get_text("text")
parts.append(text)
return "\n".join(parts)[:MAX_CHARS]
def extract_docx(data: bytes) -> str:
doc = docx.Document(io.BytesIO(data))
lines = []
for para in doc.paragraphs:
t = para.text.strip()
if t:
lines.append(t)
return "\n".join(lines)[:MAX_CHARS]
def extract_text(data: bytes, filename: str) -> str:
if len(data) > MAX_BYTES:
raise ValueError("File exceeds 10 MB limit.")
name = filename.lower()
if name.endswith(".pdf"):
return extract_pdf(data)
if name.endswith(".docx"):
return extract_docx(data)
raise ValueError("Unsupported file type. Upload PDF or DOCX.")