Google SQL for BigQuery unterstützt die folgenden Textanalysefunktionen.
Funktionsliste
Name | Fazit |
---|---|
BAG_OF_WORDS
|
Ruft die Häufigkeit jedes Begriffs (Token) in einem tokenisierten Dokument ab. |
TEXT_ANALYZE
|
Extrahiert Begriffe (Tokens) aus Text und konvertiert sie in ein tokenisiertes Dokument. |
TF_IDF
|
Wertet aus, wie relevant ein Begriff (Token) für ein tokenisiertes Dokument in einer Reihe von tokenisierten Dokumenten ist. |
BAG_OF_WORDS
BAG_OF_WORDS(tokenized_document)
Definition
Ruft die Häufigkeit jedes Begriffs (Token) in einem tokenisierten Dokument ab.
Definitionen
tokenized_document
:ARRAY<STRING>
-Wert, der ein Dokument darstellt, das tokenisiert wurde. Ein tokenisiertes Dokument ist eine Sammlung von Begriffen (Tokens), die für die Textanalyse verwendet werden.
Rückgabetyp
ARRAY<STRUCT<term STRING, count INT64>>
Definitionen:
term
: Ein eindeutiger Begriff im tokenisierten Dokument.count
: Die Häufigkeit, mit der der Begriff im tokenisierten Dokument gefunden wurde.
Beispiele
Die folgende Abfrage erzeugt Begriffe und ihre Häufigkeit in zwei tokenisierten Dokumenten:
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]
)
Beschreibung
Extrahiert Begriffe (Tokens) aus Text und konvertiert sie in ein tokenisiertes Dokument.
Definitionen
text
: WertSTRING
, der den Eingabetext für die Tokenisierung darstellt.analyzer
: Optionales obligatorisch-benanntes Argument, das bestimmt, welcher Analysetool, umtext
in ein Array von Begriffen (Tokens) zu konvertieren. Dieser kann folgendermaßen lauten:'LOG_ANALYZER'
(Standardeinstellung): Zerlegt die Eingabe in Begriffe, wenn Trennzeichen auftreten, und normalisiert dann die Begriffe. Wennanalyzer
nicht angegeben ist, wird dies standardmäßig verwendet. Weitere Informationen finden Sie unterLOG_ANALYZER
Textanalysator.'NO_OP_ANALYZER'
: Extrahiert den Text als einzelnen Begriff (Token), wendet jedoch keine Normalisierung an. Weitere Informationen finden Sie unterNO_OP_ANALYZER
Textanalysator.'PATTERN_ANALYZER'
: Zerlegt die Eingabe in Begriffe, die mit einem regulären Ausdruck übereinstimmen. Weitere Informationen finden Sie unterPATTERN_ANALYZER
Textanalysator.
analyzer_options
: Optionales obligatorisches benanntes Argument, das eine Liste von Textanalyseregeln als JSON-formatiertenSTRING
verwendet. Weitere Informationen finden Sie unter Optionen des Textanalysators.
Details
Die Reihenfolge der von dieser Funktion erstellten Tokens kann nicht garantiert werden.
Wenn kein Analysetool angegeben ist, wird standardmäßig das Analysetool LOG_ANALYZER
verwendet.
Rückgabetyp
ARRAY<STRING>
Beispiele
Die folgende Abfrage verwendet den Standardtextanalysator LOG_ANALYZER
mit dem Eingabetext:
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' ] |
*--------------------------------------------------------------------------*/
Die folgende Abfrage verwendet den Textanalysator NO_OP_ANALYZER
mit dem Eingabetext:
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.' |
*-----------------------------------------------*/
Die folgende Abfrage verwendet den Textanalysator PATTERN_ANALYZER
mit dem Eingabetext:
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' ] |
*----------------------------------------------------------------*/
Weitere Beispiele mit Analyseoptionen finden Sie unter Textanalyse.
Nützliche Analyseschemas, mit denen Sie von Analysen unterstützte Abfragen optimieren können, finden Sie unter Mit Textanalysatoren suchen.
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()
Beschreibung
Beurteilt, wie relevant ein Begriff für ein tokenisiertes Dokument in einer Reihe von tokenisierten Dokumenten ist. Dabei wird der TF-IDF-Algorithmus (Term Reverse Inverse Document Frequency) verwendet.
Definitionen
tokenized_document
:ARRAY<STRING>
-Wert, der ein Dokument darstellt, das tokenisiert wurde. Ein tokenisiertes Dokument ist eine Sammlung von Begriffen (Tokens), die für die Textanalyse verwendet werden.max_distinct_tokens
: Optionales Argument. Verwendet einen nicht negativenINT64
-Wert, der die Größe des Wörterbuchs ohne den unbekannten Begriff darstellt.Die Begriffe werden dem Wörterbuch hinzugefügt, bis dieser Schwellenwert erreicht ist. Wenn dieser Wert
20
ist, werden die ersten 20 eindeutigen Begriffe und dann keine zusätzlichen Begriffe hinzugefügt.Wenn dieses Argument nicht angegeben wird, ist der Standardwert
32000
. Wenn dieses Argument angegeben wird, ist der Höchstwert1048576
.frequency_threshold
: Optionales Argument. Verwendet einen nicht negativenINT64
-Wert, der angibt, wie oft ein Begriff in einem tokenisierten Dokument enthalten sein muss, um in das Wörterbuch aufgenommen zu werden. Wenn dieser Wert also3
ist, muss ein Begriff mindestens dreimal im tokenisierten Dokument vorkommen, um dem Wörterbuch hinzugefügt zu werden.Wenn dieses Argument nicht angegeben wird, ist der Standardwert
5
.
Details
Diese Funktion verwendet einen TF-IDF-Algorithmus (Term-Inverse Dokument-Häufigkeit), um die Relevanz von Begriffen in einer Reihe von tokenisierten Dokumenten zu berechnen. Bei TF-IDF werden zwei Messwerte multipliziert: die Häufigkeit, mit der ein Begriff in einem Dokument auftaucht (Begriffshäufigkeit), und die umgekehrte Dokumenthäufigkeit des Begriffs in einer Sammlung von Dokumenten (umgekehrte Dokumenthäufigkeit).
TDIF:
term frequency * inverse document frequency
Häufigkeit des Begriffs:
(count of term in document) / (document size)
Umgekehrte Dokumenthäufigkeit:
log(1 + document set size / (1 + count of documents containing term))
Begriffe werden einem Wörterbuch der Begriffe hinzugefügt, wenn sie die Kriterien für max_distinct_tokens
und frequency_threshold
erfüllen. Andernfalls werden sie als unbekannter Begriff betrachtet. Der unbekannte Begriff ist immer der erste Begriff im Wörterbuch und wird als NULL
dargestellt. Der Rest des Wörterbuchs wird nach Häufigkeit und nicht alphabetisch sortiert.
Rückgabetyp
ARRAY<STRUCT<term STRING, tf_idf DOUBLE>>
Definitionen:
term
: der eindeutige Begriff, der dem Wörterbuch hinzugefügt wurde.tf_idf
: Die TF-IDF-Berechnung für den Begriff.
Beispiele
Die folgende Abfrage berechnet die Relevanz von bis zu 10 Begriffen, die mindestens zweimal in einer Reihe von tokenisierten Dokumenten vorkommen. In diesem Beispiel werden die benannten Argumente positionell übergeben. 10
steht für max_distinct_tokens
und 2
für 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"}] |
*----+-------------------------------------------------*/
Die folgende Abfrage berechnet die Relevanz von bis zu drei Begriffen, die mindestens einmal in einer Reihe von tokenisierten Dokumenten vorkommen.
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"}] |
*----+-------------------------------------------------*/