質問編集履歴

2

調査したこと・試したことに関しての記述を追加

2017/09/12 09:00

投稿

ehyai
ehyai

スコア43

test CHANGED
File without changes
test CHANGED
@@ -14,10 +14,6 @@
14
14
 
15
15
 
16
16
 
17
-
18
-
19
- 以下、追加した内容
20
-
21
17
  ###該当のソースコード
22
18
 
23
19
  MainActivity.java
@@ -140,6 +136,20 @@
140
136
 
141
137
  }
142
138
 
139
+
140
+
141
+ //①このあたりに下記にに示してある、形態素解析の結果から単語だけを抜き出し、配列String[] strsに抜き出した単語を入れるコードを加える
142
+
143
+ //②1:2:...と順番に表示させるためのコードを加える
144
+
145
+ for (int i = 0 ; i < strs.length ; i++){
146
+
147
+ str += (i + 1) + ":" + strs[i] + "\n";
148
+
149
+ }
150
+
151
+
152
+
143
153
  reader.close();
144
154
 
145
155
  }
@@ -150,12 +160,6 @@
150
160
 
151
161
  }
152
162
 
153
-
154
-
155
- //このあたりに下記にに示してある、抜き出した単語を配列に入れるコード、順番に表示させるためのコードを加える
156
-
157
-
158
-
159
163
  textView.setText(str); //textViewに表示
160
164
 
161
165
  }
@@ -276,8 +280,6 @@
276
280
 
277
281
  ①ここで形態素解析の結果から単語だけを抜き出し、配列String[] strsに抜き出した単語を入れるコードを書く
278
282
 
279
- →今回私が教えてもらいたいと思っている部分
280
-
281
283
 
282
284
 
283
285
  ②1:2:...と順番に表示させるためのコード
