textRuleScore

applyConcept

Descripción

Realiza la extracción de conceptos utilizando un modelo de extracción de conceptos (archivo LITI). Esta acción, parte del conjunto de acciones 'Text Analytics Rule Score', aplica un modelo de concepto LITI compilado a una tabla CAS de entrada para identificar y extraer conceptos definidos en el modelo. Es fundamental para el análisis de texto no estructurado, permitiendo la identificación de entidades, temas o cualquier patrón textual predefinido.

textRuleScore.applyConcept { casOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1" <, "variable-name-2", ...>}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR"|"INHERIT"|"STANDARD", name="table-name", promote=TRUE|FALSE, replace=TRUE|FALSE, replication=integer, tableRedistUpPolicy="DEFER"|"NOREDIST"|"REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1" <, "string-2", ...>}}, docId="string", dropConcepts={"string-1" <, "string-2", ...>}, factOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1" <, "variable-name-2", ...>}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR"|"INHERIT"|"STANDARD", name="table-name", promote=TRUE|FALSE, replace=TRUE|FALSE, replication=integer, tableRedistUpPolicy="DEFER"|"NOREDIST"|"REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1" <, "string-2", ...>}}, language="string", litiChunkSize="string", matchType="ALL"|"BEST"|"LONGEST", model={caslib="string", computedOnDemand=TRUE|FALSE, computedVars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, computedVarsProgram="string", dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>}, groupBy={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, groupByMode="NOSORT"|"REDISTRIBUTE", importOptions={fileType="ANY"|"AUDIO"|"AUTO"|"BASESAS"|"CSV"|"DELIMITED"|"DOCUMENT"|"DTA"|"ESP"|"EXCEL"|"FMT"|"HDAT"|"IMAGE"|"JMP"|"LASR"|"PARQUET"|"SOUND"|"SPSS"|"VIDEO"|"XLS", fileType-specific-parameters}, name="table-name", orderBy={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, singlePass=TRUE|FALSE, vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, where="where-expression", whereTable={casLib="string", dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | greenplum-parameters | hadoop-parameters | hana-parameters | hdfs-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | netezza-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, importOptions={fileType="ANY"|"AUDIO"|"AUTO"|"BASESAS"|"CSV"|"DELIMITED"|"DOCUMENT"|"DTA"|"ESP"|"EXCEL"|"FMT"|"HDAT"|"IMAGE"|"JMP"|"LASR"|"PARQUET"|"SOUND"|"SPSS"|"VIDEO"|"XLS", fileType-specific-parameters}, name="table-name", vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, where="where-expression"}}, parseTableIn={caslib="string", computedOnDemand=TRUE|FALSE, computedVars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, computedVarsProgram="string", dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>}, groupBy={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, groupByMode="NOSORT"|"REDISTRIBUTE", importOptions={fileType="ANY"|"AUDIO"|"AUTO"|"BASESAS"|"CSV"|"DELIMITED"|"DOCUMENT"|"DTA"|"ESP"|"EXCEL"|"FMT"|"HDAT"|"IMAGE"|"JMP"|"LASR"|"PARQUET"|"SOUND"|"SPSS"|"VIDEO"|"XLS", fileType-specific-parameters}, name="table-name", orderBy={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, singlePass=TRUE|FALSE, vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, where="where-expression", whereTable={casLib="string", dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | greenplum-parameters | hadoop-parameters | hana-parameters | hdfs-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | netezza-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, importOptions={fileType="ANY"|"AUDIO"|"AUTO"|"BASESAS"|"CSV"|"DELIMITED"|"DOCUMENT"|"DTA"|"ESP"|"EXCEL"|"FMT"|"HDAT"|"IMAGE"|"JMP"|"LASR"|"PARQUET"|"SOUND"|"SPSS"|"VIDEO"|"XLS", fileType-specific-parameters}, name="table-name", vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, where="where-expression"}}, parseTableOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1" <, "variable-name-2", ...>}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR"|"INHERIT"|"STANDARD", name="table-name", promote=TRUE|FALSE, replace=TRUE|FALSE, replication=integer, tableRedistUpPolicy="DEFER"|"NOREDIST"|"REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1" <, "string-2", ...>}}, ruleMatchOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1" <, "variable-name-2", ...>}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR"|"INHERIT"|"STANDARD", name="table-name", promote=TRUE|FALSE, replace=TRUE|FALSE, replication=integer, tableRedistUpPolicy="DEFER"|"NOREDIST"|"REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1" <, "string-2", ...>}}, table={caslib="string", computedOnDemand=TRUE|FALSE, computedVars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, computedVarsProgram="string", dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>}, groupBy={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, groupByMode="NOSORT"|"REDISTRIBUTE", importOptions={fileType="ANY"|"AUDIO"|"AUTO"|"BASESAS"|"CSV"|"DELIMITED"|"DOCUMENT"|"DTA"|"ESP"|"EXCEL"|"FMT"|"HDAT"|"IMAGE"|"JMP"|"LASR"|"PARQUET"|"SOUND"|"SPSS"|"VIDEO"|"XLS", fileType-specific-parameters}, name="table-name", orderBy={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, singlePass=TRUE|FALSE, vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, where="where-expression", whereTable={casLib="string", dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | greenplum-parameters | hadoop-parameters | hana-parameters | hdfs-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | netezza-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, importOptions={fileType="ANY"|"AUDIO"|"AUTO"|"BASESAS"|"CSV"|"DELIMITED"|"DOCUMENT"|"DTA"|"ESP"|"EXCEL"|"FMT"|"HDAT"|"IMAGE"|"JMP"|"LASR"|"PARQUET"|"SOUND"|"SPSS"|"VIDEO"|"XLS", fileType-specific-parameters}, name="table-name", vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, where="where-expression"}}, text="string" };
Parámetros
ParámetroDescripción
casOutEspecifica la tabla CAS de salida que contiene la información de los resultados de las coincidencias de conceptos.
docIdEspecifica el nombre de la variable de la tabla CAS que contiene los ID de los documentos.
dropConceptsEspecifica una lista de conceptos primarios para omitir de las tablas CAS de salida. Si una cadena coincide con el nombre de un concepto de salida, los resultados para ese concepto se eliminan de la salida. Esto es útil para limitar el número de conceptos predefinidos incluidos en la salida, manteniéndolos en el modelo para posibles dependencias.
factOutEspecifica la tabla CAS de salida que contiene la información de las coincidencias de hechos (facts).
languageEspecifica el idioma utilizado en la tabla de entrada. El valor predeterminado es 'ENGLISH'.
litiChunkSizeEspecifica el tamaño de los fragmentos (chunks) utilizados al procesar un documento. El valor predeterminado es 32K. Un valor de 'ALL' indica que no se realiza fragmentación. Se pueden especificar tamaños en bytes (B), kilobytes (K) o megabytes (M). Tamaños más pequeños son útiles para procesar documentos con memoria limitada, mientras que 'ALL' puede consumir mucha memoria para documentos grandes.
matchTypeEspecifica el tipo de coincidencia de entrada. 'ALL' (predeterminado) devuelve todas las coincidencias. 'BEST' devuelve la mejor coincidencia según las reglas del modelo. 'LONGEST' devuelve la coincidencia más larga.
modelEspecifica una tabla CAS de entrada que contiene el modelo LITI definido por el usuario. Si no se especifica, se utiliza el modelo base.
parseTableInEspecifica el nombre de la tabla CAS que fue creada con el parámetro parseTableOut en una llamada anterior. Contiene documentos pre-procesados para mejorar la eficiencia, especialmente con el operador CLAUS_n. No se debe usar junto con parseTableOut en la misma llamada.
parseTableOutEspecifica una tabla CAS de salida para contener los documentos pre-procesados. Es opcional y se usa para guardar resultados intermedios y mejorar el rendimiento en llamadas posteriores con parseTableIn, especialmente con el operador CLAUS_n.
ruleMatchOutEspecifica la tabla CAS de salida que contiene la información de las coincidencias de reglas. Esta tabla puede ser utilizada como entrada para la acción ruleGen.
tableEspecifica una tabla CAS de entrada que contiene los documentos a analizar.
textEspecifica el nombre de la variable de la tabla CAS que contiene el texto a procesar.
Creación de Datos de Ejemplo

