Spaces:
Sleeping
Sleeping
File size: 1,877 Bytes
df99d65 |
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 |
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") |