@@ -291,3 +293,47 @@
291
293
  ```
292
294
 
293
295
  ちなみに、[私が過去に出した質問](https://teratail.com/questions/91400)ではこのコードのプログラムはエラーで途中で止まってしまっていたのですが、GitHubからダウンロードしたファイルを上記のコードに書き換えたものでデバッグを試してみた結果、上手く動作を行いました。
296
+
297
+
298
+
299
+ ###調査したこと・試したこと
300
+
301
+ 上記の①(形態素解析の結果から単語だけを抜き出し、配列String[] strsに抜き出した単語を入れるコード)についてですが、他のサイトで調べましたところ、[
302
+
303
+ こちらのサイト](http://pierre3.hatenablog.com/entry/2014/12/13/001743)を見て分かったこととして、word_listは形態素リストであり、ここに文単位の形態素リストの配列があること、その中の単語は、[form(表記)、pos(形態素)、read(読み)]という入れ子で構成されていることを理解することができ、このうちform(表記)だけを抜き出して配列に入れれば上手くいくのではないかと考えました。
304
+
305
+ そこで、上記のコードの「//この位置に下記の配列に示した、形態素解析の結果から単語だけを抜き出し配列に入れる」と書いたところに、
306
+
307
+ ```
308
+
309
+ String[] strs = new String[is.word_list.length];
310
+
311
+ for (int i = 0 ; i < is.word_list.length ; i++){
312
+
313
+ //str += (i + 1) + ":" + strs[i] + "\n";
314
+
315
+ strs[i] = is.word_list.form[i];
316
+
317
+ }
318
+
319
+ ```
320
+
321
+ を書きました。しかし、「word_list」の部分が赤く表示されてしまい、
322
+
323
+ ```
324
+
325
+ エラー:シンボルを見つけられません
326
+
327
+ シンボル:変数word_list
328
+
329
+ 場所:タイプInputStreamの変数is
330
+
331
+
332
+
333
+ Exection failed for task
334
+
335
+ Compilation failed; see the compiler error output for details.
336
+
337
+ ```
338
+
339
+ というエラーが出てしまいました。

1

現在試しているソースコード、実行結果、問題箇所・実現したい具体的な内容の追加

2017/09/12 09:00

投稿

ehyai
ehyai

スコア43

test CHANGED
File without changes
test CHANGED
@@ -4,8 +4,6 @@
4
4
 
5
5
  上記のサイトでは、「Log.d("OUTPUT",s);」の箇所で解析結果を表示していることから、この「s」に解析結果の文章がString変数として入れられていることがわかりました。この解析結果から、単語、上記の参考にしたサイトで言えば「京都」「は」「めちゃめちゃ」「楽し」「い」だけを抜き出し、それぞれ配列に入れたいと思っています。
6
6
 
7
-
8
-
9
7
  ###発生している問題
10
8
 
11
9
  しかし、この単語を抜き出す方法というものがわからなくて困っています。形態素解析APIのサイトを見る限り、word_listというパラメータに入っているのではないかと思うのですが、そこからどうやって抜き出すのかがわかりません。
@@ -13,3 +11,283 @@
13
11
  そこで、形態素解析の結果から単語だけを抜き出す方法のアドバイスを教えていただきたいと思います。参考にさせていただいたサイトに書かれたやり方とは別のやり方の形態素解析から単語を抜き出す方法でも何でも構いません。
14
12
 
15
13
  よろしくお願いします。
14
+
15
+
16
+
17
+
18
+
19
+ 以下、追加した内容
20
+
21
+ ###該当のソースコード
22
+
23
+ MainActivity.java
24
+
25
+ ```ここに言語を入力
26
+
27
+ package com.example.ehyai.(プロジェクト名);
28
+
29
+
30
+
31
+ import android.support.v7.app.AppCompatActivity;
32
+
33
+ import android.os.Bundle;
34
+
35
+ import android.view.View;
36
+
37
+ import android.widget.EditText;
38
+
39
+ import android.text.SpannableStringBuilder;
40
+
41
+ import android.widget.TextView;
42
+
43
+ import java.io.BufferedReader;
44
+
45
+ import java.io.IOException;
46
+
47
+ import java.io.InputStream;
48
+
49
+ import java.io.InputStreamReader;
50
+
51
+ import java.io.OutputStream;
52
+
53
+ import java.io.PrintStream;
54
+
55
+ import java.net.URL;
56
+
57
+ import java.net.URLConnection;
58
+
59
+
60
+
61
+ public class MainActivity extends AppCompatActivity {
62
+
63
+ TextView textView;
64
+
65
+
66
+
67
+ final String GOO_URL = "https://labs.goo.ne.jp/api/morph";
68
+
69
+ String ID = "(自分で取得したアプリケーションID)";
70
+
71
+
72
+
73
+ @Override
74
+
75
+ protected void onCreate(Bundle savedInstanceState) {
76
+
77
+ super.onCreate(savedInstanceState);
78
+
79
+ setContentView(R.layout.activity_main);
80
+
81
+
82
+
83
+ textView = (TextView) findViewById(R.id.textView);
84
+
85
+ }
86
+
87
+
88
+
89
+ public void onClickButton1(View view) {
90
+
91
+ EditText edit = (EditText)findViewById(R.id.editText);
92
+
93
+ SpannableStringBuilder sp = (SpannableStringBuilder)edit.getText();
94
+
95
+
96
+
97
+ String str = sp.toString();//editTextの文章を入れる変数
98
+
99
+ URL url = null;
100
+
101
+
102
+
103
+ try{
104
+
105
+ url = new URL(GOO_URL);
106
+
107
+ URLConnection connection =url.openConnection();
108
+
109
+ connection.setDoOutput(true);
110
+
111
+
112
+
113
+ //ヘッダ
114
+
115
+ connection.setRequestProperty("Content-Type", "application/json");
116
+
117
+
118
+
119
+ OutputStream os = connection.getOutputStream(); //[ここでエラーが起こり、プログラムが終了してしまう]
120
+
121
+ String postStr = "{\"app_id\": \"" + ID + "\",\"sentence\": \"" + str + "\"}";
122
+
123
+ PrintStream ps = new PrintStream(os);
124
+
125
+ ps.print(postStr); //データをPOSTする
126
+
127
+ ps.close();
128
+
129
+ InputStream is = connection.getInputStream(); //結果を取得
130
+
131
+ BufferedReader reader = new BufferedReader(new InputStreamReader(is));
132
+
133
+
134
+
135
+ String s;
136
+
137
+ while ((s = reader.readLine()) != null) {
138
+
139
+ str += s; //editTextから取った元の文章に結果を加える
140
+
141
+ }
142
+
143
+ reader.close();
144
+
145
+ }
146
+
147
+ catch (IOException e) {
148
+
149
+ e.printStackTrace();
150
+
151
+ }
152
+
153
+
154
+
155
+ //このあたりに下記にに示してある、抜き出した単語を配列に入れるコード、順番に表示させるためのコードを加える
156
+
157
+
158
+
159
+ textView.setText(str); //textViewに表示
160
+
161
+ }
162
+
163
+ }
164
+
165
+ ```
166
+
167
+
168
+
169
+ activity_main.xml
170
+
171
+ ```
172
+
173
+ ?xml version="1.0" encoding="utf-8"?>
174
+
175
+ <RelativeLayout
176
+
177
+ android:layout_width="fill_parent"
178
+
179
+ android:layout_height="fill_parent"
180
+
181
+ xmlns:tools="http://schemas.android.com/tools"
182
+
183
+ xmlns:app="http://schemas.android.com/apk/res-auto"
184
+
185
+ tools:context="com.example.(プロジェクト名)"
186
+
187
+ xmlns:android="http://schemas.android.com/apk/res/android">
188
+
189
+
190
+
191
+ <EditText
192
+
193
+ android:id="@+id/editText"
194
+
195
+ android:layout_width="wrap_content"
196
+
197
+ android:layout_height="wrap_content"
198
+
199
+ android:layout_alignParentStart="true"
200
+
201
+ android:layout_alignParentTop="true"
202
+
203
+ android:ems="10"
204
+
205
+ android:inputType="text|textMultiLine" />
206
+
207
+
208
+
209
+ <Button
210
+
211
+ android:id="@+id/button1"
212
+
213
+ android:layout_width="wrap_content"
214
+
215
+ android:layout_height="wrap_content"
216
+
217
+ android:layout_below="@+id/editText"
218
+
219
+ android:layout_toEndOf="@+id/button"
220
+
221
+ android:onClick="onClickButton1"
222
+
223
+ android:text="形態素解析" />
224
+
225
+
226
+
227
+ <ScrollView
228
+
229
+ android:layout_width="368dp"
230
+
231
+ android:layout_height="388dp"
232
+
233
+ android:layout_below="@+id/button"
234
+
235
+ tools:layout_editor_absoluteX="8dp"
236
+
237
+ tools:layout_editor_absoluteY="115dp">
238
+
239
+
240
+
241
+ <LinearLayout
242
+
243
+ android:layout_width="match_parent"
244
+
245
+ android:layout_height="wrap_content"
246
+
247
+ android:orientation="vertical">
248
+
249
+
250
+
251
+ <TextView
252
+
253
+ android:id="@+id/textView"
254
+
255
+ android:layout_width="match_parent"
256
+
257
+ android:layout_height="match_parent" />
258
+
259
+ </LinearLayout>
260
+
261
+ </ScrollView>
262
+
263
+
264
+
265
+ </RelativeLayout>
266
+
267
+
268
+
269
+ ```
270
+
271
+ このソースコードのアプリケーションを起動し、editTextに文章を入力してからボタンを押すとtextViewに入力した文章に加えて解析後の結果が表示されるようになっています。
272
+
273
+ この結果に、以下のコードを加えることで抜き出した単語を配列に入れ、1:2:...と順番にそれぞれ表示させたいと思っています。
274
+
275
+ ```
276
+
277
+ ①ここで形態素解析の結果から単語だけを抜き出し、配列String[] strsに抜き出した単語を入れるコードを書く
278
+
279
+ →今回私が教えてもらいたいと思っている部分
280
+
281
+
282
+
283
+ ②1:2:...と順番に表示させるためのコード
284
+
285
+ for (int i = 0 ; i < strs.length ; i++){
286
+
287
+ str += (i + 1) + ":" + strs[i] + "\n";
288
+
289
+ }
290
+
291
+ ```
292
+
293
+ ちなみに、[私が過去に出した質問](https://teratail.com/questions/91400)ではこのコードのプログラムはエラーで途中で止まってしまっていたのですが、GitHubからダウンロードしたファイルを上記のコードに書き換えたものでデバッグを試してみた結果、上手く動作を行いました。