質問編集履歴

9

自己解決が進み問題点が絞られたため。

2020/11/06 20:45

投稿

hankechi78
hankechi78

スコア8

test CHANGED
@@ -1 +1 @@
1
- Java MalformedInputExceptionエラー,for文
1
+ Java MalformedInputExceptionエラー
test CHANGED
@@ -2,17 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ディレクトリ「path1」内の複数のファイル(dat形式)モデル(modele)として読み込み、このモデルに基づいて、「path2」で指定したファイルがど言語れているかを自動的判断せるプログラムを以下の通り設計しています。
5
+ 一つのフォルダ内の複数のファイルを読み込み、絶対パスを取得したのですが、なぜ二つ目.DS_Storeが余計に作成困っています。どうすれば作成されないようにできるでしょうか?
6
-
7
-
8
-
9
- 最終的に、メイン関数で下記TextAnalyseクラスのidentifierLangue(modeles)メソッドを呼び出し、1行「このテキストの言語は(言語モデル名)である」と表示させたいと思っています。
10
-
11
- しかし、なぜか以下の通り表示されます。
12
-
13
-
14
-
15
- また、path2で読み込んでいるの分析用テキストがフランス語(fr)テキストなのにもかかわらず(分析用テキストの単語数は十分長いと思います・・・)、結果はオランダ語(nl)が結果として表示されているので、モデルごとの合計得点の比較(下記参照)もうまくいっていないように見受けられます。
16
6
 
17
7
 
18
8
 
@@ -22,21 +12,17 @@
22
12
 
23
13
  ```
24
14
 
25
- このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
15
+ /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
26
16
 
27
- java.nio.charset.MalformedInputException: Input length = 1
17
+ /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/.DS_Store
28
18
 
29
- このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
19
+ /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/fr.dat
30
20
 
31
- このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
21
+ /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/en.dat
32
22
 
33
- このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
23
+ /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/it.dat
34
24
 
35
- このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
25
+ /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/de.dat
36
-
37
- このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
38
-
39
-
40
26
 
41
27
  ```
42
28
 
@@ -46,870 +32,36 @@
46
32
 
47
33
 
48
34
 
49
- Identifierクラス(メイン)
35
+ ```Java
50
36
 
51
- ```
52
-
53
- package langueIdentifier;
37
+ package test;
54
38
 
55
39
 
56
40
 
57
41
  import java.io.File;
58
42
 
59
- import java.util.ArrayList;
60
43
 
61
44
 
62
-
63
- public class Identifier {
45
+ public class Test3 {
64
46
 
65
47
 
66
48
 
67
49
  public static void main(String[] args) {
68
50
 
69
- File dir = new File("path1");
51
+ File dir = new File("/Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues");
70
52
 
71
53
  File files[] = dir.listFiles();
72
54
 
73
- ArrayList<Modele> modeles = new ArrayList<Modele>();
74
-
75
- //各言語ファイルの絶対パスを取得し、それを引数として各言語モデルにつきmodeleインスタンスを作成。identifierLangueメソッドを呼び出す前準備としてこれらのインスタンスを配列modelesに保存。
76
-
77
55
  for (int i=0 ; i < files.length; i++) {
78
56
 
79
-        String filePath = files[i].getAbsolutePath();
57
+ String fileName = files[i].getAbsolutePath();
80
58
 
81
- Modele modele = new Modele(filePath);
59
+ System.out.println(fileName);
82
60
 
83
- modeles.add(modele);
84
-
85
- TextAnalyse t = new TextAnalyse("path2");
86
-
87
- t.identifierLangue(modeles);
88
-
89
- }
61
+ }
90
-
91
-
92
62
 
93
63
  }
94
64
 
95
65
  }
96
66
 
