GoogleSQL para BigQuery es compatible con las siguientes funciones de análisis de texto.
Lista de funciones
Nombre | Resumen |
---|---|
BAG_OF_WORDS
|
Obtiene la frecuencia de cada término (token) en un documento con token. |
TEXT_ANALYZE
|
Extrae términos (tokens) del texto y los convierte en un documento con asignación de token. |
TF_IDF
|
Evalúa qué tan relevante es un término (token) para un documento con asignación de token en un conjunto de documentos con asignación de token. |
BAG_OF_WORDS
BAG_OF_WORDS(tokenized_document)
Definición
Obtiene la frecuencia de cada término (token) en un documento con token.
Definiciones
tokenized_document
: el valorARRAY<STRING>
que representa un documento al que se le asignó un token. Un documento con asignación de token es una colección de términos (tokens), que se usan para el análisis de texto.
Tipo de datos que se muestra
ARRAY<STRUCT<term STRING, count INT64>>
Definiciones:
term
: un término único en el documento con asignación de token.count
: Es la cantidad de veces que se encontró el término en el documento con asignación de token.
Ejemplos
La siguiente consulta produce términos y sus frecuencias en dos documentos con asignación de token:
WITH
ExampleTable AS (
SELECT 1 AS id, ['I', 'like', 'pie', 'pie', 'pie', NULL] AS f UNION ALL
SELECT 2 AS id, ['yum', 'yum', 'pie', NULL] AS f
)
SELECT id, BAG_OF_WORDS(f) AS results
FROM ExampleTable
ORDER BY id;
/*----+------------------------------------------------*
| id | results |
+----+------------------------------------------------+
| 1 | [(null, 1), ('I', 1), ('like', 1), ('pie', 3)] |
| 2 | [(null, 1), ('pie', 1), ('yum', 2)] |
*----+------------------------------------------------*/
TEXT_ANALYZE
TEXT_ANALYZE(
text
[, analyzer=>{ 'LOG_ANALYZER' | 'NO_OP_ANALYZER' | 'PATTERN_ANALYZER' }]
[, analyzer_options=>analyzer_options_values]
)
Descripción
Extrae términos (tokens) del texto y los convierte en un documento con asignación de token.
Definiciones
text
: valorSTRING
que representa el texto de entrada para la asignación de tokens.analyzer
: Argumento con nombre obligatorio opcional que determina qué analizador usar para convertirtext
en un arreglo de términos (tokens). Puede ser:'LOG_ANALYZER'
(predeterminado): Divide la entrada en términos cuando se encuentran delimitadores y, luego, normaliza los términos. Si no se especificaanalyzer
, se usa de forma predeterminada. Para obtener más información, consulta el analizador de texto deLOG_ANALYZER
.'NO_OP_ANALYZER'
: Extrae el texto como un solo término (token), pero no aplica la normalización. Para obtener más información, consulta el analizador de texto deNO_OP_ANALYZER
.'PATTERN_ANALYZER'
: Divide la entrada en términos que coinciden con una expresión regular. Para obtener más información, consulta Analizador de textoPATTERN_ANALYZER
.
analyzer_options
: Argumento con nombre obligatorio opcional que toma una lista de reglas de análisis de texto como unaSTRING
con formato JSON. Para obtener más información, consulta Opciones del analizador de texto.
Detalles
No hay garantía sobre el orden de los tokens que produce esta función.
Si no se especifica ningún analizador, se usa el analizador LOG_ANALYZER
de forma predeterminada.
Tipo de datos que se muestra
ARRAY<STRING>
Ejemplos
En la siguiente consulta, se usa el analizador de texto predeterminado, LOG_ANALYZER
, con el texto de entrada:
SELECT TEXT_ANALYZE('I like pie, you like-pie, they like 2 PIEs.') AS results
/*--------------------------------------------------------------------------*
| results |
+--------------------------------------------------------------------------+
| ['i', 'like', 'pie', 'you', 'like', 'pie', 'they', 'like', '2', 'pies' ] |
*--------------------------------------------------------------------------*/
En la siguiente consulta, se usa el analizador de texto NO_OP_ANALYZER
con el texto de entrada:
SELECT TEXT_ANALYZE(
'I like pie, you like-pie, they like 2 PIEs.',
analyzer=>'NO_OP_ANALYZER'
) AS results
/*-----------------------------------------------*
| results |
+-----------------------------------------------+
| 'I like pie, you like-pie, they like 2 PIEs.' |
*-----------------------------------------------*/
En la siguiente consulta, se usa el analizador de texto PATTERN_ANALYZER
con el texto de entrada:
SELECT TEXT_ANALYZE(
'I like pie, you like-pie, they like 2 PIEs.',
analyzer=>'PATTERN_ANALYZER'
) AS results
/*----------------------------------------------------------------*
| results |
+----------------------------------------------------------------+
| ['like', 'pie', 'you', 'like', 'pie', 'they', 'like', 'pies' ] |
*----------------------------------------------------------------*/
Para ver ejemplos adicionales que incluyan opciones del analizador, consulta Análisis de texto.
Si deseas obtener recetas de analizador útiles que puedes usar para mejorar las consultas compatibles con el analizador, consulta Busca con los analizadores de texto.
TF_IDF
TF_IDF(tokenized_document) OVER()
TF_IDF(tokenized_document, max_distinct_tokens) OVER()
TF_IDF(tokenized_document, max_distinct_tokens, frequency_threshold) OVER()
Descripción
Evalúa qué tan relevante es un término para un documento con asignación de token en un conjunto de documentos con asignación de token mediante el algoritmo TF-IDF (frecuencia de documentos inversa de frecuencia).
Definiciones
tokenized_document
: el valorARRAY<STRING>
que representa un documento al que se le asignó un token. Un documento con asignación de token es una colección de términos (tokens), que se usan para el análisis de texto.max_distinct_tokens
: Argumento opcional. Toma un valorINT64
no negativo, que representa el tamaño del diccionario, sin incluir el término desconocido.Las condiciones se agregan al diccionario hasta que se cumple este umbral. Por lo tanto, si este valor es
20
, se agregan los primeros 20 términos únicos y, luego, no se agregan términos adicionales.Si no se proporciona este argumento, el valor predeterminado es
32000
. Si se especifica este argumento, el valor máximo es1048576
.frequency_threshold
: Argumento opcional. Toma un valorINT64
no negativo que representa la cantidad mínima de veces que un término debe aparecer en un documento con asignación de token para que se incluya en el diccionario. Por lo tanto, si este valor es3
, un término debe aparecer al menos tres veces en el documento con asignación de token para que se lo agregue al diccionario.Si no se proporciona este argumento, el valor predeterminado es
5
.
Detalles
Esta función usa un algoritmo de TF-IDF (frecuencia de documentos inversa de frecuencia) para calcular la relevancia de los términos en un conjunto de documentos con asignación de token. TF-IDF multiplica dos métricas: cuántas veces aparece un término en un documento (frecuencia de término) y la frecuencia de documento inversa del término en una colección de documentos (frecuencia de documento inversa).
TDIF:
term frequency * inverse document frequency
Frecuencia de términos:
(count of term in document) / (document size)
frecuencia de documento inversa:
log(1 + document set size / (1 + count of documents containing term))
Los términos se agregan a un diccionario de términos si cumplen con los criterios para max_distinct_tokens
y frequency_threshold
; de lo contrario, se consideran término desconocido. El término desconocido siempre es el primer término del diccionario y se representa como NULL
. El resto del diccionario está ordenado por frecuencia de términos en lugar de alfabéticamente.
Tipo de datos que se muestra
ARRAY<STRUCT<term STRING, tf_idf DOUBLE>>
Definiciones:
term
: el término único que se agregó al diccionario.tf_idf
: El cálculo de TF-IDF del término.
Ejemplos
La siguiente consulta calcula la relevancia de hasta 10 términos que aparecen al menos dos veces en un conjunto de documentos con asignación de token. En este ejemplo, los argumentos con nombre se pasan de forma posicional. 10
representa max_distinct_tokens
y 2
representa frequency_threshold
:
WITH ExampleTable AS (
SELECT 1 AS id, ['I', 'like', 'pie', 'pie', 'pie', NULL] AS f UNION ALL
SELECT 2 AS id, ['yum', 'yum', 'pie', NULL] AS f UNION ALL
SELECT 3 AS id, ['I', 'yum', 'pie', NULL] AS f UNION ALL
SELECT 4 AS id, ['you', 'like', 'pie', 'too', NULL] AS f
)
SELECT id, TF_IDF(f, 10, 2) OVER() AS results
FROM ExampleTable
ORDER BY id;
/*----+-------------------------------------------------*
| id | results |
+----+-------------------------------------------------+
| 1 | [{"index":null,"value":"0.1304033435859887"}, |
| | {"index":"I","value":"0.1412163100645339"}, |
| | {"index":"like","value":"0.1412163100645339"}, |
| | {"index":"pie","value":"0.29389333245105953"}] |
+----+-------------------------------------------------+
| 2 | [{"index":null,"value":"0.1956050153789831"}, |
| | {"index":"pie","value":"0.14694666622552977"}, |
| | {"index":"yum","value":"0.4236489301936017"}] |
+----+-------------------------------------------------+
| 3 | [{"index":null,"value":"0.1956050153789831"}, |
| | {"index":"I","value":"0.21182446509680086"}, |
| | {"index":"pie","value":"0.14694666622552977"}, |
| | {"index":"yum","value":"0.21182446509680086"}] |
+----+-------------------------------------------------+
| 4 | [{"index":null,"value":"0.4694520369095594"}, |
| | {"index":"like","value":"0.1694595720774407"}, |
| | {"index":"pie","value":"0.11755733298042381"}] |
*----+-------------------------------------------------*/
La siguiente consulta calcula la relevancia de hasta tres términos que aparecen al menos una vez en un conjunto de documentos con asignación de token:
WITH ExampleTable AS (
SELECT 1 AS id, ['I', 'like', 'pie', 'pie', 'pie', NULL] AS f UNION ALL
SELECT 2 AS id, ['yum', 'yum', 'pie', NULL] AS f UNION ALL
SELECT 3 AS id, ['I', 'yum', 'pie', NULL] AS f UNION ALL
SELECT 4 AS id, ['you', 'like', 'pie', 'too', NULL] AS f
)
SELECT id, TF_IDF(f, 3, 2) OVER() AS results
FROM ExampleTable
ORDER BY id;
/*----+-------------------------------------------------*
| id | results |
+----+-------------------------------------------------+
| 1 | [{"index":null,"value":"0.12679902142647365"}, |
| | {"index":"I","value":"0.1412163100645339"}, |
| | {"index":"like","value":"0.1412163100645339"}, |
| | {"index":"pie","value":"0.29389333245105953"}] |
+----+-------------------------------------------------+
| 2 | [{"index":null,"value":"0.5705955964191315"}, |
| | {"index":"pie","value":"0.14694666622552977"}] |
+----+-------------------------------------------------+
| 3 | [{"index":null,"value":"0.380397064279421"}, |
| | {"index":"I","value":"0.21182446509680086"}, |
| | {"index":"pie","value":"0.14694666622552977"}] |
+----+-------------------------------------------------+
| 4 | [{"index":null,"value":"0.45647647713530515"}, |
| | {"index":"like","value":"0.1694595720774407"}, |
| | {"index":"pie","value":"0.11755733298042381"}] |
*----+-------------------------------------------------*/