DocsPipelineNLP (spaCy)

Natural Language Processing

Module d'analyse du langage naturel utilisant spaCy pour extraire l'origine et la destination des requêtes de voyage.

Comment ça fonctionne ?

Le module NLP analyse le texte transcrit pour identifier les entités géographiques (villes, gares) et déterminer leur rôle dans la requête (origine ou destination). Il combine plusieurs techniques pour une extraction robuste.

1. Reconnaissance d'entités (NER)

spaCy identifie les entités de type LOC (locations) dans le texte. Ces entités correspondent généralement aux noms de villes ou de gares.

2. Patterns regex

Des expressions régulières identifient les structures syntaxiques comme "de X à Y", "depuis X vers Y", "partir de X pour Y", etc.

3. Résolution contextuelle

Les entités sont associées à leur rôle (origine/destination) en fonction de leur position relative aux mots-clés identifiés par les patterns.

Patterns d'extraction

PatternExempleOrigineDestination
de X à Y"de Paris à Lyon"ParisLyon
depuis X vers Y"depuis Marseille vers Nice"MarseilleNice
partir de X pour Y"partir de Bordeaux pour Toulouse"BordeauxToulouse
aller à Y"aller à Strasbourg"Strasbourg
X - Y"Paris - Bordeaux"ParisBordeaux

Configuration

configs/nlp/spacy_base.yaml
name: spacy
model_name: fr_core_news_md
use_gpu: false
confidence_threshold: 0.5
model_namestring

Modèle spaCy à utiliser. Options : fr_core_news_sm, fr_core_news_md, fr_core_news_lg.

confidence_thresholdfloat

Seuil minimum de confiance pour valider l'extraction. Entre 0 et 1.

Utilisation

Via la CLI

Terminal
python3 -m src.cli.nlp \
  --text "Je voudrais aller de Paris à Marseille" \
  --model spacy

Via Python

Python
from src.nlp.models.spacy_fr import SpacyNLP

# Initialiser le modèle
nlp = SpacyNLP(model_name="fr_core_news_md")

# Analyser un texte
result = nlp.extract_route("Je veux aller de Lyon à Nice")

print(result.origin)      # "Lyon"
print(result.destination) # "Nice"
print(result.confidence)  # 0.85
print(result.is_valid)    # True

Exemple de sortie

Résultat JSON
{
  "origin": "Lyon",
  "destination": "Nice",
  "is_valid": true,
  "confidence": 0.85,
  "entities": [
    { "text": "Lyon", "label": "LOC", "start": 21, "end": 25 },
    { "text": "Nice", "label": "LOC", "start": 28, "end": 32 }
  ],
  "method": "pattern_de_a"
}

Modèles disponibles

spaCyrecommandé
Rapide et précis
Transformers (finetuné)
Plus précis, plus lent
Regex avancé
Léger, moins flexible