97
67
  ```
98
-
99
-
100
-
101
- TextAnalyseクラス
102
-
103
- ```
104
-
105
- package langueIdentifier;
106
-
107
-
108
-
109
- import java.nio.file.*;
110
-
111
- import java.text.BreakIterator;
112
-
113
- import java.nio.charset.Charset;
114
-
115
- import java.io.BufferedReader;
116
-
117
- import java.io.IOException;
118
-
119
- import java.util.ArrayList;
120
-
121
- import java.util.HashMap;
122
-
123
-
124
-
125
- public class TextAnalyse {
126
-
127
-
128
-
129
- private String textFile;
130
-
131
- private ArrayList<String> mots;
132
-
133
-
134
-
135
- public TextAnalyse(String file) {
136
-
137
- this.textFile = file;
138
-
139
- this.mots = new ArrayList<String>();
140
-
141
- lectureDossier();
142
-
143
- }
144
-
145
-
146
-
147
- public void lectureDossier() {
148
-
149
- //この部分は正常に作動。path2の分析対象のテキストを単語に分割。テキストの言語を特定する上で、分割した各単語が各言語モデルの辞書(modeleクラスの注意書参照)に含まれているかを調べる必要があるため。
150
-
151
- Path p = Paths.get(textFile);
152
-
153
- Charset charset = Charset.forName("UTF-8");
154
-
155
- try (BufferedReader reader = Files.newBufferedReader(p, charset)){
156
-
157
- String line = reader.readLine();
158
-
159
- BreakIterator wb = BreakIterator.getWordInstance();
160
-
161
- while (line != null) {
162
-
163
- wb.setText(line);
164
-
165
- int lastIndex = wb.first();
166
-
167
- while (BreakIterator.DONE != lastIndex) {
168
-
169
- int firstIndex = lastIndex;
170
-
171
- lastIndex = wb.next();
172
-
173
- if (lastIndex != wb.DONE && Character.isLetterOrDigit(line.charAt(firstIndex))) {
174
-
175
- String mot = line.substring(firstIndex, lastIndex).toLowerCase();
176
-
177
- mots.add(mot);
178
-
179
- }
180
-
181
- }
182
-
183
- line = reader.readLine();
184
-
185
- }
186
-
187
- } catch (IOException ioe) {
188
-
189
- System.out.println(ioe.toString());
190
-
191
- }
192
-
193
- }
194
-
195
-
196
-
197
- public void identifierLangue(ArrayList<Modele> modeles) {
198
-
199
- //このメソッドで分析対象のテキストの言語を特定。分析対象のテキストに含まれている各単語がmodeleインスタンスの辞書に含まれていて、かつ点数の高い単語が多く含まれているほど、分析対象のテキストがそのmodeleの言語である可能性が高くなる。Scoreクラスのメソッドを用いて各モデルの点数を計算している。
200
-
201
-
202
-
203
- //各モデルの合計得点を最後に比べるためのマップを予め作成。
204
-
205
- HashMap<Modele, Double> scores = new HashMap<Modele, Double>();
206
-
207
- //最高得点を獲得したモデルを格納して最後に表示するための前準備。
208
-
209
- ArrayList<Modele> list = new ArrayList<Modele>();
210
-
211
- //各モデルの合計得点を計算。
212
-
213
- for (Modele modele: modeles) {
214
-
215
- HashMap<String, Double> d = modele.getDict();
216
-
217
- Score score = new Score(modele);
218
-
219
- for (String mot : mots) {
220
-
221
- if (d.containsKey(mot)) {
222
-
223
- score.addPoint(mot);
224
-
225
- }
226
-
227
- Double totalScore = score.getScore();
228
-
229
- scores.put(modele, totalScore);
230
-
231
- }
232
-
233
- //合計得点を比較。
234
-
235
- Object firstModele = scores.keySet().toArray()[0];
236
-
237
- Double scoreMax = scores.get(firstModele);
238
-
239
- for (int k = 1 ; k < scores.size(); k++) {
240
-
241
- Object modeleK = scores.keySet().toArray()[k];
242
-
243
- Double scoreK = scores.get(modeleK);
244
-
245
- if (scoreMax < scoreK) {
246
-
247
- scoreMax = scoreK;
248
-
249
- }
250
-
251
- }
252
-
253
- //最高得点を取ったモデルを特定し、分析対象のテキストがそのモデルの言語であることをユーザーに伝える。
254
-
255
- for (Modele key : scores.keySet()) {
256
-
257
- if(scores.get(key).equals(scoreMax)) {
258
-
259
- Modele keyCible = key;
260
-
261
- list.add(keyCible);
262
-
263
- }
264
-
265
- }
266
-
267
- }
268
-
269
- System.out.println("このテキストの言語は次のファイルの言語です : " + list.get(0).getFile());
270
-
271
-
272
-
273
- }
274
-
275
- }
276
-
277
-
278
-
279
- ```
280
-
281
-
282
-
283
- Modeleクラス
284
-
285
- ```
286
-
287
- package langueIdentifier;
288
-
289
-
290
-
291
- import java.nio.file.*;
292
-
293
- import java.nio.charset.Charset;
294
-
295
- import java.io.BufferedReader;
296
-
297
- import java.io.File;
298
-
299
- import java.io.IOException;
300
-
301
- import java.util.ArrayList;
302
-
303
- import java.util.HashMap;
304
-
305
-
306
-
307
- public class Modele {
308
-
309
-
310
-
311
- private String modeleFile;
312
-
313
- //modeleクラスのインスタンスは①単語と②その単語の重み(点数)をペアにした辞書を持つ(末尾の「補足情報」参照)。
314
-
315
- private HashMap<String, Double> dictionaire;
316
-
317
-
318
-
319
- public Modele(String file) {
320
-
321
- this.modeleFile = file;
322
-
323
- this.dictionaire = new HashMap<String, Double>();
324
-
325
- lectureModele();
326
-
327
- }
328
-
329
-
330
-
331
- public void lectureModele() {
332
-
333
- Path p = Paths.get(modeleFile);
334
-
335
- Charset charset = Charset.forName("UTF-8");
336
-
337
- try (BufferedReader reader = Files.newBufferedReader(p, charset)){
338
-
339
- String line = reader.readLine();
340
-
341
- while (line != null) {
342
-
343
- if (! line.startsWith("#")) {
344
-
345
- String[] lineSplit = line.split(" ");
346
-
347
- dictionaire.put(lineSplit[0], Double.parseDouble(lineSplit[1]));
348
-
349
- }
350
-
351
- line = reader.readLine();
352
-
353
- }
354
-
355
- } catch (IOException ioe) {
356
-
357
- System.out.println(ioe.toString());
358
-
359
- }
360
-
361
- }
362
-
363
-
364
-
365
- public String getFile() {
366
-
367
- return modeleFile;
368
-
369
- }
370
-
371
-
372
-
373
- public HashMap<String, Double> getDict() {
374
-
375
- return dictionaire;
376
-
377
-
378
-
379
- }
380
-
381
-
382
-
383
-
384
-
385
- }
386
-
387
-
388
-
389
- ```
390
-
391
-
392
-
393
- Scoreクラス
394
-
395
- ```
396
-
397
- package langueIdentifier;
398
-
399
-
400
-
401
- import java.util.HashMap;
402
-
403
-
404
-
405
- public class Score {
406
-
407
-
408
-
409
- private Modele modele;
410
-
411
- HashMap<String, Double> points;
412
-
413
-
414
-
415
- public Score(Modele modele) {
416
-
417
- this.modele = modele;
418
-
419
- this.points = new HashMap<>();
420
-
421
- }
422
-
423
- public void addPoint(String mot){
424
-
425
- HashMap<String, Double> d = modele.getDict();
426
-
427
- if (d.containsKey(mot)) {
428
-
429
- points.put(mot, d.get(mot));
430
-
431
- }
432
-
433
- }
434
-
435
-
436
-
437
- public Double getScore() {
438
-
439
- Double sum = 0.0;
440
-
441
- for (Double d : points.values()) {
442
-
443
- sum += d;
444
-
445
- }
446
-
447
- return sum;
448
-
449
- }
450
-
451
- }
452
-
453
- ```
454
-
455
-
456
-
457
-
458
-
459
- ### 補足情報
460
-
461
-
462
-
463
- 分析対象のテキストの例(フランス語)
464
-
465
- Le climatosceptique de la Maison-Blanche a besoin de tenir certaines de ses promesses et asseoir ainsi un quinquennat déjà contesté dans l'ensemble du pays.
466
-
467
- Le chat paraissait malade.
468
-
469
- (抜粋)
470
-
471
-
472
-
473
- 言語モデルのファイル(英語 En)(抜粋)
474
-
475
- (#から開始するとteratail上で拡大されて表示されてしまうので、便宜的に””で括っています)
476
-
477
- "#Based on the PROJECT GUTENBERG EBOOK #7151 CLELIA (8clel10.txt)
478
-
479
- all 0.244
480
-
481
- fanno 0.013
482
-
483
- lanificio 0.016
484
-
485
- soccorso 0.011
486
-
487
- figli 0.026
488
-
489
- volle 0.016
490
-
491
- nuovi 0.025
492
-
493
- così 0.162
494
-
495
- monte 0.016
496
-
497
- benché 0.035"
498
-
499
-
500
-
501
-
502
-
503
- 言語モデルのファイル(仏語 Fr)
504
-
505
- "#Based on the PROJECT GUTENBERG EBOOK LE DOCTEUR OX #11589 (11589-8.txt)
506
-
507
- tm 0.076
508
-
509
- certain 0.017
510
-
511
- oncle 0.015
512
-
513
- nord 0.057
514
-
515
- aux 0.180
516
-
517
- te 0.013
518
-
519
- rouages 0.015
520
-
521
- vers 0.114
522
-
523
- instants 0.020
524
-
525
- scène 0.012
526
-
527
- rapidement 0.024
528
-
529
- besoin 0.013
530
-
531
- tua 0.012
532
-
533
- airs 0.016
534
-
535
- seulement 0.037
536
-
537
- moins 0.088
538
-
539
- énorme 0.011
540
-
541
- vieillard 0.056
542
-
543
- pu 0.036
544
-
545
- lorsque 0.025
546
-
547
- parler 0.016
548
-
549
- revint 0.017
550
-
551
- voici 0.029
552
-
553
- docteur 0.119
554
-
555
- tant 0.029
556
-
557
- ombre 0.012
558
-
559
- guide 0.024
560
-
561
- sombre 0.012
562
-
563
- ami 0.027
564
-
565
- file 0.012
566
-
567
- horloger 0.051
568
-
569
- horloges 0.025
570
-
571
- cents 0.036
572
-
573
- beaucoup 0.013
574
-
575
- is 0.044
576
-
577
- étaient 0.130
578
-
579
- it 0.020
580
-
581
- surface 0.013
582
-
583
- demi 0.027
584
-
585
- soit 0.019
586
-
587
- lendemain 0.023
588
-
589
- mots 0.023
590
-
591
- il 1.410
592
-
593
- raison 0.031
594
-
595
- soir 0.033
596
-
597
- goûter 0.013
598
-
599
- pauvre 0.019
600
-
601
- if 0.028
602
-
603
- lieues 0.019
604
-
605
- par 0.452
606
-
607
- pas 0.740
608
-
609
- quand 0.118
610
-
611
- puis 0.094
612
-
613
- impossible 0.013
614
-
615
- belle 0.028
616
-
617
- s 0.826
618
-
619
- édouard 0.011
620
-
621
- verne 0.019
622
-
623
- quant 0.019
624
-
625
- grand 0.074
626
-
627
- résister 0.011
628
-
629
- quiquendone 0.106
630
-
631
- pied 0.032
632
-
633
- heures 0.110
634
-
635
- cinq 0.064
636
-
637
- commune 0.016
638
-
639
- arriver 0.015
640
-
641
- vallée 0.012
642
-
643
- marches 0.013
644
-
645
- monter 0.017
646
-
647
- équipage 0.044
648
-
649
- dents 0.013
650
-
651
- elle 0.266
652
-
653
- cas 0.012
654
-
655
- moment 0.099
656
-
657
- commença 0.012
658
-
659
- vieux 0.037
660
-
661
- moyen 0.028
662
-
663
- pourquoi 0.037
664
-
665
- trouva 0.012
666
-
667
- premiers 0.020
668
-
669
- oeuvre 0.023
670
-
671
- travers 0.027
672
-
673
- in 0.086
674
-
675
- entre 0.079
676
-
677
- également 0.011
678
-
679
- dessous 0.033
680
-
681
- pittonaccio 0.019
682
-
683
- nacelle 0.032
684
-
685
- lequel 0.033
686
-
687
- without 0.011
688
-
689
- glacier 0.016
690
-
691
- bonne 0.016
692
-
693
- y 0.217
694
-
695
- demeurait 0.013
696
-
697
- the 0.261
698
-
699
- voulez 0.017
700
-
701
- demanda 0.052
702
-
703
- lest 0.012
704
-
705
- coup 0.037
706
-
707
- violence 0.013
708
-
709
- devint 0.012
710
-
711
- ci 0.037
712
-
713
- semblaient 0.013
714
-
715
- arrêter 0.013
716
-
717
- va 0.024
718
-
719
- conseiller 0.110
720
-
721
- colère 0.012
722
-
723
- part 0.015
724
-
725
- vivement 0.012
726
-
727
- souper 0.011
728
-
729
- guides 0.052
730
-
731
- vérité 0.013
732
-
733
- quelle 0.020
734
-
735
- vie 0.065
736
-
737
- jules 0.012
738
-
739
- retrouver 0.017
740
-
741
- difficile 0.016
742
-
743
- bloc 0.016
744
-
745
- plateau 0.019
746
-
747
- enfin 0.084
748
-
749
- événement 0.011
750
-
751
- brevent 0.012
752
-
753
- vain 0.013
754
-
755
- départ 0.031
756
-
757
- combien 0.012
758
-
759
- matelots 0.035
760
-
761
- forces 0.013
762
-
763
- provisions 0.027
764
-
765
- certaine 0.017
766
-
767
- vaste 0.011
768
-
769
- haut 0.040
770
-
771
- succès 0.013
772
-
773
- possible 0.027
774
-
775
- mot 0.021
776
-
777
- demande 0.012
778
-
779
- moi 0.122
780
-
781
- mon 0.188
782
-
783
- ayant 0.019
784
-
785
- compte 0.021
786
-
787
- usine 0.011
788
-
789
- mis 0.027
790
-
791
- santé 0.019
792
-
793
- naufragés 0.015
794
-
795
- perdus 0.019
796
-
797
- d 1.052
798
-
799
- bruit 0.055
800
-
801
- tomber 0.013
802
-
803
- mesure 0.020
804
-
805
- firent 0.012
806
-
807
- ordinaire 0.013
808
-
809
- parfois 0.013
810
-
811
- donations 0.020
812
-
813
- t 0.088
814
-
815
- où 0.190
816
-
817
- works 0.043
818
-
819
- dernier 0.024
820
-
821
- doit 0.015
822
-
823
- ballon 0.075
824
-
825
- ennemis 0.012
826
-
827
- autres 0.061
828
-
829
- vais 0.011
830
-
831
- pierre 0.055
832
-
833
- époque 0.024
834
-
835
- ah 0.039
836
-
837
- orgueil 0.019
838
-
839
- ça 0.012
840
-
841
- sommes 0.035
842
-
843
- bord 0.037
844
-
845
- sommet 0.040
846
-
847
- quoique 0.011
848
-
849
- fou 0.015
850
-
851
- rien 0.092
852
-
853
- est 0.540
854
-
855
- for 0.037
856
-
857
- livres 0.013
858
-
859
- peu 0.140
860
-
861
- depuis 0.087
862
-
863
- située 0.011
864
-
865
- disait 0.027
866
-
867
- vivres 0.012
868
-
869
- quinze 0.017
870
-
871
- voilà 0.028
872
-
873
- mont 0.061
874
-
875
- dernière 0.012
876
-
877
- avoir 0.084
878
-
879
- foi 0.013
880
-
881
- autrefois 0.017
882
-
883
- descendre 0.025
884
-
885
- be 0.028
886
-
887
- expérience 0.019
888
-
889
- peau 0.016
890
-
891
- soigneusement 0.011
892
-
893
- agreement 0.024
894
-
895
- préparatifs 0.019
896
-
897
- fois 0.076
898
-
899
- pouvaient 0.027
900
-
901
- exemple 0.017
902
-
903
- by 0.032
904
-
905
- zéro 0.020
906
-
907
- on 0.492
908
-
909
- une 0.940
910
-
911
- soudain 0.016
912
-
913
-
914
-
915
- "

8

問題点につき追記

2020/11/06 20:45

投稿

hankechi78
hankechi78

スコア8

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,10 @@
12
12
 
13
13
 
14
14
 
15
+ また、path2で読み込んでいるの分析用テキストがフランス語(fr)テキストなのにもかかわらず(分析用テキストの単語数は十分長いと思います・・・)、結果はオランダ語(nl)が結果として表示されているので、モデルごとの合計得点の比較(下記参照)もうまくいっていないように見受けられます。
16
+
17
+
18
+
15
19
  ### 発生している問題
16
20
 
17
21
 
@@ -462,7 +466,7 @@
462
466
 
463
467
  Le chat paraissait malade.
464
468
 
465
-
469
+ (抜粋)
466
470
 
467
471
 
468
472
 
@@ -906,36 +910,6 @@
906
910
 
907
911
  soudain 0.016
908
912
 
909
- être 0.138
913
+
910
-
911
- tricasse 0.132
912
-
913
- oh 0.011
914
-
915
- of 0.170
916
-
917
- cornbutte 0.270
918
-
919
- douze 0.012
920
-
921
- aperçut 0.013
922
-
923
- plus 0.605
924
-
925
- horizon 0.024
926
-
927
- ox 0.087
928
-
929
- ou 0.118
930
-
931
- sept 0.020
932
-
933
- or 0.135
934
-
935
- silence 0.024
936
-
937
- plan 0.011
938
-
939
- escalier 0.015
940
914
 
941
915
  "

7

一部自己解決のため質問の修正

2020/11/06 15:49

投稿

hankechi78
hankechi78

スコア8

test CHANGED
@@ -1 +1 @@
1
- Java nio.file.NoSuchFileExceptionエラー,for文
1
+ Java MalformedInputExceptionエラー,for文
test CHANGED
@@ -18,25 +18,21 @@
18
18
 
19
19
  ```
