はじめに
「MTG内容をテキストマイニングしてぽんとできん?」何ていう相談が出てきました。
そこから始まったkotadoraの冒険の書です。
わからないから初めから勉強。
基本的な考え方
なんらかで話す⇒テキストに変換する⇒テキストについてマイニングする⇒JSかなんかで見やすくる
という流れになるのは目に見えた。ただ、やり方がね。
ということで探していくと、google様に良さそうな物があるではないか!というわけでググりまくる。
結局流れとしては
こんな感じになりそう。まさにcloud functionsさまさまなプランニング。
cloud functionsとは??
まぁ要するにpub/subを複数実行できるスグレモノ、という認識です(雑)
pub/subのgoogle様の説明を呼んだのだが、結局パブリッシャーとサブスクライバーって結局何よ、と思ったのでぐぐってみたら、次の記事が。
情報の提供者をパブリッシャーといいます。 パブリッシャーはある件名についての情報を提供しますが、情報を求めるアプリケーションについては何も認識する必要がありません。
情報の利用者をサブスクライバーといいます。 サブスクライバーはどんな情報が必要かを決定し、その情報が受信されるのを待ちます。 サブスクライバーは、多種多様なパブリッシャーから情報を受信し、その情報を他のサブスクライバーに送信できます。https://www.ibm.com/support/knowledgecenter/ja/SSFKSJ_7.1.0/com.ibm.mq.explorer.doc/p_pubsubers.htm
とのこと。まぁ、さておき作ってみますか。
とりあえずできるか?
macbookでSpeechAPIできないの?って思いググる。
https://qiita.com/MikuriyaHiroshi/items/9c64a970b037c560906e
あるじゃんか。ありがとうございます、もちろん参考にさせていただきます。
というか、え!?こんな簡単にできるの!?そうです。出来てしまいました。。。。
じゃあ、これにNaturalLanguageAPIつければ・・・いけるじゃん!
あ、ちなみに地味ですが、環境変数exportはexport -p でリストが、-nで消せます。(まぁ重ねれば良いんだけどね。)
説明と補足
元ネタは https://github.com/googleapis/nodejs-speech/blob/master/samples/package.json
{
"name": "test", //import()require()で呼び出すとき使うもの
"version": "0.0.1", //nameとversionで1セット。この2つで定義。
"private": true, //これでnpm(NodePackagedModule)のモジュールが非公開のもの=つまりローカルにインストールされる($HOME内ということですね。)
"license": "Apache Version 2.0",
"author": "Google Inc.",
"scripts": {
"test": "cd ..; npm run --verbose speech/system-test/*.test.js"
}, //ここにはshellスクリプトで実行する内容をそのまま書く。この場合、cd .. で戻って、npn run。
"dependencies": {
"@google-cloud/speech": "0.9.0",
"@google-cloud/storage": "1.0.0",
"node-record-lpcm16": "0.3.0"
}, //依存するパッケージ(もちろんnpmの。)をここに書いている。つまり、ここに書いたパッケージを自動的に落としてくれるという優れもの(もちろんnpmにあるという、ね笑)
"engines": {
"node": ">=4.3.2"
} //ノードの場所定義。
}
{
const record = require('node-record-lpcm16'); //const つまり varとかと違って再度代入出来ない変数。後出しは不可。
const speech = require('@google-cloud/speech');
const speechClient = speech(); //Google-cloudのnpmでのspeechのパッケージの中の関数を使う。
const SAMPLE_RATE = 16000 //サンプリングレート。
const request = { //SpeechAPIのcreateRecognizeStreamという場所に設定(でもどこ??
config: {
encoding: 'LINEAR16',
sampleRateHertz: SAMPLE_RATE,
languageCode: 'ja-jp'
}
};
const recognizeStream = speechClient.createRecognizeStream(request)
.on('error', console.error)
.on('data', (data) => {
console.log(data.results);
});
record.start({
sampleRate: SAMPLE_RATE,
thresholdStart: 0.2, // silence threshold to start recording, overrides threshold
thresholdEnd: 0.1, // silence threshold to end recording, overrides threshold
silence: '0.1' // seconds of silence before ending
}).pipe(recognizeStream);
}
APIリファレンス
https://cloud.google.com/nodejs/docs/reference/speech/1.4.x/v1.SpeechClient
注)2018/4月に下書き書いて、そのまま放置してます。ただ、必要に迫られたので一応公開してます