質問編集履歴

2

誤字

2016/05/26 03:57

投稿

abc_z
abc_z

スコア34

test CHANGED
File without changes
test CHANGED
@@ -11,585 +11,3 @@
11
11
  そこで接続詞が来たら、その前の文を見て要約文として抽出されていたら接続詞を取り除かないという処理をしたいです。
12
12
 
13
13
  どうかご教授お願いします。
14
-
15
- ``#!/usr/bin/perl
16
-
17
-
18
-
19
- use strict;
20
-
21
- use warnings;
22
-
23
- use Encode qw(decode);
24
-
25
-
26
-
27
- #変数宣言
28
-
29
- my $mecab_file = $ARGV[0].".mecab";
30
-
31
-
32
-
33
- my $df_file = $ARGV[0].".df";
34
-
35
-
36
-
37
-
38
-
39
- my @line = ();#mecabの行
40
-
41
-
42
-
43
-
44
-
45
- my $i = 0;
46
-
47
-
48
-
49
- my @mecab_data = ();#mecabのデータ
50
-
51
-
52
-
53
- my @mecab_char = ();#文字
54
-
55
-
56
-
57
- my @mecab_prot = ();#原型
58
-
59
-
60
-
61
- my @mecab_hinshi = ();#品詞
62
-
63
-
64
-
65
-
66
-
67
- my @df_line = ();#dfの行
68
-
69
-
70
-
71
- my @df_data = ();
72
-
73
-
74
-
75
- my @df_char = ();#文字
76
-
77
-
78
-
79
- my @df_hinshi = ();#品詞
80
-
81
-
82
-
83
- my @df_tf = ();#tf
84
-
85
-
86
-
87
- my @df_df = ();#df
88
-
89
-
90
-
91
- my $a = 0;
92
-
93
-
94
-
95
- my $b = 0;
96
-
97
-
98
-
99
- my $j = 0;
100
-
101
-
102
-
103
- my $k = 0;
104
-
105
-
106
-
107
- my @tf_idf = ();
108
-
109
-
110
-
111
- my $N = 34644;
112
-
113
-
114
-
115
- my $alllength = 0;
116
-
117
-
118
-
119
- my @length = ();
120
-
121
-
122
-
123
- my @sentence = ();
124
-
125
-
126
-
127
- my @sum = ();
128
-
129
-
130
-
131
- my $max = 0;
132
-
133
-
134
-
135
- my $number = 0;
136
-
137
-
138
-
139
- my $count = 0;
140
-
141
-
142
-
143
- my @all_sentence = ();
144
-
145
-
146
-
147
- my $percent = $ARGV[1]/100;
148
-
149
-
150
-
151
-
152
-
153
-
154
-
155
- if($ARGV[1]>100){
156
-
157
- die "要約率を100以下にしてください\n";
158
-
159
-
160
-
161
- }
162
-
163
-
164
-
165
- elsif($ARGV[1]<0){
166
-
167
-
168
-
169
- die "要約率を0以上にしてください\n";
170
-
171
-
172
-
173
- }
174
-
175
-
176
-
177
-
178
-
179
- open(FP,$mecab_file) || die "can't open $mecab_file\n"; #ファイルをファイルハンドルであるFPへ読み込む
180
-
181
-
182
-
183
- @line = <FP>; #読み込んだファイルを配列lineにセット
184
-
185
-
186
-
187
-
188
-
189
- for($i=0; $i<=$#line; $i++) { #$#lineは配列の最後を表す
190
-
191
-
192
-
193
- chomp(@line); #改行コード削除
194
-
195
-
196
-
197
- if($line[$i] ne "EOS") {#lineがEOSじゃなかったら
198
-
199
-
200
-
201
- @mecab_data = split(/\t/,$line[$i]); #mecabのデータをsplitでタグの部分で文字・原型・品詞に分割し@mecab_dataに順番に格納していく
202
-
203
-
204
-
205
-
206
-
207
- $mecab_char[$i] = $mecab_data[0]; #さっき格納された文字、原型、品詞をそれぞれの配列に移していく。
208
-
209
-
210
-
211
- $mecab_prot[$i] = $mecab_data[1];
212
-
213
-
214
-
215
- $mecab_hinshi[$i] = $mecab_data[2];
216
-
217
-
218
-
219
- }
220
-
221
-
222
-
223
- else { #それ以外の時は空の配列になってしまうのでちゃんと埋める
224
-
225
-
226
-
227
- $mecab_char[$i] = "EOS";
228
-
229
-
230
-
231
- $mecab_prot[$i] = 0;
232
-
233
-
234
-
235
- $mecab_hinshi[$i] = 0;
236
-
237
-
238
-
239
- }
240
-
241
- }
242
-
243
- close(FP);
244
-
245
-
246
-
247
- open(DF,$df_file) || die "can't open $df_file\n";#ファイルをファイルハンドルであるDFへ読み込む
248
-
249
-
250
-
251
- @df_line = <DF>;#読み込んだファイルを配列df_lineにセット
252
-
253
-
254
-
255
- for($i=0; $i<=$#df_line; $i++) {#df_lineは配列の最後を示す。配列の最後までループ
256
-
257
-
258
-
259
- chomp(@df_line);#改行コードの削除
260
-
261
-
262
-
263
- @df_data = split(/\t/,$df_line[$i]);#splitで分割しdf_dataへ入れていく
264
-
265
-
266
-
267
-
268
-
269
- $df_char[$i] = $df_data[0];
270
-
271
-
272
-
273
- $df_hinshi[$i] = $df_data[1];
274
-
275
-
276
-
277
- $df_tf[$i] = $df_data[2];
278
-
279
-
280
-
281
- $df_df[$i] = $df_data[3];
282
-
283
-
284
-
285
-
286
-
287
-
288
-
289
- }
290
-
291
- close(DF);
292
-
293
-
294
-
295
-
296
-
297
- for($i = 0, $a = 0, $b = 0; $i<=$#mecab_char; $i++) {
298
-
299
-
300
-
301
- if($mecab_char[$i] ne "EOS") { #EOSでないときmecabとdfの単語を比較する
302
-
303
-
304
-
305
- if($mecab_hinshi[$i]=~"^名詞" || $mecab_hinshi[$i]=~"^動詞" || $mecab_hinshi[$i]=~"^形容詞" || $mecab_hinshi[$i]=~"^形容動詞") {
306
-
307
- #名詞、動詞、形容詞、形容動詞の時に次の処理へ移行
308
-
309
-
310
-
311
- for($j=0; $j <= $#df_char; $j++) {#単語と品詞の比較
312
-
313
-
314
-
315
- if($mecab_prot[$i] eq $df_char[$j] && $mecab_hinshi[$i] eq $df_hinshi[$j]){
316
-
317
-
318
-
319
- $tf_idf[$k] = $df_tf[$j]*(log($N/($df_df[$j]+1))+1);#単語の重要度を計算
320
-
321
-
322
-
323
-
324
-
325
- if($mecab_hinshi[$i] =~ "固有名詞"){
326
-
327
-
328
-
329
- $tf_idf[$k] = 2*$tf_idf[$k];#2倍にしたのはなぜか?なんで2倍にしようと考えたのか。
330
-
331
- #固有名詞の重要度を2倍にすることで要約の正確さを高める
332
-
333
-
334
-
335
- }
336
-
337
-
338
-
339
- $k++;#次へ行くためにkをインクリメント
340
-
341
- }
342
-
343
- }
344
-
345
- }
346
-
347
-
348
-
349
-
350
-
351
- #接続詞を取り除くときに、前の文が選ばれているなら接続詞を取り除かない#選ばれているかどうかの判定が必要
352
-
353
- if($ARGV[1] != 100){
354
-
355
- if($mecab_char[$i] eq "("){#()の部分を取り除く
356
-
357
-
358
-
359
- for(; $mecab_char[$i-1] ne ")"; $i++){
360
-
361
- #;で初期値を与えている。
362
-
363
-
364
-
365
- $alllength+=length(decode('utf-8',$mecab_char[$i-1]));
366
-
367
- #decodeでutf-8を使いperlに対して文字列として認識させ、length関数に渡して文字数を返してもらう
368
-
369
- #除いた分を全体の文字数にカウント
370
-
371
-
372
-
373
- }
374
-
375
-
376
-
377
- }
378
-
379
-
380
-
381
- if($mecab_hinshi[$i]=~"^接続詞"){#接続詞だった場合それを取り除いてalllengthへ入れていく
382
-
383
- $alllength+=length(decode('utf-8',$mecab_char[$i]));
384
-
385
-
386
-
387
- #decodeでutf-8を使いperlに対して文字列と認識させた #除いた分を全体の文字の長さにカウント
388
-
389
- $i++;#インクリメント
390
-
391
-
392
-
393
- if($mecab_hinshi[$i]=~"^記号"){#記号を取り除く #除いた分を全体の文字数にカウント
394
-
395
-
396
-
397
- $alllength+=length(decode('utf-8',$mecab_char[$i]));
398
-
399
-
400
-
401
- #decodeによりperlに対して文字列と認識させた #除いた分を全体の文字数にカウント
402
-
403
-
404
-
405
- $i++;#インクリメント
406
-
407
-
408
-
409
-
410
-
411
- }
412
-
413
- }
414
-
415
- }
416
-
417
-
418
-
419
-
420
-
421
-
422
-
423
- $length[$b]+=length(decode('utf-8',$mecab_char[$i]));
424
-
425
- #文の文字数を入れる
426
-
427
-
428
-
429
- if(defined($sentence[$b])){ #definedで定義しているかを確認
430
-
431
-
432
-
433
- $sentence[$b]=$sentence[$b].$mecab_char[$i];#連結
434
-
435
-
436
-
437
- }
438
-
439
-
440
-
441
- else {#未定義のとき最初の単語を入れる
442
-
443
-
444
-
445
- $sentence[$b]=$mecab_char[$i];
446
-
447
-
448
-
449
- }
450
-
451
-
452
-
453
- }
454
-
455
-
456
-
457
- else {#EOSになったら文自体の重要度計算を行う
458
-
459
-
460
-
461
- for($j = 0; $j < $k; $j++) { #kまでループする
462
-
463
-
464
-
465
- $sum[$a]+=$tf_idf[$j];#計算した重要度を随時足していく
466
-
467
- }
468
-
469
-
470
-
471
-
472
-
473
- $alllength+=$length[$b];#文字数を足す
474
-
475
-
476
-
477
- $k=0;
478
-
479
-
480
-
481
- $a++;
482
-
483
-
484
-
485
- $b++;
486
-
487
-
488
-
489
- }
490
-
491
- }
492
-
493
-
494
-
495
-
496
-
497
- for(; $count<=$percent * $alllength; $max = 0) {#パーセントとすべての文字数をかけ算して指定した文字に最大限近くなるまでループ
498
-
499
-
500
-
501
-
502
-
503
- for($i = 0; $i <= $#sum; $i++){
504
-
505
-
506
-
507
- if($sum[$i]>$max){
508
-
509
-
510
-
511
- $max=$sum[$i];#重要度が高かった場合上書きする
512
-
513
-
514
-
515
- $number=$i;
516
-
517
-
518
-
519
- }
520
-
521
- }
522
-
523
-
524
-
525
- $sum[$number]=0; #一度一番高い重要度を0にする
526
-
527
-
528
-
529
- $all_sentence[$number]=$sentence[$number];
530
-
531
- #重要度の高い文を配列に入れる
532
-
533
-
534
-
535
- $count+=$length[$number]; #文の文字数を加える
536
-
537
-
538
-
539
- }
540
-
541
-
542
-
543
- if($count > $percent * $alllength){#指定した文字数を越えてしまったら
544
-
545
-
546
-
547
- undef($all_sentence[$number]);#undefを使って未定義にする
548
-
549
-
550
-
551
- $count-=$length[$number];#countからlengthを引いたものをcountへ代入
552
-
553
-
554
-
555
- #余計な文字数を引く
556
-
557
-
558
-
559
- }
560
-
561
-
562
-
563
-
564
-
565
- for($i = 0, $j = 1; $i <= $#sum; $i++){
566
-
567
-
568
-
569
-
570
-
571
- if(defined($all_sentence[$i])){#definedで未定義部分を判別#真であれば
572
-
573
-
574
-
575
- printf("%s\n", $all_sentence[$i]);#printfで出力する
576
-
577
-
578
-
579
- }
580
-
581
- }
582
-
583
-
584
-
585
-
586
-
587
- printf("%s文字\n", $count);#要約した文字数を出力
588
-
589
-
590
-
591
-
592
-
593
- コード
594
-
595
- ```

1

コードを見やすくしました

2016/05/26 03:57

投稿

abc_z
abc_z

スコア34

test CHANGED
File without changes
test CHANGED
@@ -28,6 +28,8 @@
28
28
 
29
29
  my $mecab_file = $ARGV[0].".mecab";
30
30
 
31
+
32
+
31
33
  my $df_file = $ARGV[0].".df";
32
34
 
33
35
 
@@ -36,16 +38,26 @@
36
38
 
37
39
  my @line = ();#mecabの行
38
40
 
41
+
42
+
43
+
44
+
39
45
  my $i = 0;
40
46
 
47
+
48
+
41
49
  my @mecab_data = ();#mecabのデータ
42
50
 
43
51
 
44
52
 
45
53
  my @mecab_char = ();#文字
46
54
 
55
+
56
+
47
57
  my @mecab_prot = ();#原型
48
58
 
59
+
60
+
49
61
  my @mecab_hinshi = ();#品詞
50
62
 
51
63
 
@@ -54,48 +66,76 @@
54
66
 
55
67
  my @df_line = ();#dfの行
56
68
 
69
+
70
+
57
71
  my @df_data = ();
58
72
 
73
+
74
+
59
75
  my @df_char = ();#文字
60
76
 
77
+
78
+
61
79
  my @df_hinshi = ();#品詞
62
80
 
81
+
82
+
63
83
  my @df_tf = ();#tf
64
84
 
85
+
86
+
65
87
  my @df_df = ();#df
66
88
 
67
89
 
68
90
 
69
91
  my $a = 0;
70
92
 
93
+
94
+
71
95
  my $b = 0;
72
96
 
73
97
 
74
98
 
75
99
  my $j = 0;
76
100
 
101
+
102
+
77
103
  my $k = 0;
78
104
 
105
+
106
+
79
107
  my @tf_idf = ();
80
108
 
109
+
110
+
81
111
  my $N = 34644;
82
112
 
83
113
 
84
114
 
85
115
  my $alllength = 0;
86
116
 
117
+
118
+
87
119
  my @length = ();
88
120
 
89
121
 
90
122
 
91
123
  my @sentence = ();
92
124
 
125
+
126
+
93
127
  my @sum = ();
94
128
 
129
+
130
+
95
131
  my $max = 0;
96
132
 
133
+
134
+
97
135
  my $number = 0;
98
136
 
137
+
138
+
99
139
  my $count = 0;
100
140
 
101
141
 
@@ -116,30 +156,48 @@
116
156
 
117
157
  die "要約率を100以下にしてください\n";
118
158
 
159
+
160
+
119
- }
161
+ }
162
+
163
+
120
164
 
121
165
  elsif($ARGV[1]<0){
122
166
 
167
+
168
+
123
169
  die "要約率を0以上にしてください\n";
124
170
 
171
+
172
+
125
- }
173
+ }
174
+
175
+
126
176
 
127
177
 
128
178
 
129
179
  open(FP,$mecab_file) || die "can't open $mecab_file\n"; #ファイルをファイルハンドルであるFPへ読み込む
130
180
 
181
+
182
+
131
183
  @line = <FP>; #読み込んだファイルを配列lineにセット
132
184
 
133
185
 
134
186
 
187
+
188
+
135
189
  for($i=0; $i<=$#line; $i++) { #$#lineは配列の最後を表す
136
190
 
191
+
192
+
137
193
  chomp(@line); #改行コード削除
138
194
 
139
195
 
140
196
 
141
197
  if($line[$i] ne "EOS") {#lineがEOSじゃなかったら
142
198
 
199
+
200
+
143
201
  @mecab_data = split(/\t/,$line[$i]); #mecabのデータをsplitでタグの部分で文字・原型・品詞に分割し@mecab_dataに順番に格納していく
144
202
 
145
203
 
@@ -148,8 +206,12 @@
148
206
 
149
207
  $mecab_char[$i] = $mecab_data[0]; #さっき格納された文字、原型、品詞をそれぞれの配列に移していく。
150
208
 
209
+
210
+
151
211
  $mecab_prot[$i] = $mecab_data[1];
152
212
 
213
+
214
+
153
215
  $mecab_hinshi[$i] = $mecab_data[2];
154
216
 
155
217
 
@@ -160,10 +222,16 @@
160
222
 
161
223
  else { #それ以外の時は空の配列になってしまうのでちゃんと埋める
162
224
 
225
+
226
+
163
227
  $mecab_char[$i] = "EOS";
164
228
 
229
+
230
+
165
231
  $mecab_prot[$i] = 0;
166
232
 
233
+
234
+
167
235
  $mecab_hinshi[$i] = 0;
168
236
 
169
237
 
@@ -178,13 +246,17 @@
178
246
 
179
247
  open(DF,$df_file) || die "can't open $df_file\n";#ファイルをファイルハンドルであるDFへ読み込む
180
248
 
249
+
250
+
181
251
  @df_line = <DF>;#読み込んだファイルを配列df_lineにセット
182
252
 
183
253
 
184
254
 
185
255
  for($i=0; $i<=$#df_line; $i++) {#df_lineは配列の最後を示す。配列の最後までループ
186
256
 
257
+
258
+
187
- chomp(@df_line);#改行コードの削除
259
+ chomp(@df_line);#改行コードの削除
188
260
 
189
261
 
190
262
 
@@ -196,12 +268,20 @@
196
268
 
197
269
  $df_char[$i] = $df_data[0];
198
270
 
271
+
272
+
199
273
  $df_hinshi[$i] = $df_data[1];
200
274
 
275
+
276
+
201
277
  $df_tf[$i] = $df_data[2];
202
278
 
279
+
280
+
203
281
  $df_df[$i] = $df_data[3];
204
282
 
283
+
284
+
205
285
 
206
286
 
207
287
 
@@ -216,14 +296,22 @@
216
296
 
217
297
  for($i = 0, $a = 0, $b = 0; $i<=$#mecab_char; $i++) {
218
298
 
299
+
300
+
219
- if($mecab_char[$i] ne "EOS") { #EOSでないときmecabとdfの単語を比較する
301
+ if($mecab_char[$i] ne "EOS") { #EOSでないときmecabとdfの単語を比較する
220
-
302
+
303
+
304
+
221
- if($mecab_hinshi[$i]=~"^名詞" || $mecab_hinshi[$i]=~"^動詞" || $mecab_hinshi[$i]=~"^形容詞" || $mecab_hinshi[$i]=~"^形容動詞") {
305
+ if($mecab_hinshi[$i]=~"^名詞" || $mecab_hinshi[$i]=~"^動詞" || $mecab_hinshi[$i]=~"^形容詞" || $mecab_hinshi[$i]=~"^形容動詞") {
222
306
 
223
307
  #名詞、動詞、形容詞、形容動詞の時に次の処理へ移行
224
308
 
309
+
310
+
225
311
  for($j=0; $j <= $#df_char; $j++) {#単語と品詞の比較
226
312
 
313
+
314
+
227
315
  if($mecab_prot[$i] eq $df_char[$j] && $mecab_hinshi[$i] eq $df_hinshi[$j]){
228
316
 
229
317
 
@@ -236,7 +324,9 @@
236
324
 
237
325
  if($mecab_hinshi[$i] =~ "固有名詞"){
238
326
 
327
+
328
+
239
- $tf_idf[$k] = 2*$tf_idf[$k];#2倍にしたのはなぜか?なんで2倍にしようと考えたのか。
329
+ $tf_idf[$k] = 2*$tf_idf[$k];#2倍にしたのはなぜか?なんで2倍にしようと考えたのか。
240
330
 
241
331
  #固有名詞の重要度を2倍にすることで要約の正確さを高める
242
332
 
@@ -270,7 +360,9 @@
270
360
 
271
361
  #;で初期値を与えている。
272
362
 
363
+
364
+
273
- $alllength+=length(decode('utf-8',$mecab_char[$i-1]));
365
+ $alllength+=length(decode('utf-8',$mecab_char[$i-1]));
274
366
 
275
367
  #decodeでutf-8を使いperlに対して文字列として認識させ、length関数に渡して文字数を返してもらう
276
368
 
@@ -290,7 +382,9 @@
290
382
 
291
383
  $alllength+=length(decode('utf-8',$mecab_char[$i]));
292
384
 
385
+
386
+
293
- #decodeでutf-8を使いperlに対して文字列と認識させた #除いた分を全体の文字の長さにカウント
387
+ #decodeでutf-8を使いperlに対して文字列と認識させた #除いた分を全体の文字の長さにカウント
294
388
 
295
389
  $i++;#インクリメント
296
390
 
@@ -302,9 +396,13 @@
302
396
 
303
397
  $alllength+=length(decode('utf-8',$mecab_char[$i]));
304
398
 
399
+
400
+
305
401
  #decodeによりperlに対して文字列と認識させた #除いた分を全体の文字数にカウント
306
402
 
403
+
404
+
307
- $i++;#インクリメント
405
+ $i++;#インクリメント
308
406
 
309
407
 
310
408
 
@@ -330,122 +428,158 @@
330
428
 
331
429
  if(defined($sentence[$b])){ #definedで定義しているかを確認
332
430
 
431
+
432
+
333
- $sentence[$b]=$sentence[$b].$mecab_char[$i];#連結
433
+ $sentence[$b]=$sentence[$b].$mecab_char[$i];#連結
434
+
435
+
334
436
 
335
437
  }
336
438
 
439
+
440
+
337
- else {#未定義のとき最初の単語を入れる
441
+ else {#未定義のとき最初の単語を入れる
338
-
442
+
443
+
444
+
339
- $sentence[$b]=$mecab_char[$i];
445
+ $sentence[$b]=$mecab_char[$i];
446
+
447
+
448
+
449
+ }
450
+
451
+
340
452
 
341
453
  }
342
454
 
343
455
 
344
456
 
457
+ else {#EOSになったら文自体の重要度計算を行う
458
+
459
+
460
+
461
+ for($j = 0; $j < $k; $j++) { #kまでループする
462
+
463
+
464
+
465
+ $sum[$a]+=$tf_idf[$j];#計算した重要度を随時足していく
466
+
467
+ }
468
+
469
+
470
+
471
+
472
+
473
+ $alllength+=$length[$b];#文字数を足す
474
+
475
+
476
+
477
+ $k=0;
478
+
479
+
480
+
481
+ $a++;
482
+
483
+
484
+
485
+ $b++;
486
+
487
+
488
+
345
489
  }
346
490
 
491
+ }
492
+
493
+
494
+
495
+
496
+
497
+ for(; $count<=$percent * $alllength; $max = 0) {#パーセントとすべての文字数をかけ算して指定した文字に最大限近くなるまでループ
498
+
499
+
500
+
501
+
502
+
503
+ for($i = 0; $i <= $#sum; $i++){
504
+
347
505
 
348
506
 
349
- else {#EOSになったら文自体の重要度計算を行う
350
-
351
- for($j = 0; $j < $k; $j++) { #kまでループする
507
+ if($sum[$i]>$max){
352
-
353
-
354
-
508
+
509
+
510
+
355
- $sum[$a]+=$tf_idf[$j];#計算した重要度を随時足していく
511
+ $max=$sum[$i];#重要度が高かった場合上書きする
356
-
357
- }
358
512
 
359
513
 
360
514
 
515
+ $number=$i;
516
+
361
517
 
362
518
 
363
- $alllength+=$length[$b];#文字数を足す
364
-
365
- $k=0;
366
-
367
- $a++;
368
-
369
- $b++;
370
-
371
-
372
-
373
519
  }
374
520
 
375
- }
521
+ }
522
+
523
+
524
+
376
-
525
+ $sum[$number]=0; #一度一番高い重要度を0にする
526
+
527
+
528
+
377
-
529
+ $all_sentence[$number]=$sentence[$number];
530
+
378
-
531
+ #重要度の高い文を配列に入れる
532
+
533
+
534
+
379
-
535
+ $count+=$length[$number]; #文の文字数を加える
536
+
537
+
538
+
380
-
539
+ }
540
+
541
+
542
+
381
- for(; $count<=$percent * $alllength; $max = 0) {#パーセントとすべての文字数をかけ算し指定した文字に最大限近くなるまでループ
543
+ if($count > $percent * $alllength){#指定した文字数を越えてしまっ
544
+
545
+
546
+
382
-
547
+ undef($all_sentence[$number]);#undefを使って未定義にする
548
+
549
+
550
+
383
-
551
+ $count-=$length[$number];#countからlengthを引いたものをcountへ代入
552
+
553
+
554
+
384
-
555
+ #余計な文字数を引く
556
+
557
+
558
+
385
-
559
+ }
386
-
560
+
561
+
562
+
563
+
564
+
387
- for($i = 0; $i <= $#sum; $i++){
565
+ for($i = 0, $j = 1; $i <= $#sum; $i++){
566
+
567
+
568
+
569
+
570
+
571
+ if(defined($all_sentence[$i])){#definedで未定義部分を判別#真であれば
388
572
 
389
573
 
390
574
 
391
- if($sum[$i]>$max){
392
-
393
- $max=$sum[$i];#重要度が高かった場合上書きする
575
+ printf("%s\n", $all_sentence[$i]);#printfで出力する
394
-
395
- $number=$i;
576
+
396
-
397
-
398
-
577
+
578
+
399
- }
579
+ }
400
580
 
401
581
  }
402
582
 
403
-
404
-
405
- $sum[$number]=0; #一度一番高い重要度を0にする
406
-
407
- $all_sentence[$number]=$sentence[$number]; #重要度の高い文を配列に入れる
408
-
409
- $count+=$length[$number]; #文の文字数を加える
410
-
411
-
412
-
413
- }
414
-
415
-
416
-
417
- if($count > $percent * $alllength){#指定した文字数を越えてしまったら
418
-
419
-
420
-
421
- undef($all_sentence[$number]);#undefを使って未定義にする
422
-
423
-
424
-
425
- $count-=$length[$number];#countからlengthを引いたものをcountへ代入
426
-
427
- #余計な文字数を引く
428
-
429
- }
430
-
431
-
432
-
433
-
434
-
435
- for($i = 0, $j = 1; $i <= $#sum; $i++){
436
-
437
-
438
-
439
-
440
-
441
- if(defined($all_sentence[$i])){#definedで未定義部分を判別#真であれば
442
-
443
- printf("%s\n", $all_sentence[$i]);#printfで出力する
444
-
445
- }
446
-
447
- }
448
-
449
583
 
450
584
 
451
585