Librairie doc_loader (Extraction de documents)
Ce module fournit une abstraction et des implémentations concrètes pour charger et découper des documents de différents formats en DocumentWithChunks, prêt à être injecté dans la base de données via l’API vectordb.
Installation
La librairie doc_loader fait partie du package clea-doc-loader. Elle se charge automatiquement des dépendances via votre pyproject.toml / requirements.txt.
# depuis la racine du projet
uv install .
````
---
## Structure du package
---
## 1. Interface commune
### `BaseExtractor` (`base.py`) 
```python
class BaseExtractor(ABC):
def __init__(self, file_path: str) -> None:
"""Chemin vers le fichier à traiter."""
self.file_path = Path(file_path)
@abstractmethod
def extract_one(self, *, max_length: int = 1000) -> DocumentWithChunks:
"""
Extrait l’ensemble du document en un seul objet `DocumentWithChunks`.
Args:
max_length: taille cible des chunks finaux.
Returns:
DocumentWithChunks(document: DocumentCreate, chunks: List[ChunkCreate])
"""
2. Constructeur de payloads
build_document_with_chunks(...) (base.py)
Cette fonction choisit automatiquement entre :
- Mini-document (un seul chunk si
len(full_text) ≤ max_length), - Segmentation sémantique (via NLP,
_semantic_segmentation), - Fallback (découpage fixe + overlap).
doc_with_chunks = build_document_with_chunks(
title="Rapport 2024",
theme="RSE",
document_type="PDF",
publish_date=date.today(),
max_length=1000,
full_text= "... texte complet ..."
)
# → DocumentWithChunks(document=DocumentCreate(...),
# chunks=[ChunkCreate(...), ...])
3. Sélection de l’extracteur
get_extractor(file_path: str) → BaseExtractor (extractor_factory.py)
ext = get_extractor("/chemin/vers/fichier.docx")
# ext est une instance de DocxExtractor, PdfExtractor, JsonExtractor, HtmlExtractor ou TxtExtractor.
- Lève
UnsupportedFileTypeErrorpour les extensions non listées.
4. Point d’entrée : DocsLoader
DocsLoader (docs_loader.py)
loader = DocsLoader("/chemin/fichier.txt")
doc_with_chunks = loader.extract_documents(max_length=1200)
# renvoie un DocumentWithChunks unique
extract_documents(...)délègue àextract_one()de l’extracteur choisi.
5. Exemple détaillé : TxtExtractor
TxtExtractor (txt_extractor.py)
class TxtExtractor(BaseExtractor):
def extract_one(self, max_length: int = 1000) -> DocumentWithChunks:
# 1) lit tout le fichier
# 2) détecte si c’est un JSON listé → extrait métadonnées + contenu
# 3) sinon, métadonnées par défaut (stem, "Générique", date.today())
# 4) appelle build_document_with_chunks(...)
-
Gère automatiquement :
-
Fichiers TXT « bruts »
- Fichiers TXT au format JSON
[{"title":…, "theme":…, "publish_date":…, "content":…}, …]
6. Autres extracteurs
Chaque extracteur hérite de BaseExtractor et implémente extract_one(...) de manière similaire, en utilisant :
- DocxExtractor (
.docx) → segmentation par paragraphes et métadonnées Office ﹒ - PdfExtractor (
.pdf) → lecturepypdf, segmentation stream ou adaptive ﹒ - HtmlExtractor (
.html) →BeautifulSoup,get_text(), segmentation ﹒ - JsonExtractor (
.json) → parse JSON, extraitentrieset segmente le contenu.
Vous retrouverez la logique spécifique dans data_extractor/{docx,json,html,pdf}_extractor.py.
7. Usage typique
from doc_loader.docs_loader import DocsLoader
# 1. Choix de l’extracteur et extraction
loader = DocsLoader("mon_fichier.pdf")
doc_payload = loader.extract_documents(max_length=800)
# 2. Insertion en base (via vectordb)
from vectordb.src.database import get_db, add_document_with_chunks
db = next(get_db())
result = add_document_with_chunks(db, doc_payload.document, doc_payload.chunks)
Module
doc_loaderstable – dernière mise à jour : 02 mai 2025.