質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

受付中

TalkApi(A3rt)の精度が悪い問題(Java)

kyudo_lover0320
kyudo_lover0320

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1回答

0評価

0クリップ

2閲覧

投稿2018/07/09 09:06

前提・実現したいこと

javaでTalkAPIを使い対話するプログラムを書きました。
今はコンソール上でやり取りする様にしています。
日常会話を実現したいです。

発生している問題・エラーメッセージ

エラーメッセージが出ているわけではないのですが
非常にAPIの返答に違和感を感じます。
挨拶にもまともに返してくれません。
おそらく自分のコードにミスがあり、返答がおかしいのかなと考えています。

該当のソースコード

Java

import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class talk_api { public String res_smltalk() { while (true) { HttpURLConnection conn = null; try { //標準入力 System.out.print("[me]:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); if (input == null || input.isEmpty()) { continue; } else if (input.equals("bye")) { System.out.println("終了"); return "not"; } //送信データ //発行したAPI KEYを書く String data = "apikey=自分のAPIKEY&query=" + input; //HTTP接続 URL url = new URL("https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk"); conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestMethod("POST"); conn.setUseCaches(false); //POST送信 try (DataOutputStream dos = new DataOutputStream(conn.getOutputStream())) { dos.writeBytes(data); } //レスポンス受信 int rescode = conn.getResponseCode(); if (rescode == HttpURLConnection.HTTP_OK) { try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()))) { StringBuilder buf = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { buf.append(line); } System.out.println(convertToOliginal(buf.toString())); String response = convertToOliginal(buf.toString()); //System.out.println(response); //replyタグの後ろを取り出す String reply = ""; // 返り値 if (response != null && response.length() > 0) { int offset = 0; offset = response.indexOf("reply"); if (response.startsWith("reply", offset)) { int end = response.indexOf("}", offset); reply = response.substring(offset+9, end-1); } } System.out.println("[system]:"+reply); } } } catch (IOException ex) { ex.printStackTrace(); } finally { if (conn != null) { conn.disconnect(); } } } } /** * unicode文字列を文字列に変換(u\3042 ⇒ あ) * * @param unicode unicode文字列を含む文字列 * @return 文字列 */ private static String convertToOliginal(String unicode) { String tmp = unicode; while (tmp.indexOf("\\u") > 0) { String str = tmp.substring(tmp.indexOf("\\u"), tmp.indexOf("\\u") + 6); int c = Integer.parseInt(str.substring(2), 16); tmp = tmp.replaceFirst("\\" + str, new String(new int[]{c}, 0, 1)); } return tmp; } //テスト用 public static void main(String[] args) { talk_api tes = new talk_api(); tes.res_smltalk(); }

試したこと

実行結果は以下の様な感じです。
[me]:おはようございます
{"status": 0, "message": "ok", "results": [{"perplexity": 0.2315019959271728, "reply": "私はそんなに嫌いじゃないですよ"}]}
[system]:私はそんなに嫌いじゃないです
[me]:こんにちは
{"status": 0, "message": "ok", "results": [{"perplexity": 0.23161212785866075, "reply": "あなたはよくするんですか?"}]}
[system]:あなたはよくするんですか
[me]:bye
終了

補足情報(FW/ツールのバージョンなど)

参考にしたサイト様(参考というよりほぼ引用)
https://qiita.com/tshk_mtsys/items/c46f7a37c1770c6555e2

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。