Statistics
| Revision:

root / tmp / org.txm.groovy.core / src / groovy / org / txm / scripts / prototypes / advancedPartition.groovy @ 2163

History | View | Annotate | Download (20.4 kB)

1 321 mdecorde
package tests
2 321 mdecorde
3 324 mdecorde
import org.txm.rcp.views.*
4 321 mdecorde
import org.txm.searchengine.cqp.corpus.*
5 321 mdecorde
6 321 mdecorde
7 321 mdecorde
/*
8 321 mdecorde
import java.awt.Dimension
9 321 mdecorde
import java.util.UUID;
10 321 mdecorde

11 321 mdecorde
import javax.swing.JFrame;
12 321 mdecorde
import javax.swing.JOptionPane;
13 321 mdecorde

14 321 mdecorde
import org.txm.Toolbox
15 321 mdecorde
import org.txm.searchengine.cqp.MemCqiClient
16 321 mdecorde
import org.txm.searchengine.cqp.MemCqiServer
17 321 mdecorde
import org.txm.searchengine.cqp.corpus.*
18 479 mdecorde
import org.txm.searchengine.cqp.ReferencePattern
19 324 mdecorde
import org.txm.rcp.views.CorporaView
20 321 mdecorde
import org.txm.searchengine.cqp.corpus.query.Query
21 321 mdecorde
*/
22 321 mdecorde
23 321 mdecorde
24 321 mdecorde
/**
25 321 mdecorde
 * Create partition with advanced CQL queries and autoname the parts.
26 321 mdecorde
 * Can create partitions by defining a multi-level structural units hierarchy or by defining several properties values for one structural unit.
27 321 mdecorde
 * Can define some structural units to remove from the resulting parts subcorpus.
28 321 mdecorde
 *
29 321 mdecorde
 */
30 321 mdecorde
31 321 mdecorde
// TODO : Log
32 321 mdecorde
println "******************************** Starting ********************************************";
33 321 mdecorde
34 321 mdecorde
35 321 mdecorde
// *************************** User parameters ************************************************************
36 321 mdecorde
37 321 mdecorde
38 321 mdecorde
// Test 1 : partition en excluant des sections
39 321 mdecorde
def CORPUS_NAME = "LIVRETOPERA2"                                                                // The name of the corpus to partition
40 321 mdecorde
41 321 mdecorde
def SUBCORPUS_NAME = null                                                                                // The name of the subcorpus to partition
42 321 mdecorde
//def SUBCORPUS_NAME = "TEST"                                                                                // The name of the subcorpus to partition if needed
43 321 mdecorde
// FIXME: subcorpus management is bugged, when trying to create a CA on a Partition created on a subcorpus, it doesn't work because of the getLexicon() method which throws a CqiCqpErrorErrorGeneral exception
44 321 mdecorde
45 321 mdecorde
PartitionQueriesGenerator.STRUCTURAL_UNITS = ['sp'];                                         // Applying the partition on these structural units
46 321 mdecorde
PartitionQueriesGenerator.STRUCTURAL_UNITS_PROPERTIES = ['who'];                // Applying the partition on these properties of structural units defined above
47 321 mdecorde
48 321 mdecorde
PartitionQueriesGenerator.STRUCTURAL_UNITS_TO_IGNORE = ['speaker'];        // These structural units will be removed from the partition. NOTE : If doing that you need to define an EXPAND_TARGET
49 321 mdecorde
                                                                                                                                                // if you want some subcorpus parts that will manage sequential positions queries
50 321 mdecorde
51 321 mdecorde
PartitionQueriesGenerator.EXPAND_TARGET = 'lg';                                                 // Expand the results to this structural unit parent target. If some structural units to ignore are defined
52 321 mdecorde
                                                                                                                                                // and the expand target is upper on the hierarchy than them, the structural units to ignore WON'T be ignored
