텍스트 분석 함수

BigQuery용 GoogleSQL은 다음 텍스트 분석 함수를 지원합니다.

함수 목록

이름 요약
BAG_OF_WORDS 토큰화된 문서에서 각 용어(토큰)의 빈도를 가져옵니다.
TEXT_ANALYZE 텍스트에서 용어(토큰)를 추출하여 토큰화된 문서로 변환합니다.
TF_IDF 토큰화된 문서 집합에서 용어(토큰)가 토큰화된 문서와 얼마나 관련이 있는지 평가합니다.

BAG_OF_WORDS

BAG_OF_WORDS(tokenized_document)

정의

토큰화된 문서에서 각 용어(토큰)의 빈도를 가져옵니다.

정의

  • tokenized_document: 토큰화된 문서를 나타내는 ARRAY<STRING> 값입니다. 토큰화된 문서는 텍스트 분석에 사용되는 용어(토큰)의 모음입니다.

반환 유형

ARRAY<STRUCT<term STRING, count INT64>>

정의:

  • term: 토큰화된 문서의 고유 용어입니다.
  • count: 토큰화된 문서에서 용어가 발견된 횟수입니다.

예시

다음 쿼리는 두 개의 토큰화된 문서에서 용어와 해당 빈도를 생성합니다.

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]
)

Description(설명)

텍스트에서 용어(토큰)를 추출하여 토큰화된 문서로 변환합니다.

정의

  • text: 토큰화할 입력 텍스트를 나타내는 STRING 값입니다.
  • analyzer: text를 용어 배열(토큰)로 변환하는 데 사용할 분석기를 결정하는 필수 이름이 지정된 인수입니다. 다음 중 하나일 수 있습니다.

    • 'LOG_ANALYZER'(기본값): 구분 기호가 나타나면 입력을 용어로 나눈 다음 해당 용어를 정규화합니다. analyzer를 지정하지 않는 경우, 기본적으로 사용됩니다. 자세한 내용은 LOG_ANALYZER 텍스트 분석기를 참조하세요.

    • 'NO_OP_ANALYZER': 텍스트를 단일 용어(토큰)로 추출하지만 정규화를 적용하지 않습니다. 자세한 내용은 NO_OP_ANALYZER 텍스트 분석기를 참조하세요.

    • 'PATTERN_ANALYZER': 입력을 정규 표현식과 일치하는 용어로 나눕니다. 자세한 내용은 PATTERN_ANALYZER 텍스트 분석기를 참조하세요.

  • analyzer_options: 텍스트 분석 규칙 목록을 JSON 형식의 STRING으로 가져오는 선택적인 필수 이름 지정 인수입니다. 자세한 내용은 텍스트 분석기 옵션을 참조하세요.

세부정보

이 함수로 생성된 토큰의 순서는 보장되지 않습니다.

분석기가 지정되지 않으면 LOG_ANALYZER 분석기가 기본적으로 사용됩니다.

반환 유형

ARRAY<STRING>

예시

다음 쿼리는 기본 텍스트 분석기 LOG_ANALYZER를 입력 텍스트와 함께 사용합니다.

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' ] |
 *--------------------------------------------------------------------------*/

다음 쿼리는 NO_OP_ANALYZER 텍스트 분석기를 입력 텍스트와 함께 사용합니다.

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.' |
 *-----------------------------------------------*/

다음 쿼리는 PATTERN_ANALYZER 텍스트 분석기를 입력 텍스트와 함께 사용합니다.

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' ] |
 *----------------------------------------------------------------*/

분석기 옵션이 포함된 추가 예시는 텍스트 분석을 참조하세요.

분석기 지원 쿼리를 개선하는 데 사용할 수 있는 유용한 분석기 레시피는 텍스트 분석기로 검색을 참조하세요.

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()

Description(설명)

TF-IDF(역문서 빈도) 알고리즘을 사용하여 토큰화된 문서 집합에서 용어가 토큰화된 문서와 얼마나 관련이 있는지 평가합니다.

정의

  • tokenized_document: 토큰화된 문서를 나타내는 ARRAY<STRING> 값입니다. 토큰화된 문서는 텍스트 분석에 사용되는 용어(토큰)의 모음입니다.
  • max_distinct_tokens: 선택적 인수입니다. 알 수 없는 용어를 제외하고 딕셔너리의 크기를 나타내는 음수가 아닌 INT64 값을 사용합니다.

    이 임곗값이 충족될 때까지 용어가 딕셔너리에 추가됩니다. 따라서 이 값이 20이면 처음 20개의 고유 용어가 추가된 다음 추가 용어가 추가되지 않습니다.

    이 인수가 제공되지 않으면 기본값은 32000입니다. 이 인수가 지정된 경우 최댓값은 1048576입니다.

  • frequency_threshold: 선택적 인수입니다. 용어를 딕셔너리에 포함하기 위해 해당 용어가 토큰화된 문서에 표시되어야 하는 최소 횟수를 나타내는 음수가 아닌 INT64 값을 사용합니다. 따라서 이 값이 3인 경우 용어는 토큰화된 문서에 최소 3회 이상 표시되어야 딕셔너리에 추가됩니다.

    이 인수가 제공되지 않으면 기본값은 5입니다.

세부정보

이 함수는 TF-IDF(역문서 빈도) 알고리즘을 사용하여 토큰화된 문서 집합에서 용어의 관련성을 계산합니다. TF-IDF는 두 가지 측정항목 즉, 용어가 문서에서 사용된 횟수(단어 빈도)와 문서 컬렉션 전반에서 해당 용어의 역문서 빈도(역문서 빈도)를 곱합니다.

  • TDIF:

    term frequency * inverse document frequency
    
  • 용어 빈도:

    (count of term in document) / (document size)
    
  • 역문서 빈도:

    log(1 + document set size / (1 + count of documents containing term))
    

max_distinct_tokensfrequency_threshold의 기준을 충족할 경우 용어 사전에 용어가 추가되고 그렇지 않으면 알 수 없는 용어로 간주됩니다. 알 수 없는 용어는 항상 딕셔너리의 첫 번째 용어이며 NULL으로 표시됩니다. 딕셔너리의 나머지 부분은 알파벳순이 아닌 용어 빈도로 정렬됩니다.

반환 유형

ARRAY<STRUCT<term STRING, tf_idf DOUBLE>>

정의:

  • term: 딕셔너리에 추가된 고유 용어입니다.
  • tf_idf: 용어에 대한 TF-IDF 계산입니다.

예시

다음 쿼리는 토큰화된 문서 집합에 최소 두 번 이상 나타나는 최대 10개 용어의 관련성을 계산합니다. 이 예시에서는 이름이 지정된 인수가 위치적으로 전달됩니다. 10max_distinct_tokens를 나타내며, 2frequency_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"}] |
 *----+-------------------------------------------------*/

다음 쿼리는 토큰화된 문서 집합에 최소 한 번 표시되는 최대 3개 용어의 관련성을 계산합니다.

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"}] |
 *----+-------------------------------------------------*/