hfchat / document_analyzer.py
Phitographix's picture
Upload 14 files
bda6294 verified
Raw
History Blame Contribute Delete
1.93 kB
# -*- coding: utf-8 -*-
"""
Analyse de documents televerses (PDF, DOCX, TXT, CSV) - Space edition.
Le texte est traite en memoire pour la session, croise avec le contenu du
site, puis oublie (aucune conservation).
"""
import io
import gdpr
def extract_text(file_name, file_bytes):
name = file_name.lower()
if name.endswith(".pdf"):
from pypdf import PdfReader
reader = PdfReader(io.BytesIO(file_bytes))
parts = []
for page in reader.pages:
try:
parts.append(page.extract_text() or "")
except Exception:
continue
return "\n".join(parts).strip()
if name.endswith(".docx"):
import docx
doc = docx.Document(io.BytesIO(file_bytes))
return "\n".join(p.text for p in doc.paragraphs).strip()
if name.endswith((".txt", ".md", ".csv")):
return file_bytes.decode("utf-8", errors="ignore")
raise ValueError(f"Format non pris en charge : {file_name}")
def analyze_document(file_name, file_bytes, question, lang="fr"):
import rag_engine
raw = extract_text(file_name, file_bytes)
if not raw:
msg = ("Impossible d'extraire du texte de ce document."
if lang != "en" else
"Could not extract text from this document.")
return msg, [], ""
clean = gdpr.safe_for_processing(raw)
if not question:
question = ("Resume ce document et indique ses liens avec les "
"informations du site Vizyon Ayiti 360."
if lang != "en" else
"Summarize this document and relate it to the Vizyon "
"Ayiti 360 website information.")
response, sources = rag_engine.answer(question, lang=lang,
extra_context=clean)
preview = clean[:600] + ("..." if len(clean) > 600 else "")
return response, sources, preview