20
20
 
21
+ このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
22
+
21
- java.nio.file.NoSuchFileException: nl.dat
23
+ java.nio.charset.MalformedInputException: Input length = 1
22
-
23
- このテキストの言語は : nl.dat
24
+
24
-
25
- java.nio.file.NoSuchFileException: fr.dat
26
-
27
- このテキストの言語は : nl.dat
28
-
29
- java.nio.file.NoSuchFileException: en.dat
25
+ このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
30
-
31
- このテキストの言語は : nl.dat
26
+
32
-
33
- java.nio.file.NoSuchFileException: it.dat
27
+ このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
34
-
35
- このテキストの言語は : nl.dat
28
+
36
-
37
- java.nio.file.NoSuchFileException: de.dat
29
+ このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
38
-
30
+
39
- このテキストの言語は : nl.dat
31
+ このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
32
+
33
+ このテキストの言語は次のファイルの言語です : /Users/hankechi78/Desktop/Algorithmique et programmation/java/Exercice_note2/modeles_langues/nl.dat
34
+
35
+
40
36
 
41
37
  ```
42
38
 
@@ -76,9 +72,9 @@
76
72
 
77
73
  for (int i=0 ; i < files.length; i++) {
78
74
 
79
- String fileName = files[i].getName();
75
+        String filePath = files[i].getAbsolutePath();
80
-
76
+
81
- Modele modele = new Modele(fileName);
77
+ Modele modele = new Modele(filePath);
82
78
 
83
79
  modeles.add(modele);
84
80
 
@@ -266,7 +262,7 @@
266
262
 
267
263
  }
268
264
 
269
- System.out.println("このテキストの言語は : " + list.get(0).getFile());
265
+ System.out.println("このテキストの言語は次のファイルの言語です : " + list.get(0).getFile());
270
266
 
271
267
 
272
268
 
@@ -454,16 +450,6 @@
454
450
 
455
451
 
456
452
 
457
- ### 試したこと
458
-
459
-
460
-
461
- TextAnalyseクラスのlectureDossier() メソッドとModeleクラスをそれぞれ切り出し、独立のmain関数として動きを調べたところ、うまく作動しました。
462
-
463
- また、langueIdentifierクラスも、テストしたところpath1内の各言語モデルファイルの絶対パスをそれぞれ取得し、各言語につきmodeleインスタンスを作成するところまでは問題なくできているようです。
464
-
465
- どこが問題なのかがわかりません。
466
-
467
453
 
468
454
 
469
455
  ### 補足情報

6

補足

2020/11/06 15:44

投稿

hankechi78
hankechi78

スコア8

test CHANGED
File without changes
test CHANGED
@@ -462,9 +462,7 @@
462
462
 
463
463
  また、langueIdentifierクラスも、テストしたところpath1内の各言語モデルファイルの絶対パスをそれぞれ取得し、各言語につきmodeleインスタンスを作成するところまでは問題なくできているようです。
464
464
 
465
-
466
-
467
- 問題はTextAnalyseクラスのidentifierLangue(ArrayList<Modele> modeles)メソッドにあるように思われますが、エラーメッセージが表示されるわけでもなく、どこが問題なのかがわかりません。
465
+ どこが問題なのかがわかりません。
468
466
 
469
467
 
470
468
 

5

一部解決したため修正

2020/11/06 15:30

投稿

hankechi78
hankechi78

スコア8

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  最終的に、メイン関数で下記TextAnalyseクラスのidentifierLangue(modeles)メソッドを呼び出し、1行「このテキストの言語は(言語モデル名)である」と表示させたいと思っています。
10
10
 
11
- しかし、なぜか以下の通り全ての言語を認識してしまいます。また、java.nio.file.NoSuchFileExceptionも表示されます。
11
+ しかし、なぜか以下の通り表示されます。
12
12
 
13
13
 
14
14
 
@@ -26,42 +26,18 @@
26
26
 
27
27
  このテキストの言語は : nl.dat
28
28
 
29
- このテキストの言語は : fr.dat
29
+ java.nio.file.NoSuchFileException: en.dat
30
30
 
31
31
  このテキストの言語は : nl.dat
32
32
 
33
- java.nio.file.NoSuchFileException: en.dat
33
+ java.nio.file.NoSuchFileException: it.dat
34
34
 
35
35
  このテキストの言語は : nl.dat
36
36
 
37
- (中略)
38
-
39
- java.nio.file.NoSuchFileException: it.dat
40
-
41
- (中略)
42
-
43
- このテキストの言語は : en.dat
44
-
45
- このテキストの言語は : fr.dat
46
-
47
- (中略)
48
-
49
- このテキストの言語は : it.dat
50
-
51
37
  java.nio.file.NoSuchFileException: de.dat
52
38
 
53
- (中略)
54
-
55
- このテキストの言語は : en.dat
56
-
57
- このテキストの言語は : fr.dat
58
-
59
39
  このテキストの言語は : nl.dat
60
40
 
61
- このテキストの言語は : it.dat
62
-
63
- このテキストの言語は : de.dat
64
-
65
41
  ```
