Statistics
| Revision:

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

History | View | Annotate | Download (3.7 kB)

1
// STANDARD DECLARATIONS
2
package org.txm.macro.analec.edit
3

    
4
import org.apache.commons.lang.*
5
import org.kohsuke.args4j.*
6
import groovy.transform.*
7
import org.txm.*
8
import org.txm.rcp.swt.widget.parameters.*
9
import org.txm.analec.*
10
import org.txm.searchengine.cqp.*
11
import org.txm.searchengine.cqp.corpus.*
12
import visuAnalec.Message.*
13
import visuAnalec.donnees.*
14
import visuAnalec.elements.*
15
import visuAnalec.vue.*
16

    
17

    
18
/*  MACRO pour corriger une erreur d'annotation
19
 Retirer le "De" du complément du nom
20
 Algo : 
21
 POUR CHAQUE MENTION dont le premier mot est "de" (en minuscules)
22
 SI     il existe une autre MENTION dans laquelle celle-ci est totalement incluse
23
 ALORS  incrémenter d'un mot la frontière gauche de la mention
24
 Ajouter la categorie CDN.CHECK pour qu'on puisse verifier facilement le job.
25
 */
26

    
27
// BEGINNING OF PARAMETERS
28
if (!(corpusViewSelection instanceof org.txm.searchengine.cqp.corpus.CQPCorpus)) {
29
        println "Selection must be a Corpus: "+corpusViewSelection
30
        return;
31
}
32
// Declare each parameter here
33
// BEGINNING OF PARAMETERS
34
@Field @Option(name="unit_type", usage="", widget="String", required=true, def="MENTION")
35
                def unit_type
36
@Field @Option(name="category_name", usage="", widget="String", required=true, def="CATEGORIE")
37
                def category_name
38
if (!ParametersDialog.open(this)) return
39

    
40
        corpus = corpusViewSelection.getMainCorpus()
41
CQI = CQPSearchEngine.getCqiClient()
42
word = corpus.getWordProperty()
43

    
44
analecCorpus = AnalecCorpora.getCorpus(corpus.getName())
45
vue = AnalecCorpora.getVue(corpus.getName())
46
structure = analecCorpus.getStructure()
47
if (!structure.getUnites().contains(unit_type)) { // check if the structure contains the unit_type units
48
        println "Error: corpus structure does not contains unit with name=$unit_type"
49
        return
50
}
51

    
52

    
53
// Si la structure d'annotation ne contient pas CATEGORIE, on la crée avec ses valeurs
54
if (!structure.getUniteProperties(unit_type).contains(category_name)) {
55
        structure.ajouterProp(Unite.class, unit_type, category_name)
56
}
57

    
58
def check_cat = "CDN.CHECK"
59
structure.ajouterVal(Unite.class, unit_type, category_name, check_cat)
60

    
61

    
62
def nModified = 0
63
def nIgnored1 = 0
64
def nIgnored2 = 0
65
def compteur = 0
66

    
67
errors = new HashMap()
68
def units = analecCorpus.getUnites(unit_type)
69
units.sort() { a, b -> a.getDeb() <=> b.getDeb() ?: a.getFin() <=> b.getFin() }
70

    
71
/* Test sur la premiere mention :
72
 def debut1 = units[1].getDeb()
73
 def fin1 = units[1].getFin()
74
 println "$debut1 - $fin1"
75
 units[1].setDeb( debut1 + 1)
76
 units[1].setFin( fin1 + 1)
77
 AnalecCorpora.getVue(analecCorpus).retablirVueParDefaut()
78
 def debut2 = units[1].getDeb()
79
 def fin2 = units[1].getFin()
80
 println "$debut2 - $fin2"
81
 */
82

    
83

    
84
for (Unite unit : units) { // process all units
85

    
86
        def debut = unit.getDeb()
87
        def fin = unit.getFin()
88
        def premierMot = CQI.cpos2Str(word.getQualifiedName(), debut)[0]
89

    
90
        if (premierMot != "de") {
91
                nIgnored1++
92
                compteur++
93
                continue
94
        } else {
95
                for (i = compteur-1; i >= 0 ; i--) {
96
                        def u = units[i]
97
                        def udeb = u.getDeb()
98
                        def ufin = u.getFin()
99
                        if (ufin >= fin) {
100
                                println "\nAVANT => Unit $compteur : $debut - $fin"
101
                                if (fin > debut) unit.setDeb( debut++ )
102
                                else println "not resizing"
103
                                def debut2 = unit.getDeb()
104
                                def fin2 = unit.getFin()
105
                                AnalecCorpora.getVue(analecCorpus).retablirVueParDefaut()
106
                                println "APRES => Unit $compteur : $debut2 - $fin2"
107
                                unit.getProps().put(category_name, check_cat)
108
                                break
109
                        }
110
                }
111
                if (i < 0) nIgnored2++
112
                else nModified++
113
                compteur++
114
        }
115
}
116

    
117
println "\nResult:"
118
println "- $nModified units have been modified."
119
println "- $nIgnored1 units have been ignored because not concerned"
120
println "- $nIgnored2 units have been ignored because no overlap.\n"
121
println "Total ($compteur)."
122

    
123
// END OF PARAMETERS
124
AnalecCorpora.getVue(analecCorpus).retablirVueParDefaut()
125
println "corpora selection: "+corpusViewSelection