Bienvenue sur CFTPfr.fr › Forums › bibliotheque_documentation.py — recherche et nettoyage de notices
- Ce sujet est vide.
-
AuteurMessages
-
03.08.2026 à 10h57 #287
Mario Da Conceicao
Maître des clésNouveau composant du 01/08/2026 — "bibliothèque de documentation". Exemple d’usage : tu mentionnes un variateur avec son modèle précis, MIRA cherche la doc officielle, puis soit propose un lien, soit la télécharge et ne garde que les pages utiles (elle jette les pages de couverture, mentions légales, pubs, index…). S’appuie sur mode_reseau.py (le "2e cerveau") et alimente gestionnaire_specialites.py — toujours en attente de ta validation avant d’être active.
Principe
- Recherche la documentation d’un produit/modèle précis (via le réseau, si disponible)
- Décide : proposer un simple lien si le document est trouvé en ligne facilement, ou le télécharger si un accès hors-ligne durable est préférable
- Si téléchargement : nettoie le contenu en ne gardant que les passages réellement utiles (filtre les pages de couverture, mentions légales, publicités, sommaires vides…)
- Prépare tout ça comme une nouvelle spécialité — jamais active sans ta validation, comme toujours
import re from pathlib import Path from datetime import datetime from gestionnaire_specialites import GestionnaireSpecialites, valider_nom_specialite from mode_reseau import ModeReseau class BibliothequeDocumentation: """ Recherche, télécharge (si besoin) et nettoie la documentation d'un produit précis (ex: un variateur, un modèle exact), pour en faire une nouvelle spécialité candidate. Ne fait jamais rien d'actif sans validation — s'appuie sur le garde-fou déjà en place. """ def __init__(self): self.reseau = ModeReseau() self.specialites = GestionnaireSpecialites() def rechercher_documentation(self, produit, modele, moteur_recherche=None): """ Cherche la documentation officielle d'un produit/modèle précis. moteur_recherche : fonction injectée (requête → liste de résultats), à brancher une fois une vraie source de recherche choisie. Permet de tester le reste du système sans dépendre d'un service précis. """ if not self.reseau.disponible(): return {"statut": "hors_ligne", "message": "Pas de connexion — recherche impossible pour le moment."} if moteur_recherche is None: return {"statut": "a_implementer", "message": "Aucune source de recherche branchée pour l'instant."} requete = f"{produit} {modele} documentation manuel PDF" resultats = moteur_recherche(requete) return {"statut": "resultats", "resultats": resultats} def _nettoyer_texte(self, texte_brut, mots_cles): """ Filtre grossièrement le contenu utile : découpe en blocs (par double saut de ligne, comme une page/section), écarte les blocs trop courts (souvent des pages de garde, sommaires vides, mentions légales) ou qui ne contiennent aucun mot-clé du produit recherché. """ blocs = [b.strip() for b in texte_brut.split("\n\n") if b.strip()] blocs_utiles = [] for bloc in blocs: if len(bloc) < 100: continue # trop court pour être un vrai contenu utile bloc_normalise = bloc.lower() if any(mot.lower() in bloc_normalise for mot in mots_cles): blocs_utiles.append(bloc) return "\n\n".join(blocs_utiles) if blocs_utiles else texte_brut def preparer_specialite_produit(self, produit, modele, texte_documentation, lien_source=None): """ Prépare une nouvelle spécialité à partir d'une documentation trouvée (nettoyée si c'est un téléchargement). Passe toujours par le garde-fou existant : rien n'est actif tant que ce n'est pas validé. """ try: nom = valider_nom_specialite(f"{produit}-{modele}") except ValueError as e: return f"Refusé : {e}" texte_nettoye = self._nettoyer_texte(texte_documentation, [produit, modele]) description = f"Documentation de {produit} (modèle {modele})" if lien_source: description += f" — source : {lien_source}" resultat = self.specialites.proposer_nouvelle_specialite( nom=nom, description=description, documents_sources=[lien_source] if lien_source else [] ) # Écrit le contenu nettoyé dans le dossier de la proposition dossier = Path(self.specialites.__class__.__module__).resolve().parent / "telechargements" / nom dossier_documents = dossier / "documents" dossier_documents.mkdir(parents=True, exist_ok=True) (dossier_documents / "notice.txt").write_text(texte_nettoye, encoding="utf-8") return resultatCe que ça permet concrètement, avec ton exemple
Tu dis "j’ai un variateur, modèle XYZ-123". MIRA cherche, trouve la doc, la nettoie (garde les pages avec du vrai contenu technique sur ce modèle, jette le reste), et te dit : "J’ai préparé une spécialité ‘variateur-xyz-123’, prête à valider." Rien n’est utilisable tant que tu n’as pas dit oui.
Ce qui reste à faire
Choisir la source de recherche réelle (même chantier que pour
mode_reseau.py) — les deux se brancheront ensemble une fois décidé. -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.