Dialogflowの感情分析結果(sentimentAnalysisResult)を取得する
以下の記事でも記載した通り、flutterでDialogflowを使うには、dialogflow_flutterパッケージを利用します。
現時点でのdialogflow_flutterのバージョンは1.0.0ですが、このパッケージのQueryResultクラスには、sentimentAnalysisResultは含まれていないようです。
そこで、パッケージのコードを以下のように修正してみました。
class QueryResult {
String? queryText;
String? action;
Map? parameters;
bool? allRequiredParamsPresent;
String? fulfillmentText;
List<dynamic>? fulfillmentMessages;
Intent? intent;
Map? sentimentAnalysisResult; // 追加
QueryResult(Map data) {
queryText = data["queryText"];
action = data["action"];
parameters = data["parameters"] ?? null;
allRequiredParamsPresent = data["allRequiredParamsPresent"];
fulfillmentText = data["fulfillmentText"];
intent = data['intent'] != null ? new Intent(data['intent']) : null;
fulfillmentMessages = data['fulfillmentMessages'];
sentimentAnalysisResult = data["sentimentAnalysisResult"] ?? null; // 追加
}
}
また、DialogflowからsentimentAnalysisResultを返してもらうには、queryParamsにも設定が必要です。
sentimentAnalysisRequestConfig | object (SentimentAnalysisRequestConfig) 実行する感情分析のタイプを構成します。指定しない場合、感情分析は実行されません。 |
詳細は、こちらの公式サイトを参照ください。
そこで、以下のメソッド内で使っているqueryParamsにsentimentAnalysisRequestConfigを追加します。
Future<AIResponse> detectIntent(String query) async {
// queryParams の変更
// String queryParams = '{"resetContexts": ${this.resetContexts} }';
String queryParams =
'{"resetContexts": ${this.resetContexts},
"sentimentAnalysisRequestConfig":
{ "analyzeQueryTextSentiment": true}
}';
if (payload.isNotEmpty) {
queryParams =
'{"resetContexts": ${this.resetContexts}, "payload": $payload}';
}
String body =
'{"queryInput":{"text":{"text":"$query","language_code":"$language"}}, "queryParams": $queryParams}';
var response = await authGoogle.post(_getUrl(),
headers: {
HttpHeaders.authorizationHeader: "Bearer ${authGoogle.getToken}"
},
body: body);
return AIResponse(body: json.decode(response.body));
}
これで呼び出し側からは、以下のようにして値(score)を取得できます。
AIResponse aiResponse = await dialogflow.detectIntent(query);
sentimentAnalysisResult = aiResponse.queryResult!.sentimentAnalysisResult;
if (sentimentAnalysisResult != null) {
sentiment_score = sentimentAnalysisResult!["queryTextSentiment"]["score"];
}
感情分析はDialogflowのトライアルエディションでは利用不可となっています。また感情分析には別途費用がかかります。こちらをご確認ください。