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_tokens
및 frequency_threshold
의 기준을 충족할 경우 용어 사전에 용어가 추가되고 그렇지 않으면 알 수 없는 용어로 간주됩니다. 알 수 없는 용어는 항상 딕셔너리의 첫 번째 용어이며 NULL
으로 표시됩니다. 딕셔너리의 나머지 부분은 알파벳순이 아닌 용어 빈도로 정렬됩니다.
반환 유형
ARRAY<STRUCT<term STRING, tf_idf DOUBLE>>
정의:
term
: 딕셔너리에 추가된 고유 용어입니다.tf_idf
: 용어에 대한 TF-IDF 계산입니다.
예시
다음 쿼리는 토큰화된 문서 집합에 최소 두 번 이상 나타나는 최대 10개 용어의 관련성을 계산합니다. 이 예시에서는 이름이 지정된 인수가 위치적으로 전달됩니다. 10
은 max_distinct_tokens
를 나타내며, 2
는 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"}] |
*----+-------------------------------------------------*/
다음 쿼리는 토큰화된 문서 집합에 최소 한 번 표시되는 최대 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"}] |
*----+-------------------------------------------------*/