textRuleScore

applyCategory

##set_textrulescore

Description

Catégorise le texte à l'aide d'un modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). de catégories (fichier MCOFormat binaire compact utilisé par SAS Viya pour stocker des modèles analytiques (comme les réseaux de neurones) après entraînement, permettant leur déploiement et leur exécution rapide via CAS.). Cette action applique des règles linguistiques pour classer les documents dans une ou plusieurs catégories prédéfinies selon le fourni. C'est un peu le Choixpeau magique de Poudlard, mais optimisé pour vos données textuelles SAS !

Syntaxe Officielle
textRuleScore.applyCategory <result=results> <status=rc> /
casOut={casouttable},
docId="string",
docType="TEXT" | "XML",
groupedMatchOut={casouttable},
matchDelimiter="string",
matchOut={casouttable},
model={castable}, /* Requis */
modelOut={casouttable},
scoringAlgorithm="FREQUENCY" | "WEIGHTED",
table={castable},
text="string";

Paramètres Clés

Nom du paramètre Description
casOut Spécifie le nom de la table de données de sortie contenant les catégories affectées.
docId Spécifie le nom d'une variable d'identification unique dans la table d'entrée pour référencer chaque ligne. Peut être un caractère ou un numérique.
docType Spécifie le format du document à analyser, par exemple TEXT (par défaut) ou XML.
groupedMatchOut Spécifie la table de sortie optionnelle qui regroupe les correspondances par catégorie pour chaque document.
matchDelimiter Spécifie le délimiteur (32 caractères maximum) à utiliser pour séparer chaque instance de texte correspondante dans la table (par défaut '|').
matchOut Spécifie le nom de la table contenant les termes correspondants extraits (une correspondance par ligne).
model Paramètre requis. Spécifie la table CAS d'entrée qui contient le modèle de catégorisation préalablement compilé.
modelOut Spécifie le nom de la table de sortie pour exporter le modèle de catégories (utile si vous mettez à jour un modèle).
scoringAlgorithm Spécifie l'algorithme de calcul des scores : 'FREQUENCY' (par défaut) ou 'WEIGHTED'.
table Spécifie la table de données d'entrée contenant les documents textuels à catégoriser.
text Spécifie le nom de la variable textuelle dans la table d'entrée sur laquelle le modèle doit être appliqué.

Préparation des données

Création des données pour la catégorisation

Génération d'une table contenant quelques phrases de test. On suppose ici qu'un modèle de catégorie a déjà été généré en amont par l'action `compileCategory` (la magie de l'ellipse !).

1PROC CAS;
2 SESSION casauto;
3 TABLE.readRoutine /
4 TABLE="documents",
5 casOut={name="documents", replace=true},
6 columns={{name="docId", type="varchar"}, {name="texte_document", type="varchar"}},
7 DATA="
8 '1', 'Le service client a été extrêmement rapide et très courtois.'
9 '2', 'Ce produit est défectueux, je suis en colère et je veux un remboursement.'
10 '3', 'Livraison en retard, mais le produit reste correct.'
11 ";
12QUIT;

Exemples d'utilisation

Catégorisation basique de documents

Application du modèle sur la table `documents`. La sortie sera stockée dans la table de résultat identifiée par %%casOut%%.

1PROC CAS;
2 textRuleScore.applyCategory /
3 model={name="mon_modele_categorie"}
4 TABLE={name="documents"}
5 docId="docId"
6 text="texte_document"
7 casOut={name="categories_out", replace=true};
8QUIT;
9PROC PRINT DATA=mycas.categories_out; RUN;
Résultat Attendu :
Génère une table `categories_out` en mémoire, listant les catégories identifiées (et le score) pour chaque `docId` en fonction des règles linguistiques du modèle appliqué.
Catégorisation détaillée avec extraction des correspondances (matches)

Utilisation avancée pour obtenir le détail des mots exacts qui ont déclenché les règles. On extrait les données brutes via %%matchOut%% et les données groupées via %%groupedMatchOut%%. Les correspondances sont séparées par une virgule grâce au paramètre %%matchDelimiter%%. On utilise également un score pondéré avec %%scoringAlgorithm%%.

1PROC CAS;
2 textRuleScore.applyCategory /
3 model={name="mon_modele_categorie"}
4 TABLE={name="documents"}
5 docId="docId"
6 text="texte_document"
7 docType="TEXT"
8 scoringAlgorithm="WEIGHTED"
9 matchDelimiter=","
10 casOut={name="categories_out", replace=true}
11 matchOut={name="matches_out", replace=true}
12 groupedMatchOut={name="grouped_matches_out", replace=true};
13QUIT;
Résultat Attendu :
Crée trois tables : `categories_out` pour les résultats globaux par document, `matches_out` détaillant chaque terme exact détecté (une ligne par occurence), et `grouped_matches_out` concaténant ces termes par document et par catégorie, le tout séparé par des virgules.