ibt es eine Möglichkeit, die Ähnlichkeit von Zeichenfolgen in Google BigQuery zu messe

Ich frage mich, ob jemand eine Möglichkeit kennt, die String-Ähnlichkeit in BigQuery zu messen.

Scheint wie wäre eine ordentliche Funktion zu haben.

Mein Fall ist, dass ich die Ähnlichkeit von zwei URLs vergleichen muss, um ziemlich sicher zu sein, dass sie sich auf denselben Artikel beziehen.

Ich kann findenBeispiele mit Javascript also vielleicht ist eine UDF der richtige Weg, aber ich habe überhaupt keine UDFs verwendet (oder Javascript für diese Angelegenheit :))

Nur die Frage, ob es eine Möglichkeit gibt, vorhandene reguläre Ausdrücke zu verwenden, oder ob jemand in der Lage ist, mich mit dem Portieren des Javascript-Beispiels in eine UDF zu beginnen.

Jede Hilfe sehr geschätzt, danke

EDIT: Beispielcode hinzufügen

Also, wenn ich eine UDF definiert habe als:

// distance function

function levenshteinDistance (row, emit) {

  //if (row.inputA.length <= 0 ) {var myresult = row.inputB.length};
  if (typeof row.inputA === 'undefined') {var myresult = 1};
  if (typeof row.inputB === 'undefined') {var myresult = 1};
  //if (row.inputB.length <= 0 ) {var myresult = row.inputA.length};

    var myresult = Math.min(
        levenshteinDistance(row.inputA.substr(1), row.inputB) + 1,
        levenshteinDistance(row.inputB.substr(1), row.inputA) + 1,
        levenshteinDistance(row.inputA.substr(1), row.inputB.substr(1)) + (row.inputA[0] !== row.inputB[0] ? 1 : 0)
    ) + 1;

  emit({outputA: myresult})

}

bigquery.defineFunction(
  'levenshteinDistance',                           // Name of the function exported to SQL
  ['inputA', 'inputB'],                    // Names of input columns
  [{'name': 'outputA', 'type': 'integer'}],  // Output schema
  levenshteinDistance                       // Reference to JavaScript UDF
);

// make a test function to test individual parts

function test(row, emit) {
  if (row.inputA.length <= 0) { var x = row.inputB.length} else { var x = row.inputA.length};
  emit({outputA: x});
}

bigquery.defineFunction(
  'test',                           // Name of the function exported to SQL
  ['inputA', 'inputB'],                    // Names of input columns
  [{'name': 'outputA', 'type': 'integer'}],  // Output schema
  test                       // Reference to JavaScript UDF
);

ch versuche es mit einer Abfrage wie:

SELECT outputA FROM (levenshteinDistance(SELECT "abc" AS inputA, "abd" AS inputB))

Ich erhalte den Fehler:

Error: TypeError: Die Eigenschaft 'substr' von undefined in Zeile 11, Spalten 38-39 kann nicht gelesen werden. Fehlerposition: Benutzerdefinierte Funktion

Es scheint, als wäre row.inputA vielleicht kein String oder aus irgendeinem Grund können String-Funktionen nicht damit arbeiten. Ich bin mir nicht sicher, ob es sich um ein Typproblem handelt oder ob es sich um ein witziges Problem handelt, welches die UDF standardmäßig verwenden kann.

Again jede Hilfe sehr geschätzt, danke.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage