Statistics
| Revision:

root / tmp / org.txm.analec.rcp / src / org / txm / macro / urs / edit / RetoucheComplementDuNomMacro.groovy @ 1726

History | View | Annotate | Download (3.7 kB)

1 671 mdecorde
// STANDARD DECLARATIONS
2 1217 mdecorde
package org.txm.macro.urs.edit
3 671 mdecorde
4 671 mdecorde
import org.apache.commons.lang.*
5 671 mdecorde
import org.kohsuke.args4j.*
6 671 mdecorde
import groovy.transform.*
7 671 mdecorde
import org.txm.*
8 671 mdecorde
import org.txm.rcp.swt.widget.parameters.*
9 1217 mdecorde
import org.txm.annotation.urs.*
10 671 mdecorde
import org.txm.searchengine.cqp.*
11 671 mdecorde
import org.txm.searchengine.cqp.corpus.*
12 671 mdecorde
import visuAnalec.Message.*
13 671 mdecorde
import visuAnalec.donnees.*
14 671 mdecorde
import visuAnalec.elements.*
15 671 mdecorde
import visuAnalec.vue.*
16 671 mdecorde
17 671 mdecorde
18 671 mdecorde
/*  MACRO pour corriger une erreur d'annotation
19 671 mdecorde
 Retirer le "De" du complément du nom
20 671 mdecorde
 Algo :
21 671 mdecorde
 POUR CHAQUE MENTION dont le premier mot est "de" (en minuscules)
22 671 mdecorde
 SI     il existe une autre MENTION dans laquelle celle-ci est totalement incluse
23 671 mdecorde
 ALORS  incrémenter d'un mot la frontière gauche de la mention
24 671 mdecorde
 Ajouter la categorie CDN.CHECK pour qu'on puisse verifier facilement le job.
25 671 mdecorde
 */
26 671 mdecorde
27 671 mdecorde
// BEGINNING OF PARAMETERS
28 1094 mdecorde
if (!(corpusViewSelection instanceof org.txm.searchengine.cqp.corpus.CQPCorpus)) {
29 671 mdecorde
        println "Selection must be a Corpus: "+corpusViewSelection
30 671 mdecorde
        return;
31 671 mdecorde
}
32 671 mdecorde
// Declare each parameter here
33 671 mdecorde
// BEGINNING OF PARAMETERS
34 671 mdecorde
@Field @Option(name="unit_type", usage="", widget="String", required=true, def="MENTION")
35 671 mdecorde
                def unit_type
36 671 mdecorde
@Field @Option(name="category_name", usage="", widget="String", required=true, def="CATEGORIE")
37 671 mdecorde
                def category_name
38 671 mdecorde
if (!ParametersDialog.open(this)) return
39 671 mdecorde
40 671 mdecorde
        corpus = corpusViewSelection.getMainCorpus()