Este código crea una tabla CAS llamada 'reviews' con dos columnas: 'docId' para el identificador del documento y 'text' para el contenido del texto. Estos datos servirán como entrada para la acción applyConcept.

¡Copiado!
1DATA mycas.reviews;
2 INFILE DATALINES delimiter='|';
3 LENGTH text $300;
4 INPUT docId $ text $;
5 DATALINES;
61|El nuevo smartphone es increíble, me encanta la cámara.
72|El servicio al cliente fue terrible, muy decepcionante.
83|SAS Viya es una plataforma potente para el análisis.
94|El producto llegó dañado. No estoy contento.
10;
11RUN;

Ejemplos

Este ejemplo utiliza la acción `applyConcept` para extraer conceptos de la tabla `reviews` usando el modelo LITI base (predefinido). Los resultados se guardan en la tabla `concept_matches`.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC CAS;
2 textRuleScore.applyConcept
3 docId="docId"
4 text="text"
5 TABLE={caslib="casuser", name="reviews"}
6 casOut={caslib="casuser", name="concept_matches", replace=true};
7RUN;
Resultado :
Una tabla CAS llamada `concept_matches` en la caslib 'casuser'. La tabla contendrá las coincidencias de conceptos predefinidos por SAS (como nlpPerson, nlpPlace, nlpDate, etc.) encontradas en la columna 'text' de la tabla de entrada.

