root / tmp / org.txm.groovy.core / src / groovy / org / txm / scripts / commands / mesures / Mesures.groovy @ 1000
History | View | Annotate | Download (4.1 kB)
1 | 1000 | mdecorde | package org.txm.scripts.functions.mesures;
|
---|---|---|---|
2 | 321 | mdecorde | |
3 | 479 | mdecorde | import java.io.File; |
4 | 479 | mdecorde | import java.io.FileOutputStream; |
5 | 479 | mdecorde | import java.io.IOException; |
6 | 479 | mdecorde | import java.io.OutputStreamWriter; |
7 | 479 | mdecorde | import java.io.Writer; |
8 | 479 | mdecorde | import java.text.DecimalFormat; |
9 | 479 | mdecorde | import java.util.ArrayList; |
10 | 479 | mdecorde | import java.util.Arrays; |
11 | 321 | mdecorde | |
12 | 479 | mdecorde | import org.txm.searchengine.cqp.corpus.Corpus; |
13 | 479 | mdecorde | import org.txm.searchengine.cqp.corpus.Partition; |
14 | 321 | mdecorde | |
15 | 321 | mdecorde | /**
|
16 | 321 | mdecorde | * Container of mesures
|
17 | 321 | mdecorde | *
|
18 | 321 | mdecorde | * @author mdecorde
|
19 | 321 | mdecorde | *
|
20 | 321 | mdecorde | */
|
21 | 321 | mdecorde | public class Mesures extends ArrayList<Mesure>{ |
22 | 321 | mdecorde | |
23 | 321 | mdecorde | private static final long serialVersionUID = 324346022230541761L; |
24 | 321 | mdecorde | |
25 | 321 | mdecorde | ArrayList<Corpus> data = new ArrayList<Corpus>(); |
26 | 321 | mdecorde | |
27 | 321 | mdecorde | public Mesures(Corpus corpus) {
|
28 | 321 | mdecorde | data = new ArrayList<Corpus>(); |
29 | 321 | mdecorde | data.add(corpus); |
30 | 321 | mdecorde | } |
31 | 321 | mdecorde | |
32 | 321 | mdecorde | public Mesures(ArrayList<Corpus> corpora) { |
33 | 321 | mdecorde | data = corpora; |
34 | 321 | mdecorde | println "hello TXM"
|
35 | 321 | mdecorde | } |
36 | 321 | mdecorde | |
37 | 321 | mdecorde | public Mesures(Partition partition) {
|
38 | 321 | mdecorde | data.addAll(partition.getParts()); |
39 | 321 | mdecorde | } |
40 | 321 | mdecorde | |
41 | 321 | mdecorde | public boolean add(Mesure mesure) { |
42 | 321 | mdecorde | if (!mesure.compute(data)) {
|
43 | 321 | mdecorde | return false; |
44 | 321 | mdecorde | } |
45 | 321 | mdecorde | |
46 | 321 | mdecorde | return super.add(mesure); |
47 | 321 | mdecorde | } |
48 | 321 | mdecorde | |
49 | 321 | mdecorde | public boolean export(Writer writer, String encoding, String colseparator, String txtseparator) throws IOException { |
50 | 321 | mdecorde | String line = "Mesures"; |
51 | 321 | mdecorde | for (Corpus c : data) {
|
52 | 321 | mdecorde | line += colseparator+txtseparator+c.getName().replaceAll(txtseparator,txtseparator+txtseparator)+txtseparator; |
53 | 321 | mdecorde | } |
54 | 321 | mdecorde | writer.write(line+"\n");
|
55 | 321 | mdecorde | |
56 | 321 | mdecorde | for (Mesure m : this) { |
57 | 321 | mdecorde | for (MesureResult r : m) {
|
58 | 321 | mdecorde | line = r.name; |
59 | 321 | mdecorde | for (int i = 0 ; i < r.data.length ; i++) |
60 | 321 | mdecorde | line += colseparator+r.data[i]; |
61 | 321 | mdecorde | writer.write(line+"\n");
|
62 | 321 | mdecorde | } |
63 | 321 | mdecorde | } |
64 | 321 | mdecorde | |
65 | 321 | mdecorde | return true; |
66 | 321 | mdecorde | } |
67 | 321 | mdecorde | |
68 | 321 | mdecorde | public boolean export(File outfile, String encoding, String colseparator, String txtseparator) throws IOException { |
69 | 321 | mdecorde | Writer writer = new OutputStreamWriter( |
70 | 321 | mdecorde | new FileOutputStream(outfile), encoding); //$NON-NLS-1$ |
71 | 321 | mdecorde | boolean rez = export(writer, encoding, colseparator, txtseparator); |
72 | 321 | mdecorde | writer.close(); |
73 | 321 | mdecorde | return rez;
|
74 | 321 | mdecorde | } |
75 | 321 | mdecorde | |
76 | 321 | mdecorde | DecimalFormat floatFormatter = new DecimalFormat("###,###.##"); |
77 | 321 | mdecorde | DecimalFormat intFormatter = new DecimalFormat("###,###,###"); |
78 | 321 | mdecorde | public void prettyPrint() { |
79 | 321 | mdecorde | ArrayList<String[]> lines = new ArrayList<String[]>(); |
80 | 321 | mdecorde | int[] maxx = new int[data.size()+1]; |
81 | 321 | mdecorde | int[] maxxDecimales = new int[data.size()+1]; |
82 | 321 | mdecorde | |
83 | 321 | mdecorde | |
84 | 321 | mdecorde | String[] line = new String[data.size() + 1]; |
85 | 321 | mdecorde | line[0] = "Mesures"; |
86 | 321 | mdecorde | maxx[0] = line[0].length(); |
87 | 321 | mdecorde | for (int i = 1 ; i <= data.size() ; i++) { |
88 | 321 | mdecorde | line[i] = data.get(i-1).getName();
|
89 | 321 | mdecorde | maxx[i] = line[i].length(); |
90 | 321 | mdecorde | } |
91 | 321 | mdecorde | lines.add(line); |
92 | 321 | mdecorde | |
93 | 321 | mdecorde | // fill lines
|
94 | 321 | mdecorde | for (Mesure m : this) { |
95 | 321 | mdecorde | for(MesureResult r : m) {
|
96 | 321 | mdecorde | line = new String[data.size()+1]; |
97 | 321 | mdecorde | line[0] = r.name;
|
98 | 321 | mdecorde | if (maxx[0] < r.name.length()) |
99 | 321 | mdecorde | maxx[0] = r.name.length();
|
100 | 321 | mdecorde | |
101 | 321 | mdecorde | int i = 1; |
102 | 321 | mdecorde | for (Object o : r.data) { |
103 | 321 | mdecorde | String str = ""+o; |
104 | 321 | mdecorde | if (o instanceof Integer) str = intFormatter.format(o); |
105 | 321 | mdecorde | else if (o instanceof Float) str = floatFormatter.format(o); |
106 | 321 | mdecorde | |
107 | 321 | mdecorde | line[i] = str; |
108 | 321 | mdecorde | |
109 | 321 | mdecorde | // if (maxx[i] < str.length())
|
110 | 321 | mdecorde | // maxx[i] = str.length();
|
111 | 321 | mdecorde | |
112 | 321 | mdecorde | int idxDecimal = str.indexOf(","); |
113 | 321 | mdecorde | if (idxDecimal > 0) { |
114 | 321 | mdecorde | idxDecimal = str.length() - idxDecimal; |
115 | 321 | mdecorde | if (maxxDecimales[i] < idxDecimal)
|
116 | 321 | mdecorde | maxxDecimales[i] = idxDecimal; |
117 | 321 | mdecorde | } |
118 | 321 | mdecorde | i++; |
119 | 321 | mdecorde | } |
120 | 321 | mdecorde | lines.add(line); |
121 | 321 | mdecorde | } |
122 | 321 | mdecorde | } |
123 | 321 | mdecorde | |
124 | 321 | mdecorde | // System.out.println("maxx: "+Arrays.toString(maxx));
|
125 | 321 | mdecorde | // System.out.println("maxxDecimales: "+Arrays.toString(maxxDecimales));
|
126 | 321 | mdecorde | |
127 | 321 | mdecorde | // fix cells right lengths (decimals)
|
128 | 321 | mdecorde | boolean notfirst = false; |
129 | 321 | mdecorde | for (String[] l : lines) { |
130 | 321 | mdecorde | for (int i = 1 ; i < data.size() +1; i++) { |
131 | 321 | mdecorde | String str = l[i];
|
132 | 321 | mdecorde | int nbDecimalToAdd = 0; |
133 | 321 | mdecorde | |
134 | 321 | mdecorde | if (str.indexOf(",") < 0) { |
135 | 321 | mdecorde | nbDecimalToAdd = maxxDecimales[i]; |
136 | 321 | mdecorde | } else {
|
137 | 321 | mdecorde | nbDecimalToAdd = maxxDecimales[i] - (str.length() - str.indexOf(","));
|
138 | 321 | mdecorde | } |
139 | 321 | mdecorde | |
140 | 321 | mdecorde | if (notfirst)
|
141 | 321 | mdecorde | for (int j = 0 ; j < nbDecimalToAdd ; j++) |
142 | 321 | mdecorde | str += " ";
|
143 | 321 | mdecorde | |
144 | 321 | mdecorde | if (maxx[i] < str.length())
|
145 | 321 | mdecorde | maxx[i] = str.length(); |
146 | 321 | mdecorde | |
147 | 321 | mdecorde | l[i] = str; |
148 | 321 | mdecorde | } |
149 | 321 | mdecorde | notfirst = true;
|
150 | 321 | mdecorde | } |
151 | 321 | mdecorde | |
152 | 321 | mdecorde | // fix cells left lengths (alignment)
|
153 | 321 | mdecorde | for (String[] l : lines) { |
154 | 321 | mdecorde | for (int i = 0 ; i < data.size() +1; i++) { |
155 | 321 | mdecorde | while (l[i].length() < maxx[i]) {
|
156 | 321 | mdecorde | if (i == 0) l[i] = ""+l[i]+" "; |
157 | 321 | mdecorde | else l[i] = " "+l[i]; |
158 | 321 | mdecorde | } |
159 | 321 | mdecorde | } |
160 | 321 | mdecorde | } |
161 | 321 | mdecorde | |
162 | 321 | mdecorde | // print cells
|
163 | 321 | mdecorde | for (String[] l : lines) { |
164 | 321 | mdecorde | for (int i = 0 ; i < data.size() +1; i++) { |
165 | 321 | mdecorde | if (i == 0) System.out.print(l[i]); |
166 | 321 | mdecorde | else System.out.print(" "+l[i]); |
167 | 321 | mdecorde | } |
168 | 321 | mdecorde | System.out.println(""); |
169 | 321 | mdecorde | } |
170 | 321 | mdecorde | } |
171 | 321 | mdecorde | } |