Code Normalisation (ontologie)

Voici une normalisation (ontologie) prête à l’emploi pour convertir une détection “brute” (image + texte/OCR + mots-clés) en triplet structuré category / brand / model — ex. category=pv_inverter; brand=Growatt; model=SPF 5000 ES.

1) Ontologie minimale (schéma)

  • category (obligatoire) : vocabulaire contrôlé
    • pv_panel, pv_inverter, pv_hybrid_inverter, pv_charge_controller, battery_module, bms, pv_connector, combiner_box, string_monitor, mounting_rail, etc.
  • brand (optionnel mais recommandé) : normalisé (casefold + accents retirés), ex. Growatt, Victron, Huawei, SMA, GoodWe, Sungrow, Jinko, BYD, Pylontech.
  • model (optionnel mais recommandé) : forme canonique, ex. SPF 5000 ES (accepte variantes SPF5000ES, SPF-5000-ES).
  • Attributs complémentaires (si disponibles) :
    series (ex. SPF), rated_power_kw, dc_voltage_v, phase (1p/3p), hybrid=true/false, mppt_count, battery_voltage_v, grid_tie=true/false.

2) Dictionnaires & alias (multilingue)

  • Synonymes (catégories)
    • pv_inverter ← { onduleur, inverter, convertisseur, onduleur réseau, grid-tie }
    • pv_hybrid_inverter ← { onduleur hybride, hybrid inverter, onduleur/chargeur }
    • pv_charge_controller ← { régulateur, MPPT, PWM }
    • pv_connector ← { MC4, connecteur PV, fiche PV }
  • Alias marques (normalisation)
    • growatt, Growatt New Energy → Growatt
    • victron energy, victron → Victron
    • huawei fusionsolar, huawei → Huawei
  • Stopwords & patterns : retirer ™, ®, CE, RoHS, marketing fluff (ex. “High Efficiency”).

3) Pipeline d’extraction → normalisation

  1. Détection & OCR (vision) → texte brut + labels objets.
  2. Langue (FR/MG/EN) → normaliser en minuscules, enlever accents.
  3. Marque : NER + lookup brand_dict.
  4. Catégorie : règles mots-clés + co-occurrences (ex. “onduleur + PV + kW” → pv_inverter).
  5. Modèle : regex séries + chiffres/lettres (voir §4).
  6. Attributs : extraire puissances (kW, W), tensions (V), hybrid/grid-tie, MPPT.
  7. Canonisation :
    • brand_canon = "Growatt"
    • model_canon = "SPF 5000 ES" (espaces normalisés)
    • category = "pv_inverter" ou "pv_hybrid_inverter" si “hybrid/ESS/battery”.
  8. Validation : règles métier (ex. si SPF → hybride + battery_voltage_v=48).
  9. Enrichissement : calcul d’un product_code stable (ex. growatt_spf_5000_es).
  10. Mapping vers slide_ref (table RAG↔slides).

4) Règles & regex (exemples concrets)

Détection Growatt SPF

  • Marque : \b(growatt)\b
  • Série SPF : \bspf[-\s]?(\d{3,5})(\s?es)?\b
    • Capture (\d{3,5}) → rated_power_w (5000 → 5 kW)
    • Suffixe ES → série hybride/off-grid chez Growatt
  • Hybride si présence de {hybrid, ess, battery, off-grid, chargeur}

Normalisation modèle

  • Entrée : SPF5000ES, SPF-5000 ES, spf 5000 es → Sortie : SPF 5000 ES

Extraction attributs

  • Puissance : (\d+(?:[.,]\d+)?)\s?(kW|W) → rated_power_kw
  • Tension batterie : (12|24|48)\s?V après mots batt|battery.

5) Exemple de décision (Growatt SPF 5000 ES)

  • OCR trouvés : “GROWATT”, “SPF5000ES”, “Hybrid Inverter”, “48V”, “MPPT x2”
  • Règles →
    • brand = Growatt
    • category = pv_hybrid_inverter (car “Hybrid/48V/ESS”)
    • model = SPF 5000 ES
    • rated_power_kw ≈ 5.0, battery_voltage_v=48, mppt_count=2
  • Canonical JSON

{ "category": "pv_hybrid_inverter", "brand": "Growatt", "model": "SPF 5000 ES", "series": "SPF", "rated_power_kw": 5.0, "battery_voltage_v": 48, "hybrid": true, "product_code": "growatt_spf_5000_es", "confidence": 0.92 }

6) Table de mapping (extraits)

product_codeslide_refrègle
growatt_spf_5000_esVENDOR-GROWATT-SPF5000-01Guide d’installation Growatt SPF 5000 ES
spf (série)HYBRID-INVERTER-GENERAL-01Bonnes pratiques onduleurs hybrides
pv_inverter & brand=GrowattPV-INVERTER-SAFETY-01Sécurité onduleurs (toutes marques)
pv_connector & mc4PV-SAFETY-MC4-02Connecteurs MC4 – surchauffe & sertissage

Priorité : product_code exact > série > catégorie+marque > catégorie.

7) Règles de qualité & conflits

  • Si marque détectée ≠ logo visible → baisser confidence.
  • Si puissance incohérente (ex. 50 kW pour SPF) → exiger confirmation utilisateur.
  • Si plusieurs modèles matchent, renvoyer top-2 + question (“SPF 5000 ES ou SPF 6000 ES ?”).

8) Exposition API (sortie normalisée → mapping)

{ "input": {"ocr": "GROWATT SPF5000ES HYBRID 48V", "lang": "fr"}, "normalized": { "category": "pv_hybrid_inverter", "brand": "Growatt", "model": "SPF 5000 ES", "product_code": "growatt_spf_5000_es", "confidence": 0.92 }, "slide": { "slide_ref": "VENDOR-GROWATT-SPF5000-01", "url": "https://learn.ex.com/fr/slides/growatt-spf5000-01?slide=1234" } }

9) Listes de démarrage (à enrichir)

  • Catégories clés : pv_panel, pv_inverter, pv_hybrid_inverter, pv_charge_controller, battery_module, bms, pv_connector, combiner_box, dc_breaker, ac_breaker, surge_protector, mounting_rail.
  • Marques fréquentes : Growatt, Victron, SMA, Huawei, GoodWe, Fronius, Sungrow, Solis, Jinko, Longi, Trina, BYD, Pylontech, Dyness, Freedom Won.

Fichier CSV d’ontologie (catégories, alias FR/MG/EN, marques, regex modèles) et des regex prêtes à tester dans votre pipeline.

Les grandes histoires ont une personnalité. Envisagez de raconter une belle histoire qui donne de la personnalité. Écrire une histoire avec de la personnalité pour des clients potentiels aidera à établir un lien relationnel. Cela se traduit par de petites spécificités comme le choix des mots ou des phrases. Écrivez de votre point de vue, pas de l'expérience de quelqu'un d'autre.

Les grandes histoires sont pour tout le monde, même lorsqu'elles ne sont écrites que pour une seule personne. Si vous essayez d'écrire en pensant à un public large et général, votre histoire sonnera fausse et manquera d'émotion. Personne ne sera intéressé. Ecrire pour une personne en particulier signifie que si c'est authentique pour l'un, c'est authentique pour le reste.