66
42
 
67
43
 
@@ -228,6 +204,10 @@
228
204
 
229
205
  HashMap<Modele, Double> scores = new HashMap<Modele, Double>();
230
206
 
207
+ //最高得点を獲得したモデルを格納して最後に表示するための前準備。
208
+
209
+ ArrayList<Modele> list = new ArrayList<Modele>();
210
+
231
211
  //各モデルの合計得点を計算。
232
212
 
233
213
  for (Modele modele: modeles) {
@@ -278,7 +258,7 @@
278
258
 
279
259
  Modele keyCible = key;
280
260
 
281
- System.out.println("このテキストの言語は : " + keyCible.getFile());
261
+ list.add(keyCible);
282
262
 
283
263
  }
284
264
 
@@ -286,10 +266,16 @@
286
266
 
287
267
  }
288
268
 
269
+ System.out.println("このテキストの言語は : " + list.get(0).getFile());
270
+
271
+
272
+
289
273
  }
290
274
 
291
275
  }
292
276
 
277
+
278
+
293
279
  ```
294
280
 
295
281
 

4

補足

2020/11/06 15:27

投稿

hankechi78
hankechi78

スコア8

test CHANGED
File without changes
test CHANGED
@@ -474,7 +474,7 @@
474
474
 
475
475
  TextAnalyseクラスのlectureDossier() メソッドとModeleクラスをそれぞれ切り出し、独立のmain関数として動きを調べたところ、うまく作動しました。
476
476
 
477
- また、langueIdentifierクラスも、テストしたところpath1内の各言語モデルファイルの絶対パスをそれぞれ取得するところまでは問題なくできているようです。
477
+ また、langueIdentifierクラスも、テストしたところpath1内の各言語モデルファイルの絶対パスをそれぞれ取得し、各言語につきmodeleインスタンスを作成するところまでは問題なくできているようです。
478
478
 
479
479
 
480
480
 

3

TextAnalyseクラスの補足

2020/11/06 14:48

投稿

hankechi78
hankechi78

スコア8

test CHANGED
File without changes
test CHANGED
@@ -170,7 +170,7 @@
170
170
 
171
171
  public void lectureDossier() {
172
172
 
173
- //この部分は正常に作動。path2の分析対象のテキストを単語に分割。
173
+ //この部分は正常に作動。path2の分析対象のテキストを単語に分割。テキストの言語を特定する上で、分割した各単語が各言語モデルの辞書(modeleクラスの注意書参照)に含まれているかを調べる必要があるため。
174
174
 
175
175
  Path p = Paths.get(textFile);
176
176
 
@@ -968,38 +968,4 @@
968
968
 
969
969
  escalier 0.015
970
970
 
971
- tel 0.015
972
-
973
- agissait 0.012
974
-
975
- pourtant 0.013
976
-
977
- troisième 0.012
978
-
979
- pays 0.016
980
-
981
- mers 0.015
982
-
983
- sol 0.017
984
-
985
- son 0.488
986
-
987
- bientôt 0.080
988
-
989
- loin 0.031
990
-
991
- rues 0.027
992
-
993
- parlait 0.012
994
-
995
- maître 0.190
996
-
997
- lune 0.012
998
-
999
- lieu 0.037
1000
-
1001
- plaisir 0.019
1002
-
1003
- jeunes 0.013
1004
-
1005
971
  "

2

Modeleインスタンスの説明を補足

2020/11/06 14:45

投稿

hankechi78
hankechi78

スコア8

test CHANGED
File without changes
test CHANGED
@@ -324,6 +324,8 @@
324
324
 
325
325
  private String modeleFile;
326
326
 
327
+ //modeleクラスのインスタンスは①単語と②その単語の重み(点数)をペアにした辞書を持つ(末尾の「補足情報」参照)。
328
+
327
329
  private HashMap<String, Double> dictionaire;
328
330
 
329
331
 
@@ -518,7 +520,7 @@
518
520
 
519
521
  monte 0.016
520
522
 
521
- benché 0.035
523
+ benché 0.035"
522
524
 
523
525
 
524
526
 

1

プログラムの設計につき補足。

2020/11/06 14:41

投稿

hankechi78
hankechi78

スコア8

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- 最終的に、下記TextAnalyseクラスのidentifierLangue(modeles)メソッドを呼び出し、1行「このテキストの言語は(言語モデル名)である」と表示させたいと思っています。
9
+ 最終的に、メイン関数で下記TextAnalyseクラスのidentifierLangue(modeles)メソッドを呼び出し、1行「このテキストの言語は(言語モデル名)である」と表示させたいと思っています。
10
10
 
11
11
  しかし、なぜか以下の通り全ての言語を認識してしまいます。また、java.nio.file.NoSuchFileExceptionも表示されます。
12
12
 
@@ -70,7 +70,7 @@
70
70
 
71
71
 
72
72
 
73
- Identifierクラス
73
+ Identifierクラス(メイン)
74
74
 
75
75
  ```
