Spaces:
Sleeping
Sleeping
import chardet | |
from fastapi import UploadFile, HTTPException | |
from io import BytesIO | |
from docx import Document | |
import fitz | |
async def file_to_text(file: UploadFile): | |
file_extension = file.filename.split('.')[-1].lower() | |
if file_extension == 'csv': | |
csv_data = await file.read() | |
encoding = chardet.detect(csv_data)['encoding'] | |
try: | |
decoded_data = csv_data.decode(encoding) | |
return decoded_data | |
except UnicodeDecodeError: | |
raise HTTPException(status_code=400, detail="Le fichier CSV contient des caractères qui ne peuvent pas être décodés.") | |
# Fait | |
elif file_extension == 'json': | |
json_data = await file.read() | |
return json_data.decode() | |
# Fait | |
elif file_extension == 'docx': | |
doc_data = await file.read() | |
# Utilisez un flux mémoire pour passer les données au Document | |
doc_stream = BytesIO(doc_data) | |
doc = Document(doc_stream) | |
doc_text = [paragraph.text for paragraph in doc.paragraphs] | |
return '\n'.join(doc_text) | |
# Fait | |
elif file_extension == 'txt': | |
txt_data = await file.read() | |
return txt_data.decode() | |
# Fait | |
elif file_extension == 'pdf': | |
try: | |
pdf_data = await file.read() | |
# Chargez les données binaires dans un objet fitz.Document | |
pdf_document = fitz.open("pdf", pdf_data) | |
text = '' | |
# Extrait le texte de chaque page | |
for page in pdf_document: | |
text += page.get_text() | |
pdf_document.close() | |
return text | |
except Exception as e: | |
raise HTTPException(status_code=500, detail=f"Erreur de lecture du fichier PDF : {e}") | |
else: | |
return HTTPException(status_code=400, detail="Format de fichier non pris en charge") |