41 786 sjacqu01
CQI = CQPSearchEngine.getCqiClient()
42 671 mdecorde
word = corpus.getWordProperty()
43 671 mdecorde
44 1217 mdecorde
analecCorpus = URSCorpora.getCorpus(corpus)
45 1217 mdecorde
vue = URSCorpora.getVue(corpus)
46 671 mdecorde
structure = analecCorpus.getStructure()
47 671 mdecorde
if (!structure.getUnites().contains(unit_type)) { // check if the structure contains the unit_type units
48 671 mdecorde
        println "Error: corpus structure does not contains unit with name=$unit_type"
49 671 mdecorde
        return
50 671 mdecorde
}
51 671 mdecorde
52 671 mdecorde
53 671 mdecorde
// Si la structure d'annotation ne contient pas CATEGORIE, on la crée avec ses valeurs
54 671 mdecorde
if (!structure.getUniteProperties(unit_type).contains(category_name)) {
55 671 mdecorde
        structure.ajouterProp(Unite.class, unit_type, category_name)
56 671 mdecorde
}
57 671 mdecorde
58 671 mdecorde
def check_cat = "CDN.CHECK"
59 671 mdecorde
structure.ajouterVal(Unite.class, unit_type, category_name, check_cat)
60 671 mdecorde
61 671 mdecorde
62 671 mdecorde
def nModified = 0
63 671 mdecorde
def nIgnored1 = 0
64 671 mdecorde
def nIgnored2 = 0
65 671 mdecorde
def compteur = 0
66 671 mdecorde
67 671 mdecorde
errors = new HashMap()
68 671 mdecorde
def units = analecCorpus.getUnites(unit_type)
69 671 mdecorde
units.sort() { a, b -> a.getDeb() <=> b.getDeb() ?: a.getFin() <=> b.getFin() }
70 671 mdecorde
71 671 mdecorde
/* Test sur la premiere mention :
72 671 mdecorde
 def debut1 = units[1].getDeb()
73 671 mdecorde
 def fin1 = units[1].getFin()
74 671 mdecorde
 println "$debut1 - $fin1"
75 671 mdecorde
 units[1].setDeb( debut1 + 1)
76 671 mdecorde
 units[1].setFin( fin1 + 1)
77 1217 mdecorde
 URSCorpora.getVue(analecCorpus).retablirVueParDefaut()
78 671 mdecorde
 def debut2 = units[1].getDeb()
79 671 mdecorde
 def fin2 = units[1].getFin()
80 671 mdecorde
 println "$debut2 - $fin2"
81 671 mdecorde
 */
82 671 mdecorde
83 671 mdecorde
84 671 mdecorde
for (Unite unit : units) { // process all units
85 671 mdecorde
86 671 mdecorde
        def debut = unit.getDeb()
87 671 mdecorde
        def fin = unit.getFin()
88 671 mdecorde
        def premierMot = CQI.cpos2Str(word.getQualifiedName(), debut)[0]
89 671 mdecorde
90 671 mdecorde
        if (premierMot != "de") {
91 671 mdecorde
                nIgnored1++
92 671 mdecorde
                compteur++
93 671 mdecorde
                continue
94 671 mdecorde
        } else {
95 671 mdecorde
                for (i = compteur-1; i >= 0 ; i--) {
96 671 mdecorde
                        def u = units[i]
97 671 mdecorde
                        def udeb = u.getDeb()
98 671 mdecorde
                        def ufin = u.getFin()
99 671 mdecorde
                        if (ufin >= fin) {
100 671 mdecorde
                                println "\nAVANT => Unit $compteur : $debut - $fin"
101 671 mdecorde
                                if (fin > debut) unit.setDeb( debut++ )
102 671 mdecorde
                                else println "not resizing"
103 671 mdecorde
                                def debut2 = unit.getDeb()
104 671 mdecorde
                                def fin2 = unit.getFin()
105 1217 mdecorde
                                URSCorpora.getVue(analecCorpus).retablirVueParDefaut()
106 671 mdecorde
                                println "APRES => Unit $compteur : $debut2 - $fin2"
107 671 mdecorde
                                unit.getProps().put(category_name, check_cat)
108 671 mdecorde
                                break
109 671 mdecorde
                        }
110 671 mdecorde
                }
111 671 mdecorde
                if (i < 0) nIgnored2++
112 671 mdecorde
                else nModified++
113 671 mdecorde
                compteur++
114 671 mdecorde
        }
115 671 mdecorde
}
116 671 mdecorde
117 671 mdecorde
println "\nResult:"
118 671 mdecorde
println "- $nModified units have been modified."
119 671 mdecorde
println "- $nIgnored1 units have been ignored because not concerned"
120 671 mdecorde
println "- $nIgnored2 units have been ignored because no overlap.\n"
121 671 mdecorde
println "Total ($compteur)."
122 671 mdecorde
123 671 mdecorde
// END OF PARAMETERS
124 1217 mdecorde
URSCorpora.getVue(analecCorpus).retablirVueParDefaut()
125 671 mdecorde
println "corpora selection: "+corpusViewSelection