76
76
 
@@ -96,6 +96,8 @@
96
96
 
97
97
  ArrayList<Modele> modeles = new ArrayList<Modele>();
98
98
 
99
+ //各言語ファイルの絶対パスを取得し、それを引数として各言語モデルにつきmodeleインスタンスを作成。identifierLangueメソッドを呼び出す前準備としてこれらのインスタンスを配列modelesに保存。
100
+
99
101
  for (int i=0 ; i < files.length; i++) {
100
102
 
101
103
  String fileName = files[i].getName();
@@ -168,6 +170,8 @@
168
170
 
169
171
  public void lectureDossier() {
170
172
 
173
+ //この部分は正常に作動。path2の分析対象のテキストを単語に分割。
174
+
171
175
  Path p = Paths.get(textFile);
172
176
 
173
177
  Charset charset = Charset.forName("UTF-8");
@@ -216,8 +220,16 @@
216
220
 
217
221
  public void identifierLangue(ArrayList<Modele> modeles) {
218
222
 
223
+ //このメソッドで分析対象のテキストの言語を特定。分析対象のテキストに含まれている各単語がmodeleインスタンスの辞書に含まれていて、かつ点数の高い単語が多く含まれているほど、分析対象のテキストがそのmodeleの言語である可能性が高くなる。Scoreクラスのメソッドを用いて各モデルの点数を計算している。
224
+
225
+
226
+
227
+ //各モデルの合計得点を最後に比べるためのマップを予め作成。
228
+
219
229
  HashMap<Modele, Double> scores = new HashMap<Modele, Double>();
220
230
 
231
+ //各モデルの合計得点を計算。
232
+
221
233
  for (Modele modele: modeles) {
222
234
 
223
235
  HashMap<String, Double> d = modele.getDict();
@@ -238,6 +250,8 @@
238
250
 
239
251
  }
240
252
 
253
+ //合計得点を比較。
254
+
241
255
  Object firstModele = scores.keySet().toArray()[0];
242
256
 
243
257
  Double scoreMax = scores.get(firstModele);
@@ -256,6 +270,8 @@
256
270
 
257
271
  }
258
272
 
273
+ //最高得点を取ったモデルを特定し、分析対象のテキストがそのモデルの言語であることをユーザーに伝える。
274
+
259
275
  for (Modele key : scores.keySet()) {
260
276
 
261
277
  if(scores.get(key).equals(scoreMax)) {
@@ -554,72 +570,6 @@
554
570
 
555
571
  parler 0.016
556
572
 
557
- après 0.146
558
-
559
- cent 0.029
560
-
561
- milieu 0.049
562
-
563
- immense 0.023
564
-
565
- précautions 0.012
566
-
567
- glace 0.087
568
-
569
- fidèle 0.017
570
-
571
- zacharius 0.151
572
-
573
- brick 0.084
574
-
575
- chamonix 0.021
576
-
577
- dut 0.013
578
-
579
- choses 0.020
580
-
581
- suivre 0.015
582
-
583
- direction 0.013
584
-
585
- telle 0.017
586
-
587
- gaz 0.049
588
-
589
- monsieur 0.083
590
-
591
- lumière 0.013
592
-
593
- subitement 0.011
594
-
595
- ceux 0.021
596
-
597
- uns 0.016
598
-
599
- eut 0.051
600
-
601
- notables 0.031
602
-
603
- quatre 0.059
604
-
605
- argent 0.012
606
-
607
- marche 0.040
608
-
609
- soixante 0.019
610
-
611
- fut 0.235
612
-
613
- tête 0.072
614
-
615
- avions 0.016
616
-
617
- ait 0.012
618
-
619
- élevé 0.013
620
-
621
- n 0.531
622
-
623
573
  revint 0.017
624
574
 
625
575
  voici 0.029