forked from aymara/lima
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcompile-idiomatic.xml
262 lines (224 loc) · 10.8 KB
/
compile-idiomatic.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"/usr/share/sgml/docbook/xml-dtd-4.1.2/docbookx.dtd" [
]>
<article lang="fr">
<articleinfo>
<copyright>
<year>2005</year>
<holder>Romaric Besançon - CEA-LIST</holder>
</copyright>
<authorgroup>
<author>
<firstname>Romaric</firstname>
<surname>Besancon</surname>
<affiliation>
<address>
CEA-LIST
<email>[email protected]</email>
</address>
</affiliation>
</author>
</authorgroup>
<title>Comment compiler un fichier d'expressions idiomatiques</title>
<revhistory>
<revision>
<revnumber>0.1</revnumber>
<date>5 juillet 2005</date>
<authorinitials>RB</authorinitials>
</revision>
</revhistory>
</articleinfo>
<section>
<title>Introduction</title>
<para>L'objectif de ce document est de donner les instructions
pour compiler un fichier d'expressions idiomatiques
utilisateur. Nous expliquons d'abord les différents formats
sources possible des expressions idiomatiques et les mécanismes
nécessaires pour compiler le fichier selon le format source
choisi. La dernière section décrit la commande de
compilation.</para>
</section>
<section>
<title>Format des expressions idiomatiques</title>
<section>
<title>Règles de reconnaissance</title>
<para>Les expressions idiomatiques sont représentées, avant
compilation, par un ensemble de règles spécifiant un déclencheur
et des contextes gauche et droit de ce déclencheur. Ces règles
seront transformées en automates après compilation. Le format de
ces règles n'est pas détaillé dans ce document, il est décrit de
façon complète dans le document "<ulink
url="spec_regles.html"><citetitle>Spécifications du
format des règles pour la construction d'automates de
reconnaissance d'expressions</citetitle></ulink>".
</para>
<para>La compilation de ces règles se fait avec le programme
<emphasis>compile-rules</emphasis>, fourni dans le module
d'analyse linguistique <emphasis>s2lp</emphasis>.
</para>
<para>Les règles des expressions idiomatiques doivent spécifier la
catégorie de l'expression reconnue. Avec le fonctionnement actuel
des catégories, les catégories doivent être encodées avant la
compilation des règles. Cela implique au moins une opération
d'encodage des catégories avant la compilation des règles.
</para>
<para>Cet encodage se fait à l'aide d'un script Perl
(<emphasis>transcodeIdiomatic.pl</emphasis>) qui transforme les
catégories exprimées par un code symbolique (à la Grace) en
catégories numériques et qui utilise deux fichiers de
correspondance pour cela: un fichier indiquant la correspondance
entre le code symbolique et le découpage en propriétés
linguistiques (ce fichier est nommé
<emphasis>symbolicCode-xxx.xml</emphasis>, où
<emphasis>xxx</emphasis> est le trigramme de la langue), et un
fichier indiquant le codage numérique des différentes propriétés
linguistiques (ce fichier est nommé
<emphasis>code-xxx.xml</emphasis>, où <emphasis>xxx</emphasis> est
le trigramme de la langue).
</para>
<para><emphasis>Exemple</emphasis>: l'expression "<emphasis>avoir
tendance</emphasis>" est reconnue par la règle suivante:
<programlisting>tendance:&avoir$V [$ADV?]::ABS_IDIOM$V---i---:avoir tendance</programlisting>
où <emphasis>V---i---</emphasis> est la catégorie symbolique
indiquant un verbe intransitif.
</para>
<para>Cette règle sera transformée par ce script en
<programlisting>tendance:&avoir$V [$ADV?]::ABS_IDIOM$49280:avoir tendance</programlisting>
où la catégorie <emphasis>V---i---</emphasis> a été remplacée par
son code numérique (49280).
</para>
</section>
<section>
<title>Format simplifié</title>
<para>Pour garder la compatibilité avec un format précédent, un
format simplifié d'écriture des expressions idiomatiques est
possible. Ce format est le suivant:
<programlisting><champ1>;<champ2>;<abs>;<déclencheur>;<expression>;<catégorie>;<forme normalisée></programlisting>
où
<simplelist>
<member><computeroutput><champ1></computeroutput> est un
champ utilisé pour la gestion de la liste, il est ignoré à la
compilation</member>
<member><computeroutput><champ2></computeroutput> est un
champ de utilisé pour la gestion de la liste, il est ignoré à
la compilation</member>
<member><computeroutput><abs></computeroutput> est un
champ qui indique si l'expression est absolue (dans ce cas, ce
champ vaut "<computeroutput>A</computeroutput>") ou
contextuelle (dans ce cas, ce champ n'est pas rempli).
</member>
<member><computeroutput><déclencheur></computeroutput>
est le déclencheur de l'expression</member>
<member><computeroutput><expression></computeroutput>
est l'expression complète</member>
<member><computeroutput><catégorie></computeroutput> est
la catégorie linguistique de l'expression</member>
<member><computeroutput><forme
normalisée></computeroutput> est la forme normalisée de
l'expression</member>
</simplelist>
De plus, dans le déclencheur et l'expression, les éléments
suivants peuvent être précisés:
<itemizedlist>
<listitem><para><emphasis>tête</emphasis>: si le mot est tête
de l'expression, il est précédé par "&"</para>
</listitem>
<listitem><para><emphasis>lemme</emphasis>: si le mot est un
lemme, il est précédé de sa catégorie entre crochets</para>
</listitem>
<listitem><para><emphasis>mots en incise</emphasis>: si un mot
peut s'insérer dans l'expression mais ne fait pas partie de
l'expression, on indique la présence éventuelle de ce mot par
sa catégorie entre parenthèses.</para>
</listitem>
</itemizedlist>
Pour exprimer des conditions plus complexes, il est conseillé
d'utiliser plutôt le format des règles de reconnaissance
d'expressions.
</para>
<para>Dans ce format, la règle de reconnaissance de l'expression
"<emphasis>avoir tendance</emphasis>" sera écrite (en autorisant
l'insertion d'un adverbe entre "<emphasis>avoir</emphasis>" et
"<emphasis>tendance</emphasis>"):
<programlisting>D;;A;tendance;[V]&avoir (D) tendance;verbe intransitif;avoir tendance</programlisting>
</para>
<para>
Le format des catégories peut être le format symbolique, ou un
format texte plus explicite (ici, "<emphasis>verbe
intransitif</emphasis>" au lieu de
"<emphasis>V---i---</emphasis>"). Si le format est un format
texte explicite, un fichier de correspondance supplémentaire
est nécessaire pour établir la correspondance entre ce format
texte et la catégorie symbolique correspondante).
</para>
<para>
La transcription de ce format dans le format de règle se fait
par un script Perl (<emphasis>reformat_idioms.pl</emphasis>),
dont le rôle est essentiellement de retrouver le déclencheur
dans l'expression pour déterminer les parties gauche et
droite, faire éventuellement le changement de catégorie (en
lui indiquant quel fichier de correspondance de catégories
utiliser), et changer la syntaxe des lemmes et mots en incise.
</para>
</section>
</section>
<section>
<title>Dans la pratique</title>
<para>Le script <emphasis>compile-user-idiom.sh</emphasis>
encapsule les différentes instructions pour compiler les fichiers
d'expressions idiomatiques. A l'aide de quelques tests simples, il
essaye de deviner le format du fichier source et applique les
filtres nécessaires (si besoin est) pour créer un fichier de
règles puis le compile.
</para>
<para>L'application de ce script nécessite que l'environnement S2
soit disponible (en particulier que le programme
<emphasis>compile-rules</emphasis> soit accessible), et que
l'environnement de compilation des ressources soit également
disponibles (scripts de compilation et ressources spécifiques des
langues). Cet environnement est mis en oeuvre par le fichier
<emphasis>resources.env</emphasis> fourni avec les resources.
</para>
<para>Soit un fichier <emphasis>idiom-example-1.txt</emphasis>
contenant les règles suivantes de reconnaissance d'expressions
idiomatiques (pour reconnaître les expressions "appuyer sur le
champignon", "tomber dans les pommes", se creuser la tête"):
<programlisting>
set entityTypes=IdiomaticExpressions
set encoding=utf8
@AuxiliaireEtre=(être$L_V-L_VERBE_AUXILIAIRE_INDICATIF,
être$L_V-L_VERBE_AUXILIAIRE_SUBJONCTIF,
être$L_V-L_VERBE_AUXILIAIRE_INFINITIF)
champignon:&appuyer$L_V sur le::ABS_IDIOM$V---i---:appuyer sur le champignon
pommes:&tomber$L_V dans les::ABS_IDIOM$V---i---:tomber dans les pommes
&creuser$L_V:$L_PRON-L_PRON_REFLEXIF [(@AuxiliaireEtre)] [($L_ADV{0-2})?]:[($L_ADV?)] la tête
:ABS_IDIOM$V---p---:se creuser la tête
+AgreementConstraint(left.1,left.2,"NUMBER")
+AgreementConstraint(left.1,left.2,"PERSON")
&creuser$L_V:$L_PRON-L_PRON_REFLEXIF:[($L_ADV?)] la tête:ABS_IDIOM$V---p---:se creuser la tête
+AgreementConstraint(left.1,trigger,"NUMBER")
+AgreementConstraint(left.1,trigger,"PERSON")</programlisting>
Il sera compilé à l'aide de la commande
<programlisting>compile-user-idiom.sh idiom-example-1.txt</programlisting>
qui créera le fichier de règles compilé
<emphasis>idiom-example-1.bin</emphasis>
</para>
<para>Si on prend un fichier
<emphasis>idiom-example-2.txt</emphasis> contenant les règles
au format simplifié suivantes:
<programlisting>
;;A;champignon;[V]&appuyer sur le champignon;verbe intransitif;appuyer sur le champignon
;;A;pommes;[V]&tomber dans les pommes;verbe intransitif;tomber dans les pommes
;;A;[V]&creuser;se (pp) [V]&creuser la tête;verbe pronominal;se creuser la tête</programlisting>
Il sera compilé à l'aide de la même commande
<programlisting>compile-user-idiom.sh idiom-example-2.txt</programlisting>
qui créera le fichier de règles compilé
<emphasis>idiom-example-2.bin</emphasis>
</para>
<para>Ces fichiers pourront alors être utilisés comme resources
dans l'analyse en modifiant le fichier de configuration de
l'analyse (<emphasis>S2-lp-xxx.xml</emphasis>).
</para>
</section>
</article>