textRuleScore applyConcept

Gestión de Conflictos de Coincidencia y Exclusión de Conceptos en Datos Mixtos

Scénario de test & Cas d'usage

Contexto empresarial

Una empresa de software analiza comentarios de un foro técnico. Los comentarios contienen jerga, nombres de productos anidados (ej. 'SAS Viya' vs 'SAS') y conceptos genéricos que necesitan ser filtrados. El objetivo es probar cómo la acción resuelve ambigüedades y permite refinar los resultados.
Sobre el conjunto : textRuleScore

Puntuación de documentos de texto basada en reglas.

Descubrir todas las acciones de textRuleScore
Preparación de datos

Crea una tabla con comentarios técnicos que incluyen conceptos anidados, conceptos genéricos y algunos registros con texto faltante.

¡Copiado!
1DATA mycas.tech_feedback;
2 INFILE DATALINES delimiter='|';
3 LENGTH feedback_id $10 comment_text $300;
4 INPUT feedback_id $ comment_text $;
5 DATALINES;
6FDBK1|El motor de SAS Viya es impresionante. SAS ha hecho un gran trabajo.
7FDBK2|Me gustaría un tutorial sobre el producto Viya.
8FDBK3|
9FDBK4|La empresa Acme Corporation usa SAS para sus análisis.
10FDBK5|SAS es una herramienta potente.
11;
12RUN;

Étapes de réalisation

1
Compilar un modelo LITI con reglas para conceptos anidados ('SAS Viya', 'Viya') y genéricos ('SAS', 'empresa').
¡Copiado!
1PROC CAS;
2 textRuleDevelop.compileConcept
3 config='
4 CONCEPT: PRODUCTO_COMPLETO (RULE:"SAS Viya")
5 CONCEPT: PRODUCTO_CORTO (RULE:"Viya")
6 CONCEPT: ORGANIZACION (RULE:(OR, "SAS", "Acme Corporation"))
7 CONCEPT: CONCEPTO_GENERICO (RULE:"empresa")
8 '
9 casOut={caslib="casuser", name="tech_liti_model", replace=true};
10RUN;
2
Ejecutar con matchType='LONGEST' para resolver la ambigüedad entre 'SAS Viya' y 'SAS'. Se espera que priorice 'SAS Viya'.
¡Copiado!
1PROC CAS;
2 textRuleScore.applyConcept
3 docId="feedback_id"
4 text="comment_text"
5 TABLE={caslib="casuser", name="tech_feedback"}
6 model={caslib="casuser", name="tech_liti_model"}
7 matchType="LONGEST"
8 casOut={caslib="casuser", name="tech_concepts_longest", replace=true};
9RUN;
3
Ejecutar con matchType='ALL' para capturar todas las coincidencias posibles, incluyendo las anidadas.
¡Copiado!
1PROC CAS;
2 textRuleScore.applyConcept
3 docId="feedback_id"
4 text="comment_text"
5 TABLE={caslib="casuser", name="tech_feedback"}
6 model={caslib="casuser", name="tech_liti_model"}
7 matchType="ALL"
8 casOut={caslib="casuser", name="tech_concepts_all", replace=true};
9RUN;
4
Ejecutar de nuevo, pero esta vez excluyendo el concepto genérico 'ORGANIZACION' de los resultados usando 'dropConcepts'.
¡Copiado!
1PROC CAS;
2 textRuleScore.applyConcept
3 docId="feedback_id"
4 text="comment_text"
5 TABLE={caslib="casuser", name="tech_feedback"}
6 model={caslib="casuser", name="tech_liti_model"}
7 matchType="ALL"
8 dropConcepts={"ORGANIZACION"}
9 casOut={caslib="casuser", name="tech_concepts_dropped", replace=true};
10RUN;

Resultado esperado


1. La tabla 'tech_concepts_longest' debe identificar 'SAS Viya' como 'PRODUCTO_COMPLETO' en FDBK1, y no 'SAS' como 'ORGANIZACION' en esa misma frase. 2. La tabla 'tech_concepts_all' debe identificar tanto 'SAS Viya' (PRODUCTO_COMPLETO) como 'SAS' (ORGANIZACION) en FDBK1. 3. La tabla 'tech_concepts_dropped' debe contener los mismos resultados que 'tech_concepts_all', pero sin ninguna coincidencia para el concepto 'ORGANIZACION'. 4. El registro FDBK3 (con texto vacío) no debe generar ningún error y simplemente no producirá resultados.