GoogleSQL untuk BigQuery mendukung fungsi analisis teks berikut ini.
Daftar fungsi
Nama | Ringkasan |
---|---|
BAG_OF_WORDS
|
Mendapatkan frekuensi setiap istilah (token) dalam dokumen dengan token. |
TEXT_ANALYZE
|
Mengekstrak istilah (token) dari teks dan mengonversinya menjadi dokumen dengan token. |
TF_IDF
|
Mengevaluasi seberapa relevan suatu istilah (token) bagi dokumen berupa token dalam sekumpulan dokumen berupa token. |
BAG_OF_WORDS
BAG_OF_WORDS(tokenized_document)
Definisi
Mendapatkan frekuensi setiap istilah (token) dalam dokumen dengan token.
Definisi
tokenized_document
: NilaiARRAY<STRING>
yang mewakili dokumen yang telah ditokenkan. Dokumen yang ditokenkan adalah kumpulan istilah (token), yang digunakan untuk analisis teks.
Jenis nilai yang ditampilkan
ARRAY<STRUCT<term STRING, count INT64>>
Definisi:
term
: Istilah unik dalam dokumen dengan token.count
: Berapa kali istilah ditemukan dalam dokumen dengan token.
Contoh
Kueri berikut menghasilkan istilah dan frekuensinya dalam dua dokumen dengan 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]
)
Deskripsi
Mengekstrak istilah (token) dari teks dan mengonversinya menjadi dokumen dengan token.
Definisi
text
: NilaiSTRING
yang mewakili teks input untuk di-token.analyzer
: Argumen opsional bernama wajib yang menentukan analyzer yang akan digunakan untuk mengonversitext
menjadi array istilah (token). Ini bisa berupa:'LOG_ANALYZER'
(default): Memecah input menjadi istilah saat pembatas terjadi, lalu menormalisasi istilah tersebut. Jikaanalyzer
tidak ditentukan, atribut ini akan digunakan secara default. Untuk mengetahui informasi selengkapnya, lihat Penganalisis teksLOG_ANALYZER
.'NO_OP_ANALYZER'
: Mengekstrak teks sebagai satu istilah (token), tetapi tidak menerapkan normalisasi. Untuk mengetahui informasi selengkapnya, lihat Penganalisis teksNO_OP_ANALYZER
.'PATTERN_ANALYZER'
: Memecah input menjadi istilah yang cocok dengan ekspresi reguler. Untuk mengetahui informasi selengkapnya, lihat Penganalisis teksPATTERN_ANALYZER
.
analyzer_options
: Argumen bernama wajib opsional yang menggunakan daftar aturan analisis teks sebagaiSTRING
berformat JSON. Untuk mengetahui informasi selengkapnya, lihat Opsi penganalisis teks.
Detail
Tidak ada jaminan atas urutan token yang dihasilkan oleh fungsi ini.
Jika tidak ada penganalisis yang ditentukan, penganalisis LOG_ANALYZER
akan digunakan secara default.
Jenis nilai yang ditampilkan
ARRAY<STRING>
Contoh
Kueri berikut menggunakan penganalisis teks default,
LOG_ANALYZER
, dengan teks input:
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' ] |
*--------------------------------------------------------------------------*/
Kueri berikut menggunakan penganalisis teks NO_OP_ANALYZER
dengan teks input:
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.' |
*-----------------------------------------------*/
Kueri berikut menggunakan penganalisis teks
PATTERN_ANALYZER
dengan teks input:
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' ] |
*----------------------------------------------------------------*/
Untuk contoh tambahan yang menyertakan opsi analyzer, lihat Analisis teks.
Untuk urutan langkah penganalisis bermanfaat yang dapat digunakan untuk meningkatkan kueri yang didukung analyzer, lihat Menelusuri dengan penganalisis teks.
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()
Deskripsi
Mengevaluasi seberapa relevan suatu istilah terhadap dokumen dengan token dalam sekumpulan dokumen menggunakan token, menggunakan algoritma TF-IDF (term frequency-inverse document Frekuensi).
Definisi
tokenized_document
: NilaiARRAY<STRING>
yang mewakili dokumen yang telah ditokenkan. Dokumen yang ditokenkan adalah kumpulan istilah (token), yang digunakan untuk analisis teks.max_distinct_tokens
: Argumen opsional. Mengambil nilaiINT64
non-negatif, yang mewakili ukuran kamus, tidak termasuk istilah yang tidak diketahui.Istilah ditambahkan ke kamus hingga nilai minimum ini tercapai. Jadi, jika nilai ini adalah
20
, 20 istilah unik pertama akan ditambahkan, lalu tidak ada istilah lain yang ditambahkan.Jika argumen ini tidak diberikan, nilai defaultnya adalah
32000
. Jika argumen ini ditentukan, nilai maksimumnya adalah1048576
.frequency_threshold
: Argumen opsional. Mengambil nilaiINT64
non-negatif yang mewakili frekuensi minimum istilah harus muncul dalam dokumen token agar dapat disertakan dalam kamus. Jadi, jika nilai ini adalah3
, sebuah istilah harus muncul setidaknya tiga kali dalam dokumen dengan token agar dapat ditambahkan ke kamus.Jika argumen ini tidak diberikan, nilai defaultnya adalah
5
.
Detail
Fungsi ini menggunakan algoritma TF-IDF (term frequency-inverse document Frekuensi) untuk menghitung relevansi istilah dalam sekumpulan dokumen dengan token. TF-IDF mengalikan dua metrik: berapa kali istilah muncul dalam dokumen (frekuensi istilah), dan kebalikan frekuensi dokumen dari istilah tersebut di seluruh koleksi dokumen (frekuensi dokumen terbalik).
TDIF:
term frequency * inverse document frequency
frekuensi istilah:
(count of term in document) / (document size)
frekuensi dokumen terbalik:
log(1 + document set size / (1 + count of documents containing term))
Istilah ditambahkan ke kamus istilah jika memenuhi kriteria untuk
max_distinct_tokens
dan frequency_threshold
. Jika tidak, istilah tersebut dianggap
istilah yang tidak diketahui. Istilah yang tidak diketahui selalu menjadi istilah pertama dalam kamus
dan direpresentasikan sebagai NULL
. Sisa kamus diurutkan berdasarkan frekuensi istilah, bukan menurut abjad.
Jenis nilai yang ditampilkan
ARRAY<STRUCT<term STRING, tf_idf DOUBLE>>
Definisi:
term
: Istilah unik yang ditambahkan ke kamus.tf_idf
: Komputasi TF-IDF untuk istilah tersebut.
Contoh
Kueri berikut menghitung relevansi hingga 10 istilah yang muncul setidaknya dua kali dalam kumpulan dokumen dengan token. Dalam contoh ini, argumen yang dinamai diteruskan secara posisi. 10
mewakili
max_distinct_tokens
dan 2
mewakili 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"}] |
*----+-------------------------------------------------*/
Kueri berikut menghitung relevansi hingga tiga istilah yang muncul setidaknya satu kali dalam sekumpulan dokumen berupa 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"}] |
*----+-------------------------------------------------*/