AsyncTaskのあれこれ
Javaに対しての勉強不足が相まって依頼されたアプリ作成が滞ってしまったため簡単に備忘録
public class UploadTask extends AsyncTask<String, Void, Response> { private Context context; public UploadTask(Context context) { super(); this.context = context; } // 非同期処理 @Override protected Response doInBackground(String... params) { // パラメータで送った値を受け取る String lat = params[0]; String lng = params[1]; // 処理を記述 // 結果を下に送る return response; } // 非同期処理終了後、結果をメインスレッドに返す @Override protected void onPostExecute(Response response) { super.onPostExecute(response); if (response != null) { // 完了したら画面遷移する Intent intent = new Intent(context, hogehogeActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(intent); } else { Toast.makeText(context, R.string.post_failed, Toast.LENGTH_SHORT).show(); Log.w(TAG + "POST:", "error: " + "responseがNULL"); } } }
んで使うときは
UploadTask task = new UploadTask(context); task.execute( String.valueOf(lat), // lat String.valueOf(lng), // lng );
って書いてやればいい
AndroidでWatson NLUを使ってみた(だけ) その2
なんとなくググり続けてやっと解決
responseで受けたJavaObjectをJsonに変換して
AnalysisResults response = service .analyze(parameters) .execute(); System.out.println(response); //Object形式で帰ってくる Gson gson = new Gson(); json = gson.toJson(response); JsonParser parser = new JsonParser(); JsonObject result = parser.parse(response.toString()).getAsJsonObject(); System.out.println(result.getAsJsonArray("concepts").get(0).getAsJsonObject().get("text"));
前回の実行結果をこれで受け取ると"金本知憲"が返ってきた
阪神ってワードからアニキが出てきた
んで,これは別スレッドで動かしてるから,UIに反映させようとしても
”Only the original thread that created a view hierarchy can touch its views.”ってエラーを吐いてくる
UI変更したけりゃメインスレッドからやれってことらしい
だからHandlerつかってメインスレッドに処理を依頼すればOK
AndroidでWatson NLUを使ってみた(だけ) その1
Watson NLUをAndroidで動かしてみたい
ってことでリファレンスとにらめっこ
その前にこいつを見て日本語で使える機能を確認
Conceptsとcategoriesが使えるっぽい
他を日本語で取得しようとするとエラーが返ってきた
NaturalLanguageUnderstanding service = new NaturalLanguageUnderstanding( "2018-03-16", nlu_username, nlu_password ); String text = "阪神の福留が同点ソロ本塁打を放ち試合を振り出しに戻した。" ; CategoriesOptions categories = new CategoriesOptions(); ConceptsOptions concepts= new ConceptsOptions.Builder() .limit(3) .build(); Features features = new Features.Builder() .categories(categories) .concepts(concepts) .build(); AnalyzeOptions parameters = new AnalyzeOptions.Builder() .text(text) .features(features) .build(); AnalysisResults response = service .analyze(parameters) .execute(); System.out.println(response); //Object形式で帰ってくる
これを別スレッドで回してみると情報の取得ができた
Object形式の取り扱い方が分からなくて情報の抽出ができない...
Watson Discovery で分割文書管理
自分向けの備忘録なので悪しからず.
日本語ところどころ変だけどもお気になさらず.
Retrieve and rank(以下R&R)で,文書を<h1>タグ分けて
1つのHTMLを読み込ませるだけで複数の文書を読み込ませてきた.
だが11月頭にR&Rが廃止,Discoveryに統合され,使い方が少々変わってしまった.
この統廃合に「今まで積み上げてきたノウハウがパーじゃないか!」と憤りを感じたが,そう嘆いてもR&Rは帰ってこないのでDiscoveryを叩いていこう.
Discoveryでは<h1>タグによる分割管理がデフォルトでは備わっておらず,R&Rに読み込ませていたHTMLファイルをそのまま読み込ませても,ただテキストが長い1つの文書として読み込まれる.改悪じゃん.
Discoveryをtoolで管理しようと思っても,言語選択で「日本語」が無いのね.日本語使いたければCurlでAPI使って作れって...いいじゃん日本語をtoolで選べるようにしてよ...
日本語のチュートリアルやリファレンスが皆無なためキータにはお世話になりっぱなし.
前者の記事には
Release Notesによると2017/10/3付でDocument segmentationという機能が搭載されたそうです。大きなHTML/Word/PDF文書をHTMLのH1-H6タグのレベルで分割するものだそうです。詳細はSplitting documents with document segmentationをご参照ください。(ちら読みした限りでは、注意点もいくつかありそうです)
流し見していたら読み飛ばしていた部分にさらっと分割管理のことが書かれていた.ありがとうございます...
どうやらConfigurationsをきちんと定義しないとダメらしい.
詳しくは
IBM Cloud Docs
configの追加
curl -X POST -u {usrname}:{pass} -H "Content-Type: application/json" -d @config.json "https://gateway.watsonplatform.net/discovery/api/v1/environments/{environ_id}/configurations?version=2017-11-07"
んでjsonも一緒に送る
{ "configuration_id": "a23c467d-1212-4b3a-5555-93e788a3622a", "name": "Example configuration", "conversions": { "segment": { "enabled": true, "selector_tags": ["h1"] } } }
これで文書読み込ませるときにConfigurationsをjsonで決めた名前の奴にしてから読み込ませたらOK
一応読み込ませたHTMLも書いておく
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>2017_01</title> </head> <body> <h1>2017_01_01</h1> <p>aaa</p> <h1>2017_01_02</h1> <p>bbb</p> <h1>2017_01_03</h1> <p>ccc</p> </body> </html>
最大50個までしか分割できなくて50個超えたやつは全部50番目に入る.
読み込ませた文書消す方法ってtoolでできる?CurlでAPI使うしか消せないよね・・・.
プログラミング自体まだ全然だからノウハウが無さ過ぎてとてもつらい.
Conversationを使ってみる
参考:Watson Conversation Serviceでチャットボットを開発する
IBMワトソン 勉強会 20161121a
https://www.ibm.com/developerworks/community/wikis/home?lang=ja#!/wiki/%E3%81%93%E3%81%BF%E3%81%AD%E3%81%AE%E6%8A%80%E8%A1%93%E3%83%A1%E3%83%A2/page/Conversation%20%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%A7%E3%81%AE%E4%BC%9A%E8%A9%B1%E3%83%95%E3%83%AD%E3%83%BC%E4%BD%9C%E6%88%90%E5%AE%9F%E7%BF%92
Conversationはユーザーとの自然言語での会話を行うためのサービス.
NLCで与えられた質問では信頼度の高い分類ができない場合などに,もう少し詳しい質問文を求めたりすることができる.
一定の流れに沿った会話フローを作成することができる.
Conversationには
Intent,Entities,Dialog
の3つのタブがある.
Intent = ユーザーが入力したテキストに含まれる目的
対話相手の要求を受け取る意図を明確にする
「ライトをつけて」→スイッチ入
「音楽をかけて」→スイッチ入
「音楽をもっと大きく」→音量を上げる
Entities = 入力テキストから抽出すべきキーワード 目的の対象物を示す
要求の対象となる実体を明確にする
「ライトをつけて」→ライト
「音楽をかけて」→音楽
「音楽をもっと大きく」→音量
Dialog = Intent/Entitiesに対する回答 回答の流れもここで作成する
対話の流れを設計する
「音楽をかけて」→「音楽のジャンル取得」→指定ジャンルの音楽を開始