53 321 mdecorde
54 321 mdecorde
//PartitionQueriesGenerator.PARTITION_NAME = 'gugu';                                        // The partition name. If empty or not defined, the partition will be autonamed regarding of the structural units and properties
55 321 mdecorde
56 321 mdecorde
57 321 mdecorde
58 321 mdecorde
59 321 mdecorde
// Test 2 : partition sur arborescence (multi-niveau sur 2 niveaux)
60 321 mdecorde
//def CORPUS_NAME = "LIVRETOPERA10TEXTES"
61 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS = ['text', 'div1'];
62 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS_PROPERTIES = ['id', 'name'];
63 321 mdecorde
64 321 mdecorde
65 321 mdecorde
// Test 3 : partition sur arborescence (multi-niveau sur 3 niveaux)
66 321 mdecorde
//def CORPUS_NAME = "LIVRETOPERA10TEXTES"
67 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS = ['text', 'div1', 'div2'];
68 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS_PROPERTIES = ['id', 'name', 'name'];
69 321 mdecorde
70 321 mdecorde
71 321 mdecorde
// Test 4 : partition sur arborescence (multi-niveau sur 4 niveaux)
72 321 mdecorde
// Ajouter le 'n' permet par exemple ici de trier les parties par ordre de scène car sinon le tri est problématique, ex : "SCENE II" passe avant "SCENE PREMIERE"
73 321 mdecorde
//def CORPUS_NAME = "LIVRETOPERA2"
74 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS = ['text', 'div1', 'div2', 'div2'];
75 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS_PROPERTIES = ['id', 'name', 'n', 'name'];
76 321 mdecorde
77 321 mdecorde
78 321 mdecorde
// Test 5 : partitions croisées (sur plusieurs propriétés d'une même structure)
79 321 mdecorde
//def CORPUS_NAME = "DISCOURS"
80 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS = ['text', 'text'];
81 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS_PROPERTIES = ['loc', 'type'];
82 321 mdecorde
83 321 mdecorde
84 321 mdecorde
85 321 mdecorde
// Tests
86 321 mdecorde
//def CORPUS_NAME = "LIVRETOPERA10TEXTES"
87 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS = ['div1', 'sp'];
88 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS_PROPERTIES = ['name', 'who'];
89 321 mdecorde
90 321 mdecorde
// Tests
91 321 mdecorde
//def CORPUS_NAME = "LIVRETOPERA10TEXTES"
92 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS = ['div1'];
93 321 mdecorde
//PartitionQueriesGenerator.STRUCTURAL_UNITS_PROPERTIES = ['n'];
94 321 mdecorde
//PartitionQueriesGenerator.PART_NAMES_PREFIX = 'act_';
95 321 mdecorde
96 321 mdecorde
97 321 mdecorde
98 321 mdecorde
99 321 mdecorde
// *************************** Debug parameters ************************************************************
100 321 mdecorde
101 321 mdecorde
102 321 mdecorde
PartitionQueriesGenerator.DEBUG = 0;         // If DEBUG != 0 then partition is not created,
103 321 mdecorde
                                                                                // script only outputs the created queries and part names strings in console
104 321 mdecorde
105 321 mdecorde
106 321 mdecorde
107 321 mdecorde
// *************************** End of parameters ************************************************************
108 321 mdecorde
109 321 mdecorde
110 321 mdecorde
111 321 mdecorde
112 321 mdecorde
113 321 mdecorde
114 321 mdecorde
115 321 mdecorde
// Running
116 321 mdecorde
def partition = PartitionQueriesGenerator.createPartition(CORPUS_NAME, SUBCORPUS_NAME);
117 321 mdecorde
118 321 mdecorde
119 321 mdecorde
// Refreshing the RCP component
120 321 mdecorde
if(partition != null)        {
121 321 mdecorde
        monitor.syncExec(new Runnable() {
122 321 mdecorde
                        public void run() {
123 321 mdecorde
                                CorporaView.refresh();
124 321 mdecorde
                                CorporaView.expand(partition.getParent());
125 321 mdecorde
                        }
126 321 mdecorde
                });
127 321 mdecorde
}
128 321 mdecorde
129 321 mdecorde
130 321 mdecorde
131 321 mdecorde
132 321 mdecorde
133 321 mdecorde
/**
134 321 mdecorde
 * Create a list of queries and part names regarding the structural units, structural units properties, structural units to ignore user defined lists and expand target value specified.
135 321 mdecorde
 * @author s
136 321 mdecorde
 *
137 321 mdecorde
 */