Este ejemplo demuestra un flujo de trabajo completo. Primero, se compila un modelo LITI personalizado que busca nombres de productos ('PRODUCTO') y sentimientos ('SENTIMIENTO'). Luego, la acción `applyConcept` utiliza este modelo compilado para analizar los textos. Se especifica `matchType='LONGEST'` para obtener la coincidencia más larga en caso de solapamiento. Además de la tabla de coincidencias de conceptos (`concept_matches_custom`), también se generan la tabla de hechos (`fact_matches`) y la tabla de coincidencias de reglas (`rulematch_out`).

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC CAS;
2 /* 1. Compilar un modelo LITI personalizado */
3 textRuleDevelop.compileConcept
4 config='CONCEPT: PRODUCTO
5RULE:(nlpProduct)
6CONCEPT: SENTIMIENTO
7RULE:(nlpPositive)
8RULE:(nlpNegative)'
9 casOut={caslib="casuser", name="custom_liti_model", replace=true};
10 
11 /* 2. Aplicar el modelo LITI personalizado con opciones avanzadas */
12 textRuleScore.applyConcept
13 docId="docId"
14 text="text"
15 TABLE={caslib="casuser", name="reviews"}
16 model={caslib="casuser", name="custom_liti_model"}
17 matchType="LONGEST"
18 casOut={caslib="casuser", name="concept_matches_custom", replace=true}
19 factOut={caslib="casuser", name="fact_matches", replace=true}
20 ruleMatchOut={caslib="casuser", name="rulematch_out", replace=true};
21RUN;
Resultado :
Se generan tres tablas en la caslib 'casuser':
1. `concept_matches_custom`: Contiene las coincidencias para los conceptos personalizados 'PRODUCTO' (por ejemplo, 'smartphone', 'SAS Viya') y 'SENTIMIENTO' (por ejemplo, 'increíble', 'terrible', 'contento').
2. `fact_matches`: Contiene las coincidencias de reglas de hechos, si alguna se define en el modelo LITI (en este caso, estará vacía ya que no se definieron reglas de hechos).
3. `rulematch_out`: Contiene información detallada sobre qué reglas específicas del modelo LITI se activaron para cada coincidencia, útil para la depuración y el desarrollo de reglas.

FAQ

¿Cuál es el propósito de la acción applyConcept?
¿Qué especifica el parámetro 'table'?
¿Para qué se utiliza el parámetro 'docId'?
¿Cómo se especifica el texto a procesar?
¿Qué hace el parámetro 'model'?
¿Qué tipos de coincidencia se pueden especificar con 'matchType'?
¿Cómo se puede excluir un concepto de los resultados?
¿Qué tablas de salida se pueden generar?

Escenarios asociados

Caso de uso
Análisis de Sentimiento en Reseñas de Hoteles con Modelo LITI Personalizado

Una cadena hotelera internacional necesita analizar miles de reseñas de clientes para identificar rápidamente menciones a servicios clave (piscina, wifi, desayuno) y el sentimie...

Caso de uso
Optimización del Rendimiento en el Análisis de Informes Clínicos Voluminosos

Una farmacéutica debe procesar un gran volumen de informes clínicos para farmacovigilancia. El rendimiento es crítico. Se busca optimizar el proceso guardando los resultados del...

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

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 qu...