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
| Pattern | Exemple | Origine | Destination |
|---|---|---|---|
de X à Y | "de Paris à Lyon" | Paris | Lyon |
depuis X vers Y | "depuis Marseille vers Nice" | Marseille | Nice |
partir de X pour Y | "partir de Bordeaux pour Toulouse" | Bordeaux | Toulouse |
aller à Y | "aller à Strasbourg" | — | Strasbourg |
X - Y | "Paris - Bordeaux" | Paris | Bordeaux |
Configuration
name: spacy
model_name: fr_core_news_md
use_gpu: false
confidence_threshold: 0.5model_namestringModèle spaCy à utiliser. Options : fr_core_news_sm, fr_core_news_md, fr_core_news_lg.
confidence_thresholdfloatSeuil minimum de confiance pour valider l'extraction. Entre 0 et 1.
Utilisation
Via la CLI
python3 -m src.cli.nlp \
--text "Je voudrais aller de Paris à Marseille" \
--model spacyVia 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) # TrueExemple de sortie
{
"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"
}