Markdown Processor
Le MarkdownProcessor est une étape d’optimisation cruciale dans le pipeline. Son rôle est de filtrer le Markdown brut pour n’en conserver que les parties sémantiquement liées aux horaires d’ouverture, afin de réduire la taille et le coût des requêtes envoyées au LLM.
Fonctionnalités
Découpage du Texte : Le texte peut être découpé en chunks de taille fixe ou en phrases en utilisant le sentencizer de NLTK, selon la configuration.
Filtrage Sémantique par Embeddings : Le processeur utilise des modèles d’embeddings (locaux ou via une API comme Mistral/OpenAI) pour convertir des phrases de référence (ex: « nos horaires ») et les segments du texte en vecteurs numériques.
Calcul de Similarité : Il calcule la similarité cosinus entre les vecteurs de référence et ceux du texte pour identifier les segments les plus pertinents.
Sélection de Contenu : Les segments de texte (chunks ou phrases) dont la similarité dépasse un seuil configurable sont conservés. Les segments adjacents (définis par la fenêtre de contexte) sont également inclus pour préserver le sens.
Mise à Jour de la Base de Données : Le contenu filtré et réduit est sauvegardé dans la colonne
markdown_filtrede la base de données via le DatabaseProcessor.Suivi des Émissions CO2 : Il enregistre et accumule les émissions de CO2 estimées lors des appels aux APIs d’embeddings.
Usage
Ce processeur s’exécute après la récupération des URLs. Il prend en entrée le markdown_nettoye, le filtre, et produit le markdown_filtre qui sera utilisé par le LLMProcessor suivant.
Modules
- class src.smart_watch.processing.markdown_processor.MarkdownProcessor(config_manager: ConfigManager, logger_instance: SmartWatchLogger)[source]
Bases :
objectClasse pour traiter et filtrer le contenu Markdown en se basant sur la pertinence sémantique.
Cette classe utilise des embeddings pour identifier et extraire les sections d’un document Markdown qui sont les plus pertinentes par rapport à un ensemble de phrases de référence.
- __init__(config_manager: ConfigManager, logger_instance: SmartWatchLogger)[source]
Initialise le processeur de markdown.
- Paramètres:
config_manager (ConfigManager) – Le gestionnaire de configuration global.
logger_instance (SmartWatchLogger) – L’instance de logger à utiliser.
- _get_embeddings(texts: List[str]) Tuple[ndarray | None, float][source]
Génère les embeddings pour une liste de textes.
- Paramètres:
texts (List[str]) – la liste des textes à encoder.
- Renvoie:
- un tuple contenant les embeddings sous forme de tableau NumPy
et les émissions de CO2 estimées.
- Type renvoyé:
Tuple[Optional[np.ndarray], float]
- Lève:
ValueError – si aucun client d’embedding n’est initialisé.
- _calculate_reference_embeddings() None[source]
Calcule et met en cache les embeddings pour les phrases de référence définies dans la configuration.
- Lève:
ValueError – si aucune phrase de référence n’est configurée.
- process_markdown_filtering(db_processor: DatabaseProcessor, execution_id: int) None[source]
Filtre le contenu markdown pour tous les résultats d’une exécution donnée.
- Paramètres:
db_processor (DatabaseProcessor) – l’instance du processeur de base de données.
execution_id (int) – l’ID de l’exécution à traiter.
- filter_markdown(markdown_content: str, counter: Tuple[int, int] | None = None) Tuple[str, float][source]
Filtre un contenu Markdown pour n’en conserver que les sections sémantiquement pertinentes.
- _classify_line(line: str) str[source]
Classifie une ligne de texte en catégories structurelles (paragraphe, tabulaire, etc.).
- _identify_logical_blocks(lines: List[str]) List[Dict[str, Any]][source]
Segmente une liste de lignes en blocs logiques (paragraphes, tableaux, etc.).
- _chunk_blocks(blocks: List[Dict[str, Any]]) List[Dict[str, Any]][source]
Regroupe les blocs logiques en “chunks” de taille définie pour l’analyse sémantique.
- _filter_chunks(chunks: List[Dict[str, Any]]) Tuple[List[Dict[str, Any]], float][source]
Filtre les chunks en fonction de leur similarité sémantique avec les phrases de référence.