textRuleScore applyConcept

Gestion des Cas Limites dans les Descriptions de Produits E-commerce

Scénario de test & Cas d'usage

Contexte Métier

Un site de e-commerce veut extraire automatiquement des attributs (marque, produit, couleur) à partir de descriptions textuelles fournies par différents vendeurs. Les données sont hétérogènes, contiennent des concepts qui se chevauchent et des valeurs manquantes. Il faut tester la robustesse de l'extraction.
À propos du Set : textRuleScore

Scoring de documents textuels basé sur des règles.

Découvrir toutes les actions de textRuleScore
Préparation des Données

Création d'une table de descriptions de produits avec des cas complexes : texte manquant, concepts imbriqués ('iPhone' vs 'iPhone Pro'), et concepts génériques à ignorer ('produit').

Copié !
1DATA casuser.descriptions_produits;
2 INFILE DATALINES delimiter='|';
3 LENGTH id_prod $10 description $500;
4 INPUT id_prod$ description$;
5 DATALINES;
6PROD01|Le nouvel iPhone Pro est disponible en noir sidéral. Un produit exceptionnel.
7PROD02|Samsung Galaxy S22, couleur blanc fantôme.
8PROD03|
9PROD04|iPhone 14 standard. Le meilleur produit Apple.
10;
11RUN;
12 
13DATA casuser.ecommerce_liti_model;
14 LENGTH model $200;
15 INFILE DATALINES;
16 INPUT model$;
17 DATALINES;
18CONCEPT:PRODUIT_GEN:(OR, "produit")
19CONCEPT:MARQUE:(OR, "Apple", "Samsung")
20CONCEPT:IPHONE:(OR, "iPhone", "iPhone 14")
21CONCEPT:IPHONE_PRO:(OR, "iPhone Pro")
22CONCEPT:COULEUR:(OR, "noir sidéral", "blanc fantôme")
23;
24RUN;

Étapes de réalisation

1
Test avec matchType='ALL' (défaut). On s'attend à des correspondances multiples et imbriquées (ex: 'iPhone' et 'iPhone Pro' pour PROD01).
Copié !
1PROC CAS;
2 textRuleScore.applyConcept /
3 TABLE={caslib='casuser', name='descriptions_produits'},
4 docId='id_prod',
5 text='description',
6 model={caslib='casuser', name='ecommerce_liti_model'},
7 matchType='ALL',
8 casOut={caslib='casuser', name='ecommerce_matches_all', replace=true};
9RUN;
2
Test avec matchType='LONGEST'. On s'attend à ce que seule la correspondance la plus longue soit gardée (ex: 'iPhone Pro' et non 'iPhone' pour PROD01).
Copié !
1PROC CAS;
2 textRuleScore.applyConcept /
3 TABLE={caslib='casuser', name='descriptions_produits'},
4 docId='id_prod',
5 text='description',
6 model={caslib='casuser', name='ecommerce_liti_model'},
7 matchType='LONGEST',
8 casOut={caslib='casuser', name='ecommerce_matches_longest', replace=true};
9RUN;
3
Test final avec matchType='LONGEST' et en excluant les concepts génériques non pertinents avec 'dropConcepts'.
Copié !
1PROC CAS;
2 textRuleScore.applyConcept /
3 TABLE={caslib='casuser', name='descriptions_produits'},
4 docId='id_prod',
5 text='description',
6 model={caslib='casuser', name='ecommerce_liti_model'},
7 matchType='LONGEST',
8 dropConcepts={'PRODUIT_GEN'},
9 casOut={caslib='casuser', name='ecommerce_matches_final', replace=true};
10RUN;

Résultat Attendu


La table finale 'ecommerce_matches_final' doit contenir les attributs les plus spécifiques et pertinents, sans le bruit des concepts génériques. Pour PROD01, on doit trouver 'IPHONE_PRO' et 'COULEUR'. Pour PROD03 (description vide), aucune correspondance ne doit être trouvée, montrant que l'action gère correctement les valeurs nulles. Ce test valide la capacité à affiner l'extraction en conditions réelles.