Statistics
| Revision:

root / tmp / org.txm.analec.rcp / src / org / txm / macro / urs / edit / LongueurDesMentionsMacro.groovy @ 1217

History | View | Annotate | Download (3.6 kB)

1
package org.txm.macro.urs.edit
2

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

    
16
/*
17
 Calcule la longueur des mentions et attribue une valeur (1, 2, 3 ou plus) dans la propriété "LONGUEUR"
18
 */
19

    
20
nLongueur1 = 0
21
nLongueur2 = 0
22
nLongueur3 = 0
23

    
24
def testRules(def positions, def Mention) {
25

    
26
        if (Mention.length == 1) {
27
                catégorie = "1"
28
                nLongueur1++
29
        }
30
        else if (Mention.length == 2) {
31
                catégorie = "2"
32
                nLongueur2++
33
        }
34
        else {
35
                catégorie = "3 ou plus"
36
                nLongueur3++
37
        }
38

    
39
        return catégorie
40
}
41

    
42
//
43
// FIN DE LA DÉFINITION DES RÈGLES
44
//
45

    
46
// CORPS DU SCRIPT
47

    
48
if (!(corpusViewSelection instanceof MainCorpus)) {
49
        println "Corpora selection is not a Corpus: "+corpusViewSelection
50
        return
51
}
52

    
53
// BEGINNING OF PARAMETERS
54
@Field @Option(name="unit_type", usage="", widget="String", required=true, def="MENTION")
55
def unit_type
56
@Field @Option(name="pos_property_name", usage="", widget="String", required=true, def="pos")
57
def pos_property_name
58
@Field @Option(name="reset", usage="", widget="Boolean", required=true, def="true")
59
def reset
60
if (!ParametersDialog.open(this)) return
61

    
62
corpus = corpusViewSelection
63
CQI = CQPSearchEngine.getCqiClient()
64
word = corpus.getWordProperty()
65
posProperty = corpus.getProperty(pos_property_name)
66
if (posProperty == null) {
67
        println "Error: CQP corpus does not contains the word property with name=$pos_property_name"
68
        return
69
}
70
analecCorpus = URSCorpora.getCorpus(corpus)
71
vue = URSCorpora.getVue(corpus)
72
structure = analecCorpus.getStructure()
73
if (!structure.getUnites().contains(unit_type)) { // check if the structure contains the unit_type units
74
        println "Error: corpus structure does not contains unit with name=$unit_type"
75
        return
76
}
77

    
78
LONGUEUR = "LONGUEUR"
79
// Si la structure d'annotation ne contient pas LONGUEUR, on la crée avec ses valeurs
80
if (!structure.getUniteProperties(unit_type).contains(LONGUEUR)) {
81
        // la propriété
82
        analecCorpus.ajouterProp(Unite.class, unit_type, LONGUEUR)
83
        // les valeurs
84

    
85
        structure.ajouterVal(Unite.class, unit_type, LONGUEUR, "1")
86
        structure.ajouterVal(Unite.class, unit_type, LONGUEUR, "2")
87
        structure.ajouterVal(Unite.class, unit_type, LONGUEUR, "3 ou plus")
88

    
89
        //...
90
}
91

    
92
def nModified = 0
93
def nIgnored = 0
94

    
95
errors = new HashMap()
96
def units = analecCorpus.getUnites(unit_type)
97
units.sort() { a, b -> a.getDeb() <=> b.getDeb() ?: a.getFin() <=> b.getFin() }
98
for (Unite unit : units) { // process all units
99

    
100
        def prop = unit.getProp(LONGUEUR)
101
        if (!reset && prop != null && prop.length() > 0) continue // l'unité a déjà une LONGUEUR
102

    
103
                int[] positions = null
104
        if (unit.getDeb() == unit.getFin()) positions = [unit.getDeb()]
105
        else positions = (unit.getDeb()..unit.getFin())
106

    
107
        def Mention = CQI.cpos2Str(posProperty.getQualifiedName(), positions)
108
        def cat = testRules(positions, Mention)
109

    
110
        if (cat != null) {
111
                vue.setValeurChamp(unit, LONGUEUR, cat)
112
                nModified++
113
        } else {
114
                nIgnored++
115
        }
116
}
117

    
118
println "Result:"
119
println "- $nModified units of type $unit_type have been modified."
120
println "- $nIgnored units of type $unit_type have not been modified.\n"
121

    
122
println "- $nLongueur1 mentions de longueur 1."
123
println "- $nLongueur2 mentions de longueur 2."
124
println "- $nLongueur3 mentions de longueur 3 ou plus.\n"
125

    
126
if (errors.size() > 0) {
127
        println "Some rules should be added to this macro to process the following remaining 'FROPOS / words' values:"
128
        errors.keySet().each { println "fropos="+it+"\twords="+errors[it].join(" | ") }
129
}