Textanalysefunktionen

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: Wert STRING, der den Eingabetext für die Tokenisierung darstellt.
  • analyzer: Optionales obligatorisch-benanntes Argument, das bestimmt, welcher Analysetool, um text 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. Wenn analyzer nicht angegeben ist, wird dies standardmäßig verwendet. Weitere Informationen finden Sie unter LOG_ANALYZER Textanalysator.

    • 'NO_OP_ANALYZER': Extrahiert den Text als einzelnen Begriff (Token), wendet jedoch keine Normalisierung an. Weitere Informationen finden Sie unter NO_OP_ANALYZER Textanalysator.

    • 'PATTERN_ANALYZER': Zerlegt die Eingabe in Begriffe, die mit einem regulären Ausdruck übereinstimmen. Weitere Informationen finden Sie unter PATTERN_ANALYZER Textanalysator.

  • analyzer_options: Optionales obligatorisches benanntes Argument, das eine Liste von Textanalyseregeln als JSON-formatierten STRING 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 negativen INT64-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öchstwert 1048576.

  • frequency_threshold: Optionales Argument. Verwendet einen nicht negativen INT64-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 also 3 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"}] |
 *----+-------------------------------------------------*/