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

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

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

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

Q&A

1回答

689閲覧

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

kyudo_lover0320

総合スコア4

Java

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

0グッド

0クリップ

投稿2018/07/09 09:06

前提・実現したいこと

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

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

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

該当のソースコード

Java

1import java.io.BufferedReader; 2import java.io.DataOutputStream; 3import java.io.IOException; 4import java.io.InputStreamReader; 5import java.net.HttpURLConnection; 6import java.net.URL; 7 8public class talk_api { 9 10 public String res_smltalk() { 11 while (true) { 12 HttpURLConnection conn = null; 13 try { 14 //標準入力 15 System.out.print("[me]:"); 16 BufferedReader br 17 = new BufferedReader(new InputStreamReader(System.in)); 18 String input = br.readLine(); 19 20 if (input == null || input.isEmpty()) { 21 continue; 22 } else if (input.equals("bye")) { 23 System.out.println("終了"); 24 return "not"; 25 } 26 27 //送信データ 28 //発行したAPI KEYを書く 29 String data = "apikey=自分のAPIKEY&query=" + input; 30 31 //HTTP接続 32 URL url = new URL("https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk"); 33 conn = (HttpURLConnection) url.openConnection(); 34 conn.setDoInput(true); 35 conn.setDoOutput(true); 36 conn.setRequestMethod("POST"); 37 conn.setUseCaches(false); 38 39 //POST送信 40 try (DataOutputStream dos = new DataOutputStream(conn.getOutputStream())) { 41 dos.writeBytes(data); 42 } 43 44 //レスポンス受信 45 int rescode = conn.getResponseCode(); 46 if (rescode == HttpURLConnection.HTTP_OK) { 47 try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()))) { 48 StringBuilder buf = new StringBuilder(); 49 String line; 50 51 while ((line = reader.readLine()) != null) { 52 buf.append(line); 53 } 54 55 System.out.println(convertToOliginal(buf.toString())); 56 String response = convertToOliginal(buf.toString()); 57 //System.out.println(response); 58 59 //replyタグの後ろを取り出す 60 String reply = ""; // 返り値 61 if (response != null && response.length() > 0) { 62 int offset = 0; 63 offset = response.indexOf("reply"); 64 if (response.startsWith("reply", offset)) { 65 int end = response.indexOf("}", offset); 66 reply = response.substring(offset+9, end-1); 67 } 68 } 69 70 71 System.out.println("[system]:"+reply); 72 } 73 } 74 } catch (IOException ex) { 75 ex.printStackTrace(); 76 } finally { 77 if (conn != null) { 78 conn.disconnect(); 79 } 80 } 81 } 82 } 83 84 /** 85 * unicode文字列を文字列に変換(u\3042 ⇒ あ) 86 * 87 * @param unicode unicode文字列を含む文字列 88 * @return 文字列 89 */ 90 private static String convertToOliginal(String unicode) { 91 String tmp = unicode; 92 while (tmp.indexOf("\u") > 0) { 93 String str = tmp.substring(tmp.indexOf("\u"), tmp.indexOf("\u") + 6); 94 int c = Integer.parseInt(str.substring(2), 16); 95 tmp = tmp.replaceFirst("\" + str, new String(new int[]{c}, 0, 1)); 96 } 97 return tmp; 98 } 99 100 //テスト用 101 public static void main(String[] args) { 102 talk_api tes = new talk_api(); 103 tes.res_smltalk(); 104 } 105 106

試したこと

実行結果は以下の様な感じです。
[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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

how i help you

投稿2018/07/09 15:31

AliHassan

総合スコア351

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問