2016-10-25 9 views
1

Big Query(BQ)で自然言語処理(NLP)呼び出しの出力を照会しようとしていますが、出力を取得しようとしていますBQの正しいフォーマット。Big Query用のGoogle Natural Language Proscessing出力(json)の準備方法

私は、BQが(改行で区切られた)jsonファイルを取りますが、(a)NLPの出力がjson改行で区切られていること、(b)スキーマが正しいことを確信していません。

{ 
    "entities": [ 
    { 
     "name": "Rowling", 
     "type": "PERSON", 
     "metadata": { 
     "wikipedia_url": "http://en.wikipedia.org/wiki/J._K._Rowling" 
     }, 
     "salience": 0.65751493, 
     "mentions": [ 
     { 
      "text": { 
      "content": " J.", 
      "beginOffset": -1 
      } 
     }, 
     { 
      "text": { 
      "content": "K. Rowl", 
      "beginOffset": -1 
      } 
     } 
     ] 
    }, 
    { 
     "name": "LONDON", 
     "type": "LOCATION", 
     "metadata": { 
     "wikipedia_url": "http://en.wikipedia.org/wiki/London" 
     }, 
     "salience": 0.14284456, 
     "mentions": [ 
     { 
      "text": { 
      "content": "\ufeffLON", 
      "beginOffset": -1 
      } 
     } 
     ] 
    }, 
    { 
     "name": "Harry Potter", 
     "type": "WORK_OF_ART", 
     "metadata": { 
     "wikipedia_url": "http://en.wikipedia.org/wiki/Harry_Potter" 
     }, 
     "salience": 0.0726779, 
     "mentions": [ 
     { 
      "text": { 
      "content": "th Harry Pot", 
      "beginOffset": -1 
      } 
     }, 
     { 
      "text": { 
      "content": "‘Harry Pot", 
      "beginOffset": -1 
      } 
     } 
     ] 
    }, 
    { 
     "name": "Deathly Hallows", 
     "type": "WORK_OF_ART", 
     "metadata": { 
     "wikipedia_url": "http://en.wikipedia.org/wiki/Harry_Potter_and_the_Deathly_Hallows" 
     }, 
     "salience": 0.022565609, 
     "mentions": [ 
     { 
      "text": { 
      "content": "he Deathly Hall", 
      "beginOffset": -1 
      } 
     } 
     ] 
    } 
    ], 
    "language": "en" 
} 

Googleクラウドシェルのコマンドラインを介して、大きなクエリに直接出力を送信する方法があります:

ここで私が働いているJSON出力がですか?

すべての情報をお待ちしております。

おかげ

答えて

2

私のハリー・ポッターのブログ記事が見つかりました! BigQueryの文字列としてNL APIのJSONレスポンスを格納してから、クエリにuser-defined functionを使用することをおすすめします。あなたは、各エンティティはあなたが投稿JSONで表示する頻度のカウントを取得する(テーブルが公に閲覧可能です)以下を実行することができます:

SELECT 
    COUNT(*) as entity_count, entity 
FROM 
    JS(
    (SELECT entities FROM [sara-bigquery:samples.hp_udf]), 
    entities, 
    "[{ name: 'entity', type: 'string'}]", 
    "function(row, emit) { 
     try { 
     x = JSON.parse(row.entities); 
     entities = x['entities']; 
     entities.forEach(function(data) { 
      emit({ entity: data.name }); 
     }); 
     } catch (e) {} 
    }" 
) 
GROUP BY entity 
ORDER BY entity_count DESC 
+0

これは私が推薦するものではありません。 JSONペイロードからの出力を読み取る好ましい方法は、JSON_EXTRACTまたはJSON_EXTRACT_SCALARを、レガシーまたは(好ましくは)標準SQLを使用して使用することです。これは、UDFを使用するよりも安く高速です。 –

+0

これは素晴らしいです!ありがとうサラ:)これで遊びを持ち、結果を報告してくれる。 –

+0

サラ - すべてがGoogle Cloud Shellのコマンドラインからうまくいっていますが、Google Apps Scriptで同じ考えを実装することは可能ですか?基本的には、NLP APIを呼び出し、スプレッドシート内の個々のセル内のテキスト上でエンティティ抽出を実行したいと考えています。私は現在それを研究していますが、これが最初に可能かどうかを知ることは良いでしょう!ありがとう:) –

1

は、このページで

ルックシェルGoogleクラウドでのコマンドラインを介して、大きなクエリに直接出力を送信し、 "BQロード" https://cloud.google.com/bigquery/bq-command-line-tool

を検索しますここには、jsonスキーマに関するいくつかの例があります。 Schema to load json data to google big query

+0

私はこれを試してみたが、NLPの出力はJSONではありませんBQの必要に応じて区切られた改行 - それを変換するためのすばやく簡単な方法はありますか? –

関連する問題