Scénario de test & Cas d'usage
Création d'un jeu de données 'sale' : textes vides, NULL, caractères spéciaux et textes très longs.
| 1 | |
| 2 | DATA casuser.dirty_logs; |
| 3 | LENGTH log_entry $5000; |
| 4 | /* Cas 1: Texte vide */ doc_id=1; |
| 5 | log_entry=''; |
| 6 | OUTPUT; |
| 7 | /* Cas 2: Caractères spéciaux */ doc_id=2; |
| 8 | log_entry='Erreur #@&%! system failure'; |
| 9 | OUTPUT; |
| 10 | /* Cas 3: Texte très long */ doc_id=3; |
| 11 | log_entry=repeat('Alerte ', 500); |
| 12 | OUTPUT; |
| 13 | /* Cas 4: Valeur manquante sas */ doc_id=4; |
| 14 | call missing(log_entry); |
| 15 | OUTPUT; |
| 16 | |
| 17 | RUN; |
| 18 |
| 1 | |
| 2 | PROC CAS; |
| 3 | conditionalRandomFields.crfScore / TABLE={name='dirty_logs', caslib='casuser'} model={ label={name='model_label', caslib='casuser'}, attr={name='model_attr', caslib='casuser'}, feature={name='model_feature', caslib='casuser'}, attrfeature={name='model_attrfeature', caslib='casuser'}, template={name='model_template', caslib='casuser'} } casOut={name='dirty_scored', caslib='casuser', replace=true} target='predicted_tags'; |
| 4 | |
| 5 | RUN; |
| 6 | |
| 7 | QUIT; |
| 8 |
| 1 | |
| 2 | PROC CAS; |
| 3 | TABLE.fetch / TABLE={name='dirty_scored', caslib='casuser'} where='doc_id in (1, 4)'; |
| 4 | |
| 5 | RUN; |
| 6 | |
| 7 | QUIT; |
| 8 |
L'action ne doit pas crasher (SegFault). Elle doit gérer gracieusement les chaînes vides ou NULLs (probablement en renvoyant une séquence vide ou une valeur manquante dans la colonne 'predicted_tags'). Les textes longs doivent être traités ou tronqués proprement.