138 321 mdecorde
public class PartitionQueriesGenerator        {
139 321 mdecorde
140 321 mdecorde
        public static int DEBUG = 0;                                                                // si DEBUG != 0, alors les requêtes sont affichées mais la partition n'est pas créée
141 321 mdecorde
142 321 mdecorde
        public static String PARTITION_NAME = '';
143 321 mdecorde
        public static String[] STRUCTURAL_UNITS = [];                                // Liste des unités structurelles sur lesquelles effectuer la partition, ex: ['text', 'div1']
144 321 mdecorde
        public static String[] STRUCTURAL_UNITS_PROPERTIES = [];        // Propriétés des unités structurelles sur lesquelles effectuer la partition, ex : ['id', 'name']
145 321 mdecorde
        public static String[] STRUCTURAL_UNITS_TO_IGNORE = [];                // Structure à ignorer, ex. CQL : !speaker
146 321 mdecorde
        public static String PART_NAMES_PREFIX = '';
147 321 mdecorde
        public static String EXPAND_TARGET = null;                                        // Expand to target, englobe les empans jusqu'à la balise parente spécifiée. NOTE : Le expand entre en conflit avec les sections à ignorer.
148 321 mdecorde
                                                                                                                                // Si la target est à un niveau supérieur aux balises à ignorer, il les remet dans liste de résultats CWB et elles ne sont donc pas ignorées
149 321 mdecorde
150 321 mdecorde
151 321 mdecorde
152 321 mdecorde
        public static ArrayList<String> queries = new ArrayList<String>();
153 321 mdecorde
        public static ArrayList<String> partNames = new ArrayList<String>();
154 321 mdecorde
155 321 mdecorde
156 321 mdecorde
        /**
157 321 mdecorde
         * Init the generator and process.
158 321 mdecorde
         * @param corpusName
159 321 mdecorde
         */
160 321 mdecorde
        public static Partition createPartition(String corpusName, String subcorpusName)        {
161 321 mdecorde
162 321 mdecorde
                if(STRUCTURAL_UNITS.size() > 0 && STRUCTURAL_UNITS.size() == STRUCTURAL_UNITS_PROPERTIES.size())        {
163 321 mdecorde
164 321 mdecorde
                        // TODO : Log
165 321 mdecorde
                        println '**************************************************************************************************************'
166 321 mdecorde
                        println 'Creating the queries on corpus "' + corpusName + "'" ;
167 321 mdecorde
168 321 mdecorde
                        Corpus corpus = CorpusManager.getCorpusManager().getCorpus(corpusName);
169 321 mdecorde
170 321 mdecorde
171 321 mdecorde
                        // Subcorpora
172 321 mdecorde
                        if(subcorpusName != null)        {
173 321 mdecorde
                                corpus = corpus.getSubcorpusByName(subcorpusName);
174 321 mdecorde
                        }
175 321 mdecorde
176 321 mdecorde
177 321 mdecorde
178 321 mdecorde
                        // Recursing through the corpus and subcorpus
179 321 mdecorde
                        process(corpus, 0, '', '');
180 321 mdecorde
181 321 mdecorde
                        // Finalizing the queries
182 321 mdecorde
                        finalizeQueries();
183 321 mdecorde
184 321 mdecorde
185 321 mdecorde
                        // TODO : Debug
186 321 mdecorde
                        // Displaying the partition name
187 321 mdecorde
                        println '';
188 321 mdecorde
                        println 'PARTITION_NAME: ' + PartitionQueriesGenerator.PARTITION_NAME;
189 321 mdecorde
190 321 mdecorde
                        // Displaying the queries
191 321 mdecorde
                        println 'Queries (count = ' + PartitionQueriesGenerator.queries.size() + '):';
192 321 mdecorde
                        for(query in PartitionQueriesGenerator.queries)        {
193 321 mdecorde
                                println query;
194 321 mdecorde
                        }
195 321 mdecorde
                        // Displaying the part names
196 321 mdecorde
                        println 'Partnames (count = ' + PartitionQueriesGenerator.partNames.size() + '):';
197 321 mdecorde
                        for(partName in PartitionQueriesGenerator.partNames)        {
198 321 mdecorde
                                print partName + ' / ';
199 321 mdecorde
                        }
200 321 mdecorde
201 321 mdecorde
202 321 mdecorde
                        // TODO : Log
203 321 mdecorde
                        println 'Queries created.';
204 321 mdecorde
205 321 mdecorde
                        // Creating the partition
206 321 mdecorde
                        if(DEBUG == 0 && queries.size() == partNames.size()) {
207 321 mdecorde
                                return corpus.createPartition(PARTITION_NAME, queries, partNames);
208 321 mdecorde
                        }
209 321 mdecorde
210 321 mdecorde
                }
211 321 mdecorde
                else        {
212 321 mdecorde
                        // TODO : Log
213 321 mdecorde
                        println 'Structural units count or structural units properties count error.';
214 321 mdecorde
                        return null
215 321 mdecorde
                }
216 321 mdecorde
217 321 mdecorde
        }
218 321 mdecorde
219 321 mdecorde
220 321 mdecorde
221 321 mdecorde
222 321 mdecorde
        /**
223 321 mdecorde
         * Recurse through structural units and structural units properties of corpus and create the queries and the part names.
224 321 mdecorde
         * @param corpus the corpus or subcorpus
225 321 mdecorde
         * @param index the index for recursion
226 321 mdecorde
         * @param tmpQuery the temporary query for creating subcorpus part
227 321 mdecorde
         * @param tmpPartName the temporary part name of the subcorpus part
228 321 mdecorde
         */
229 321 mdecorde
        protected static void process(Corpus corpus, int index, String tmpQuery, String tmpPartName)        {
230 321 mdecorde
231 321 mdecorde
232 321 mdecorde
                // End of array
233 321 mdecorde
                if(index >= STRUCTURAL_UNITS.size())        {
234 321 mdecorde
235 321 mdecorde
                        queries.add(tmpQuery);
236 321 mdecorde
                        partNames.add(PART_NAMES_PREFIX + tmpPartName);
237 321 mdecorde
238 321 mdecorde
                        return;
239 321 mdecorde
                }
240 321 mdecorde
241 321 mdecorde
                StructuralUnit su = corpus.getStructuralUnit(STRUCTURAL_UNITS[index]);
242 321 mdecorde
                StructuralUnitProperty sup = su.getProperty(STRUCTURAL_UNITS_PROPERTIES[index]);
243 321 mdecorde
244 321 mdecorde
                // TODO : Log
245 321 mdecorde
                println ''
246 321 mdecorde
                if(index == 0)        {
247 1162 mdecorde
                        println 'Processing Structural Unit Property "' + sup.getFullName() + '" on mother corpus "' + corpus.getID() + '"';
248 321 mdecorde
                }
249 321 mdecorde
                else        {
250 1162 mdecorde
                        println 'Processing Structural Unit Property "' + sup.getFullName() + '" on subcorpus part "' + tmpPartName + '"';
251 321 mdecorde
                }
252 321 mdecorde
                println ''
253 321 mdecorde
254 321 mdecorde
255 321 mdecorde
                // Creating the queries parts for each structural units properties values
256 321 mdecorde
                //for (supValue in sup.getOrderedValues()) { // TODO : signaler bug Matthieu, on ne devrait pas être obligé de repasser le sous-corpus à la méthode car sup a déjà été créée depuis le sous-corpus ? getValues() bugge aussi
257 321 mdecorde
                for (supValue in sup.getOrderedValues(corpus)) {
258 321 mdecorde
259 321 mdecorde
                        // TODO : Log
260 321 mdecorde
                        println ''
261 321 mdecorde
                        println 'Value "' + supValue + '"';
262 321 mdecorde
                        println ''
263 321 mdecorde
264 321 mdecorde
265 321 mdecorde
                        // Getting the subcorpus linked to the structural unit property value
266 321 mdecorde
                        Subcorpus tmpSubcorpus = corpus.createSubcorpusWithQueryString(su, sup, supValue, "tmp" + UUID.randomUUID());
267 321 mdecorde
268 321 mdecorde
                        // Partition conditions and part name separators
269 321 mdecorde
                        String and = '';
270 321 mdecorde
                        String underscore = '';
271 321 mdecorde
                        if(tmpQuery != '')        {
272 321 mdecorde
                                underscore = '_';
273 321 mdecorde
                                and = ' & ';
274 321 mdecorde
                        }
275 321 mdecorde
276 321 mdecorde
277 321 mdecorde
                        process(tmpSubcorpus, index + 1, (tmpQuery + and + '_.' + sup.getFullName() + '="' + supValue + '"'), tmpPartName + underscore + supValue);
278 321 mdecorde
279 321 mdecorde
                        // Deleting the temporary subcorpus
280 321 mdecorde
                        // TODO : bug : cette méthode ne supprime pas le corpus sans doute car il faut que le sous-corpus ne contienne pas d'autres sous-corpus ? le delete() en revanche fonctionne.
281 321 mdecorde
//                        corpus.dropSubcorpus(tmpSubcorpus);
282 321 mdecorde
                        tmpSubcorpus.delete();
283 321 mdecorde
284 321 mdecorde
                }
285 321 mdecorde
        }
286 321 mdecorde
287 321 mdecorde
288 321 mdecorde
        /**
289 321 mdecorde
         *         Autoname the partition.
290 321 mdecorde
         * @param partitionName
291 321 mdecorde
         */
292 321 mdecorde
        protected static void autoNamePartition(String partitionName)        {
293 321 mdecorde
294 321 mdecorde
                // Structural units names and properties
295 321 mdecorde
                for(int i = 0; i < STRUCTURAL_UNITS.size(); i++)        {
296 321 mdecorde
                        partitionName +=  STRUCTURAL_UNITS[i] + '_' + STRUCTURAL_UNITS_PROPERTIES[i] + '.';
297 321 mdecorde
                }
298 321 mdecorde
299 321 mdecorde
                // Structural units to ignore
300 321 mdecorde
                for(int i = 0; i < STRUCTURAL_UNITS_TO_IGNORE.size(); i++)        {
301 321 mdecorde
                        partitionName +=  'NOT_' + STRUCTURAL_UNITS_TO_IGNORE[i] + '.';
302 321 mdecorde
                }
303 321 mdecorde
304 321 mdecorde
305 321 mdecorde
                // Removing last point in name
306 321 mdecorde
                PARTITION_NAME = partitionName.substring(0, partitionName.length() - 1);
307 321 mdecorde
        }
308 321 mdecorde
309 321 mdecorde
310 321 mdecorde
        /**
311 321 mdecorde
         * Finalize the queries.
312 321 mdecorde
         */
313 321 mdecorde
        protected static void finalizeQueries()        {
314 321 mdecorde
315 321 mdecorde
                String expandTo = '';
316 321 mdecorde
                // Expanding to user defined target
317 321 mdecorde
                if(EXPAND_TARGET != null && EXPAND_TARGET != '')        {
318 321 mdecorde
                        expandTo = ' expand to ' + EXPAND_TARGET;
319 321 mdecorde
                }
320 321 mdecorde
                // Expanding to last child structural unit in user defined hierarchy
321 321 mdecorde
                else if(STRUCTURAL_UNITS_TO_IGNORE.size() == 0)        {
322 321 mdecorde
                        expandTo = ' expand to ' + STRUCTURAL_UNITS[STRUCTURAL_UNITS.size() - 1];
323 321 mdecorde
                }
324 321 mdecorde
325 321 mdecorde
                // Autonaming the partition
326 321 mdecorde
                if(PARTITION_NAME == '')        {
327 321 mdecorde
                        autoNamePartition(PARTITION_NAME);
328 321 mdecorde
                        // Finalizing partition name
329 321 mdecorde
                        PARTITION_NAME += expandTo.replace(' expand to', '.EXPAND TO').replace(' ', '_');
330 321 mdecorde
                }
331 321 mdecorde
332 321 mdecorde
333 321 mdecorde
                // Finalizing queries
334 321 mdecorde
                for(int j = 0; j < queries.size(); j++)        {
335 321 mdecorde
336 321 mdecorde
                        String queryEnd = '';
337 321 mdecorde
338 321 mdecorde
                        // Removing some sections
339 321 mdecorde
                        for(sectionToIgnore in STRUCTURAL_UNITS_TO_IGNORE)        {
340 321 mdecorde
                                queryEnd += ' & !' + sectionToIgnore;
341 321 mdecorde
                        }
342 321 mdecorde
343 321 mdecorde
                        queryEnd += ']' + expandTo;
344 321 mdecorde
345 321 mdecorde
                        queries.set(j, '[' +  queries.get(j) + queryEnd);
346 321 mdecorde
                }
347 321 mdecorde
        }
348 321 mdecorde
349 321 mdecorde
}
350 321 mdecorde
351 321 mdecorde
352 321 mdecorde
353 321 mdecorde
354 321 mdecorde
355 321 mdecorde
356 321 mdecorde
/*
357 321 mdecorde
// Test dialogue de confirmation avant création de la partition
358 321 mdecorde
JFrame frame = new JFrame('test');
359 321 mdecorde
//frame.setMinimumSize(new Dimension(400, 400));
360 321 mdecorde
//frame.setVisible(true);
361 321 mdecorde
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
362 321 mdecorde
int n = JOptionPane.showConfirmDialog(
363 321 mdecorde
        frame, "Would you like green eggs and ham?",
364 321 mdecorde
        "An Inane Question",
365 321 mdecorde
        JOptionPane.YES_NO_OPTION);
366 321 mdecorde
if (n == JOptionPane.YES_OPTION) {
367 321 mdecorde
frame.setTitle("Ewww!");
368 321 mdecorde
} else if (n == JOptionPane.NO_OPTION) {
369 321 mdecorde
frame.setTitle("Me neither!");
370 321 mdecorde
} else {
371 321 mdecorde
frame.setTitle("Come on -- tell me!");
372 321 mdecorde
}*/
373 321 mdecorde
374 321 mdecorde
375 321 mdecorde
376 321 mdecorde
377 321 mdecorde
378 321 mdecorde
//// Récupération des unités structurelles et création de la liste des requêtes CQL
379 321 mdecorde
//int i = 0;
380 321 mdecorde
//ArrayList<String> queries = new ArrayList<String>();
381 321 mdecorde
//ArrayList<String> partNames = new ArrayList<String>();
382 321 mdecorde
//
383 321 mdecorde
//
384 321 mdecorde
//int currentQueriesCount;
385 321 mdecorde
//if(STRUCTURAL_UNITS.size() > 0 && STRUCTURAL_UNITS.size() == STRUCTURAL_UNITS_PROPERTIES.size())        {
386 321 mdecorde
//
387 321 mdecorde
//        // Parcours des unités strcuturelles à traiter
388 321 mdecorde
//        for (suName in STRUCTURAL_UNITS) {
389 321 mdecorde
//
390 321 mdecorde
//                // Définition auto du nom de partition
391 321 mdecorde
//                PARTITION_NAME += suName + '_';
392 321 mdecorde
//
393 321 mdecorde
//
394 321 mdecorde
//                StructuralUnit su = corpus.getStructuralUnit(suName);
395 321 mdecorde
//
396 321 mdecorde
//
397 321 mdecorde
//                // TODO : Debug
398 321 mdecorde
//                println ''
399 321 mdecorde
//                println 'Structural Unit Name: ' + su.getName();
400 321 mdecorde
//
401 321 mdecorde
//
402 321 mdecorde
//                // Récupération des propriétés d'unités structurelles
403 321 mdecorde
//                for (StructuralUnitProperty sup in su.getProperties())        {
404 321 mdecorde
//
405 321 mdecorde
//
406 321 mdecorde
//                        if(STRUCTURAL_UNITS_PROPERTIES[i] != '' && sup.getName() == STRUCTURAL_UNITS_PROPERTIES[i])        {
407 321 mdecorde
//
408 321 mdecorde
//                                // Définition auto du nom de partition
409 321 mdecorde
//                                PARTITION_NAME += STRUCTURAL_UNITS_PROPERTIES[i] + ".";
410 321 mdecorde
//
411 321 mdecorde
//                                // TODO : Debug
412 321 mdecorde
//                                println "Structural Unit Property: " + sup.getName() + " ";
413 321 mdecorde
//
414 321 mdecorde
//
415 321 mdecorde
//                                // Récupération des valeurs des propriétés d'unités structurelles
416 321 mdecorde
//
417 321 mdecorde
//                                //for (supValue in sup.getOrderedValues()) {
418 321 mdecorde
//                                for (supValue in sup.getOrderedValues()) {
419 321 mdecorde
//
420 321 mdecorde
//                                        // Récupération du sous-corpus lié à la valeur de propriété de structure
421 321 mdecorde
//                                        Subcorpus tmpSubcorpus = corpus.createSubcorpusWithQueryString(su, sup, supValue, "tmp");
422 321 mdecorde
//
423 321 mdecorde
//                                        String query = suName + '_' + STRUCTURAL_UNITS_PROPERTIES[i] + '="' + supValue + '"';
424 321 mdecorde
//
425 321 mdecorde
//
426 321 mdecorde
//                                        queries.add(query);
427 321 mdecorde
//                                        partNames.add(supValue);
428 321 mdecorde
//
429 321 mdecorde
//                                        // TODO : Debug
430 321 mdecorde
//                                        print supValue + " ";
431 321 mdecorde
//
432 321 mdecorde
//                                        // Suppression du sous-corpus temporaire
433 321 mdecorde
//                                        corpus.dropSubcorpus(tmpSubcorpus);
434 321 mdecorde
//
435 321 mdecorde
//                                }
436 321 mdecorde
//
437 321 mdecorde
//                        }
438 321 mdecorde
//                }
439 321 mdecorde
//
440 321 mdecorde
//
441 321 mdecorde
////                // Ajout des niveaux inférieurs
442 321 mdecorde
////                for(int i = 1; i < STRUCTURAL_UNITS.size(); i++)        {
443 321 mdecorde
////
444 321 mdecorde
////                        for(int j = 0; j < queries.size(); j++)        {
445 321 mdecorde
////                                queries.set(j, queries.get(j) + ' & _.' + STRUCTURAL_UNITS[i] + '_' + STRUCTURAL_UNITS_PROPERTIES[i] + '=".*"');
446 321 mdecorde
////
447 321 mdecorde
////                                // Noms de partitions
448 321 mdecorde
////                                partNames.set(j, partNames.get(j) + '_' + STRUCTURAL_UNITS[i] + '_'  + STRUCTURAL_UNITS_PROPERTIES[i]);
449 321 mdecorde
////                        }
450 321 mdecorde
////                }
451 321 mdecorde
//
452 321 mdecorde
//
453 321 mdecorde
//
454 321 mdecorde
//
455 321 mdecorde
//
456 321 mdecorde
//
457 321 mdecorde
//                i++;
458 321 mdecorde
//        //        }
459 321 mdecorde
//        //        else        {
460 321 mdecorde
//        //
461 321 mdecorde
//        //        }
462 321 mdecorde
//
463 321 mdecorde
//        }
464 321 mdecorde
//
465 321 mdecorde
//
466 321 mdecorde
//
467 321 mdecorde
//
468 321 mdecorde
//
469 321 mdecorde
//        // Clôture des requêtes
470 321 mdecorde
//        for(int j = 0; j < queries.size(); j++)        {
471 321 mdecorde
//
472 321 mdecorde
//                String queryEnd = '';
473 321 mdecorde
//
474 321 mdecorde
//                // Suppression de sections
475 321 mdecorde
//                for(sectionToIgnore in STRUCTURAL_UNITS_TO_IGNORE)        {
476 321 mdecorde
//                        queryEnd += ' & !' + sectionToIgnore;
477 321 mdecorde
//                }
478 321 mdecorde
//
479 321 mdecorde
//                queryEnd += ']';
480 321 mdecorde
//
481 321 mdecorde
//                // Expand to target
482 321 mdecorde
//                if(EXPAND_TARGET != null && EXPAND_TARGET != '')        {
483 321 mdecorde
//                        queryEnd += ' expand to ' + EXPAND_TARGET;
484 321 mdecorde
//                }
485 321 mdecorde
//
486 321 mdecorde
//                queries.set(j, '[_.' +  queries.get(j) + queryEnd);
487 321 mdecorde
//        }
488 321 mdecorde
//}
489 321 mdecorde
490 321 mdecorde
491 321 mdecorde
492 321 mdecorde
493 321 mdecorde
494 321 mdecorde
495 321 mdecorde
496 321 mdecorde
497 321 mdecorde
498 321 mdecorde
499 321 mdecorde
500 321 mdecorde
501 321 mdecorde
502 321 mdecorde
503 321 mdecorde
504 321 mdecorde
505 321 mdecorde
////for (suName in STRUCTURAL_UNITS) {
506 321 mdecorde
//if(STRUCTURAL_UNITS.size() > 0 && STRUCTURAL_UNITS.size() == STRUCTURAL_UNITS_PROPERTIES.size())        {
507 321 mdecorde
//
508 321 mdecorde
//        suName = STRUCTURAL_UNITS[0]
509 321 mdecorde
//        //if(STRUCTURAL_UNITS.size() > 1)        {
510 321 mdecorde
//
511 321 mdecorde
//        // Définition auto du nom de partition
512 321 mdecorde
//        PARTITION_NAME += suName + '_';
513 321 mdecorde
//
514 321 mdecorde
//
515 321 mdecorde
//        // TODO : Debug
516 321 mdecorde
//        println ''
517 321 mdecorde
//        println "Structural Unit Name: $suName"
518 321 mdecorde
//
519 321 mdecorde
//        // Récupération des valeurs des propriétés d'unités structurelles
520 321 mdecorde
//        for (sup in discours.getStructuralUnitProperties(suName.asType(String)))        {
521 321 mdecorde
//
522 321 mdecorde
//                supName = STRUCTURAL_UNITS_PROPERTIES[0];
523 321 mdecorde
//
524 321 mdecorde
//                if(supName != '' && sup.getName() == supName)        {
525 321 mdecorde
//
526 321 mdecorde
//                        // Définition auto du nom de partition
527 321 mdecorde
//                        PARTITION_NAME += supName + ".";
528 321 mdecorde
//
529 321 mdecorde
//                        // TODO : Debug
530 321 mdecorde
//                        println "Structural Unit Property: " + supName + " ";
531 321 mdecorde
//
532 321 mdecorde
//                        for (supValue in sup.getOrderedValues()) {
533 321 mdecorde
//
534 321 mdecorde
//                                String query = '[_.' + suName + '_' + supName + '="' + supValue + '"';
535 321 mdecorde
//
536 321 mdecorde
//                                // Suppression de sections
537 321 mdecorde
//                                for(sectionToIgnore in STRUCTURAL_UNITS_TO_IGNORE)        {
538 321 mdecorde
//                                        query += ' & !' + sectionToIgnore;
539 321 mdecorde
//                                }
540 321 mdecorde
//
541 321 mdecorde
//
542 321 mdecorde
//
543 321 mdecorde
//                                queries.add(query);
544 321 mdecorde
//                                partNames.add(supValue);
545 321 mdecorde
//
546 321 mdecorde
//                                // TODO : Debug
547 321 mdecorde
//                                print supValue + " ";
548 321 mdecorde
//                        }
549 321 mdecorde
//                }
550 321 mdecorde
//        }
551 321 mdecorde
//
552 321 mdecorde
//
553 321 mdecorde
//        // Ajout des niveaux inférieurs
554 321 mdecorde
//        for(int i = 1; i < STRUCTURAL_UNITS.size(); i++)        {
555 321 mdecorde
//
556 321 mdecorde
//                for(int j = 0; j < queries.size(); j++)        {
557 321 mdecorde
//                        queries.set(j, queries.get(j) + ' & _.' + STRUCTURAL_UNITS[i] + '_' + STRUCTURAL_UNITS_PROPERTIES[i] + '=".*"');
558 321 mdecorde
//
559 321 mdecorde
//                        // Noms de partitions
560 321 mdecorde
//                        partNames.set(j, partNames.get(j) + '_' + STRUCTURAL_UNITS[i] + '_'  + STRUCTURAL_UNITS_PROPERTIES[i]);
561 321 mdecorde
//                }
562 321 mdecorde
//        }
563 321 mdecorde
//
564 321 mdecorde
//
565 321 mdecorde
//        // Clôture des requêtes
566 321 mdecorde
//        for(int j = 0; j < queries.size(); j++)        {
567 321 mdecorde
//
568 321 mdecorde
//                String queryEnd = ']';
569 321 mdecorde
//
570 321 mdecorde
//                // Expand to target
571 321 mdecorde
//                if(EXPAND_TARGET != null && EXPAND_TARGET != '')        {
572 321 mdecorde
//                        queryEnd += ' expand to ' + EXPAND_TARGET;
573 321 mdecorde
//                }
574 321 mdecorde
//
575 321 mdecorde
//                queries.set(j, queries.get(j) + queryEnd);
576 321 mdecorde
//        }
577 321 mdecorde
//
578 321 mdecorde
//
579 321 mdecorde
//
580 321 mdecorde
//        //i++;
581 321 mdecorde
////        }
582 321 mdecorde
////        else        {
583 321 mdecorde
////
584 321 mdecorde
////        }
585 321 mdecorde
//
586 321 mdecorde
////}
587 321 mdecorde
//}
588 321 mdecorde
589 321 mdecorde
590 321 mdecorde
591 321 mdecorde
// Fonctionnelle pour 1 niveau de hiérarchie
592 321 mdecorde
//// Récupération des unités structurelles et création de la liste des requêtes CQL
593 321 mdecorde
//int i = 0;
594 321 mdecorde
//String supName;
595 321 mdecorde
//ArrayList queries = new ArrayList();
596 321 mdecorde
//ArrayList partNames = new ArrayList();
597 321 mdecorde
//
598 321 mdecorde
//for (suName in STRUCTURAL_UNITS) {
599 321 mdecorde
//
600 321 mdecorde
//
601 321 mdecorde
//        // Définition auto du nom de partition
602 321 mdecorde
//        NAME += suName + '_';
603 321 mdecorde
//
604 321 mdecorde
//
605 321 mdecorde
//
606 321 mdecorde
//        println "Structural Unit Name: $suName"
607 321 mdecorde
//
608 321 mdecorde
//        // Récupération des valeurs des propriétés d'unités structurelles
609 321 mdecorde
//        for (sup in discours.getStructuralUnitProperties(suName.asType(String)))        {
610 321 mdecorde
//
611 321 mdecorde
//                supName = STRUCTURAL_UNITS_PROPERTIES[i];
612 321 mdecorde
//
613 321 mdecorde
//                if(supName != '' && sup.getName() == supName)        {
614 321 mdecorde
//
615 321 mdecorde
//                        // Définition auto du nom de partition
616 321 mdecorde
//                        NAME += supName + ".";
617 321 mdecorde
//
618 321 mdecorde
//                        // TODO : Debug
619 321 mdecorde
//                        println "Structural Unit Property: " + supName + " ";
620 321 mdecorde
//
621 321 mdecorde
//                        for (supValue in sup.getOrderedValues()) {
622 321 mdecorde
//
623 321 mdecorde
//                                String query = '[_.' + suName + '_' + supName + '="' + supValue + '"';
624 321 mdecorde
//
625 321 mdecorde
//                                // Suppression de sections
626 321 mdecorde
//                                for(sectionToIgnore in STRUCTURAL_UNITS_TO_IGNORE)        {
627 321 mdecorde
//                                        query += ' & !' + sectionToIgnore;
628 321 mdecorde
//                                }
629 321 mdecorde
//
630 321 mdecorde
//                                 query += ']';
631 321 mdecorde
//
632 321 mdecorde
//                                // Expand to target
633 321 mdecorde
//                                if(EXPAND_TARGET != null && EXPAND_TARGET != '')        {
634 321 mdecorde
//                                        query += ' expand to ' + EXPAND_TARGET;
635 321 mdecorde
//                                }
636 321 mdecorde
//
637 321 mdecorde
//
638 321 mdecorde
//                                queries.add(query);
639 321 mdecorde
//                                partNames.add(supValue);
640 321 mdecorde
//
641 321 mdecorde
//                                // TODO : Debug
642 321 mdecorde
//                                print supValue + " ";
643 321 mdecorde
//                        }
644 321 mdecorde
//                }
645 321 mdecorde
//        }
646 321 mdecorde
//        i++;
647 321 mdecorde
//}
648 321 mdecorde
649 321 mdecorde
650 321 mdecorde
651 321 mdecorde
652 321 mdecorde
//// start
653 321 mdecorde
//if (queries.size() == partnames.size()) {
654 321 mdecorde
////        def discours = CorpusManager.getCorpusManager().getCorpus(CORPUS)
655 321 mdecorde
//        def partition;
656 321 mdecorde
//        if (SUBCORPUS == null) {
657 321 mdecorde
//                println "partition build with $discours"
658 321 mdecorde
//                partition = discours.createPartition(NAME, queries.as, PARTNAMES)
659 321 mdecorde
//        } else {
660 321 mdecorde
//                def subcorpus
661 321 mdecorde
//                if (SUBCORPUSQUERY == null) {
662 321 mdecorde
//                        println "partition build with subcorpus by name $SUBCORPUS"
663 321 mdecorde
//                        subcorpus = discours.getSubcorpusByName(SUBCORPUS)
664 321 mdecorde
//                        if (subcorpus == null) {
665 321 mdecorde
//                                println "Error: SUBCORPUS NOT FOUND with name : $SUBCORPUS"
666 321 mdecorde
//                        }
667 321 mdecorde
//                } else {
668 321 mdecorde
//                        println "partition build with subcorpus with query $SUBCORPUSQUERY"
669 321 mdecorde
//                        subcorpus = discours.createSubcorpus(new Query(SUBCORPUSQUERY), SUBCORPUS)
670 321 mdecorde
//                }
671 321 mdecorde
//                partition = subcorpus.createPartition(NAME, QUERIES, PARTNAMES)
672 321 mdecorde
//        }
673 321 mdecorde
//
674 321 mdecorde
//        def list = Arrays.asList(partition.getPartSizes())
675 321 mdecorde
//        println "Partition created $NAME: "+list+" parts"
676 321 mdecorde
//        // println "Total size: "+list.sum()+" - is equal to (sub)corpus size : "+(list.sum() == partition.getCorpus().getSize())
677 321 mdecorde
//    println "Total size: "+list.sum()+" - (sub)corpus size : "+(partition.getCorpus().getSize())
678 321 mdecorde
//
679 321 mdecorde
//        monitor.syncExec(new Runnable() {
680 321 mdecorde
//        public void run() {
681 321 mdecorde
//                CorporaView.refresh();
682 321 mdecorde
//                CorporaView.expand(partition.getParent());
683 321 mdecorde
//        }
684 321 mdecorde
//});
685 321 mdecorde
//} else {
686 321 mdecorde
//        println "QUERIES.size() != PARTNAMES.size() = "+QUERIES.size()+" != "+PARTNAMES.size()
687 321 mdecorde
//}
688 321 mdecorde
689 321 mdecorde
690 321 mdecorde
691 321 mdecorde
692 321 mdecorde
// parameters
693 321 mdecorde
//def CORPUS_NAME = "LIVRETOPERA10TEXTES"
694 321 mdecorde
////def SUBCORPUS = "NOMDUSOUSCORPUS"
695 321 mdecorde
//def SUBCORPUS = null // si partition sur corpus
696 321 mdecorde
////def SUBCORPUSQUERY = '"je" expand to s'
697 321 mdecorde
//def SUBCORPUSQUERY = null // si sous-corpus par nom
698 321 mdecorde
699 321 mdecorde
700 321 mdecorde
701 321 mdecorde
702 321 mdecorde
703 321 mdecorde
704 321 mdecorde
//def TEXT = "01_ACHILLE ET POLYXENE"
705 321 mdecorde
// def TEXT = "02_ZEPHIRE ET FLORE"
706 321 mdecorde
/*def QUERIES = [
707 321 mdecorde
'<lg>[_.text_id="' + TEXT + '" & _.div1_n="1" & _.sp_who=".*"]+</lg>',
708 321 mdecorde
'<lg>[_.text_id="' + TEXT + '" & _.div1_n="2" & _.sp_who=".*"]+</lg>',
709 321 mdecorde
'<lg>[_.text_id="' + TEXT + '" & _.div1_n="3" & _.sp_who=".*"]+</lg>',
710 321 mdecorde
'<lg>[_.text_id="' + TEXT + '" & _.div1_n="4" & _.sp_who=".*"]+</lg>',
711 321 mdecorde
'<lg>[_.text_id="' + TEXT + '" & _.div1_n="5" & _.sp_who=".*"]+</lg>',
712 321 mdecorde
]
713 321 mdecorde
def PARTNAMES = [
714 321 mdecorde
"acte_1",
715 321 mdecorde
"acte_2",
716 321 mdecorde
"acte_3",
717 321 mdecorde
"acte_4",
718 321 mdecorde
"acte_5",
719 321 mdecorde
]*/