Move multiple translations
[apertium.git] / apertium2-documentation-ca / apertium2doc.tex
blob7f35df05fe4fd7e67f6b80b27a937498c8f25440
1 \documentclass [10pt,a4paper]{book}
2 \usepackage[dvips]{graphicx}
3 \usepackage{rotating}
4 \usepackage{palatino,helvet}
5 \usepackage[catalan]{babel}
6 \usepackage[latin1]{inputenc}
7 \usepackage{sectsty}
8 \usepackage{alltt}
9 \usepackage[small,bf]{caption}
10 \usepackage{url}
11 \usepackage{rotating}
12 \usepackage{longtable}
14 \newcommand{\notavisible}[1]{ \begin{small}
15 \begin{quote}
16 \begin{sf}
17 [#1] \end{sf}
18 \end{quote}
19 \end{small}
22 \newcommand{\nota}[1]{}
26 \title{\sffamily\bfseries Documentació de les modificacions al
27 sistema de traducció automàtica Apertium per al projecte
28 \emph{Traducció Automàtica de Codi Obert per al Català}}
30 \author{Grup Transducens\\ Universitat d'Alacant}
32 \begin{document}
33 \pagestyle{headings}
34 %\maxtocdepth{subsubsection}
35 %\maxtocdepth{paragraph}
37 %\settocdepth{subsubsection}
39 \maketitle
42 \newpage \thispagestyle{empty}
44 \bigskip
45 \begin{quote}
46 Copyright \copyright 2006 Grup Transducens, Universitat d'Alacant.\\
47 S'atorga permís per a copiar, distribuir i/o modificar aquest
48 document sota els termes de la Llicència de Documentació Lliure de
49 GNU, Versió 1.2 o qualsevol altra versió posterior publicada per la
50 \textit{Free Software Foundation}; sense seccions invariants ni
51 texts de portada o de contraportada. Una còpia de la llicència es
52 pot consultar en \url{http://www.gnu.org/copyleft/fdl.html}. Una
53 traducció no oficial al català d'aquesta llicència pot llegir-se en
54 \url{http://www.softcatala.org/llicencies/fdl-ca.html}.
55 \end{quote}
56 \bigskip
59 \newpage
60 \tableofcontents
62 \notavisible{Faena per fer (mlf):
63 \begin{itemize}
64 \item El document no diu encara res de metaparadigmes. En cal una descripció.
65 \item Caldria demanar comentaris a Marta Villegas com a usuària del document perquè ens indique parts fosques, possibles suggeriments, etc.
66 \item Hi ha bastants vacil·lacions en la terminologia usada per a referir-se a conceptes i en els noms usats per als programes.
67 \item He intentat substituir en cada cas l'expressió \emph{per defecte} per una altra més adequada; però caldrà distingir en quin cas ens trobem en cada cas.
68 \end{itemize}
70 \chapter{Mòdul de transferència estructural}
71 \label{ss:transfer}
73 \notavisible{El contingut d'aquest capítol modifica la secció 3.4 de
74 la documentació d'Apertium, pàg. 60.}
76 \section{Introducció}
78 La necessitat d'una nova arquitectura de transferència per a Apertium
79 apareix amb el requeriment de la implementació de traductors per a parells
80 de llengües menys emparentats que els que fins ara s'han tractat.
82 L'arquitectura de transferència d'Apertium es basa en la manipulació
83 automàtica de determinats patrons d'aparició de paraules
84 mit\-jan\-çant regles definides per l'usuari. Aquest model l'anomenem
85 \textit{transferència sintàctica superficial}. Una visió
86 esquemàtica del sistema ens mostra una estructura que considera dos
87 nivells des del punt de vista de la naturalesa de les dades: un nivell
88 bàsic que denominem \textit{nivell lèxic}, que s'ocupa de les paraules
89 i de les operacions de consulta i modificació de les seues
90 característiques (lema i etiquetes), a més de la traducció de lemes
91 individuals mit\-jan\-çant consultes al diccionari bilingüe; i un
92 altre nivell que denominem \textit{nivell de patrons de paraules}, que
93 s'encarrega de fer, quan convé, reordenaments amb les paraules que
94 constitueixen aquests patrons, així com canvis en les característiques
95 de les paraules que depenguen de cada patró concret que haja sigut
96 detectat. Tot aquest processament de detecció i manipulació lèxica i
97 de patrons es du a terme en una única passada.
99 Com a contrast, la nova arquitectura de transferència, que anomenarem
100 Apertium 2, es defineix com un sistema de transferència lèxica avançada
101 en tres nivells i tres passades. Els dos primers nivells, el nivell
102 lèxic i el de patrons, són homòlegs als del transfer d'Apertium. El
103 nou nivell que apareix és un nivell de \emph{patrons de patrons} de
104 paraules. L'objectiu de la existència d'aquest nou nivell de
105 processament és permetre la manipulació i la relació de patrons
106 de patrons de paraules de manera similar a com es tracten les paraules
107 en els patrons de paraules d'Apertium.
109 Amb aquesta nova estructura de nivells es pretén que hi haja un
110 tractament més adequat de totes les transformacions que es requereixen
111 per a traduir d'una llengua a una altra. Per això s'ha de posar de
112 manifest que la identificació de patrons de paraules en Apertium no ha
113 de coincidir amb la identificació de patrons en Apertium 2: es pretén
114 que els patrons en Apertium 2 tinguen un \textit{esperit}
115 de sintagmes que no tenien en Apertium. Per aquesta raó utilitzarem
116 el terme \textit{segment} (en anglès \textit{chunk}), per a
117 referir-nos a les seqüències de paraules d'Apertium 2.
119 L'arquitectura de transferència d'Apertium 2 s'organitza en tres
120 passades. Seguint el model de processament d'Apertium, aquestes tres
121 passades són realitzades per tres mòduls (programes) diferents:
123 \begin{itemize}
124 \item \texttt{transfer} (intrachunk): identifica els segments, realitza
125 la traducció paraula per paraula, així com certes operacions de
126 reordenament i propagació d'informació morfosintàctica dins del
127 segment (per exemple, per a establir-hi la concordança). A més, crea
128 els segments perquè siguen tractats pel mòdul següent.
129 \item \texttt{interchunk}: aquest mòdul rep els segments construïts
130 per l'\texttt{in\-tra\-chunk} i permet reordenar-los,
131 modificar la ``informació sintàctica'' associada a cada segment i, finalment,
132 imprimir els segments en l'ordre nou i amb les característiques
133 noves en l'eixida, creant segments nous si és necessari.
134 \item \texttt{postchunk}: aquest mòdul rep els segments modificats
135 per l'interchunk i realitza tasques finals de modificació de les
136 paraules contingudes en cada segment i d'impressió del text
137 contingut en els segments en el format que accepta el generador.
138 \end{itemize}
140 L'especificació concreta de les tasques de cada mòdul es troba en les
141 seccions corresponents.
143 \section{Format dels segments}
144 \label{sec:format}
146 \notavisible{El document presenta una vacil·lació entre les denominacions
147 \emph{intrachunk} i \emph{transfer}; caldria elegir una i usar-la en tot el
148 document.}
150 La comunicació entre els mòduls \texttt{intrachunk} i
151 \texttt{interchunk}, al igual que la comunicació entre
152 \texttt{interchunk} i \texttt{postchunk}, es du a
153 terme mit\-jan\-çant seqüències de segments. Definim $C$ com una
154 \emph{seqüència de segments}, que té la forma:
156 C=b_{0}c_{1}b_{1}c_{2}b_{2} \ldots b_{k-1}c_{k}b_{k}
159 On cada $b_i$ és un \textit{superblanc}, i cada $c$ és un \emph{segment}. Un
160 segment $c$ es defineix com a una cadena
161 \verb!^!$F$\verb!{!$W$\verb!}$! que conté la següent
162 informació:
164 \begin{itemize}
165 \item $F$ és el \emph{pseudolema del segment}, i és una cadena que
166 té la forma $fE$, on $f$ és el \textit{pseudolema} del segment, i
167 $E=e_{1}e_{2} \ldots$ es una seqüència de etiquetes morfològiques
168 denominades \emph{etiquetes del segment}. La modificació d'aquestes
169 etiquetes provocarà la modificació de la informació morfològica de
170 les paraules dins del segment que estiga enllaçada a aquests
171 paràmetres.
172 \item $W=b_{0}w_{1}b_{1}w_{2}b_{2} \ldots w_{k}b_{k}$ és la seqüència de
173 paraules $w_i$ enviada pel transfer,
174 \notavisible{Ací cal canviar \emph{transfer} per una altra denominació més
175 adequada} amb els \textit{superblancs}
176 $b_i$ intercalats. Aquestes paraules es troben en el mateix format
177 d'Apertium, és a dir, una paraula individual
178 $w_i=$\verb!^!$l_{i}E_{i}$\verb!$! conté lema $l_i$ i etiquetes $E_i$, algunes
179 de les quals poden ser \emph{referències o enllaços a les etiquetes} del segment i
180 es designen amb números naturals \texttt{<1>}, \texttt{<2>},
181 \texttt{<3>}, etc. Aquestes referències a etiquetes corresponen, en
182 l'ordre especificat, amb les etiquetes d'$E$.
183 \end{itemize}
185 Un exemple d'ús d'aquest format és el següent:
187 \begin{small}
188 \begin{alltt}
189 \verb!^!det_nom<SN><m><pl>\verb!{^!el<det><def><2><3>$[
190 <a href="http://www.ua.es">]^gat<n><2><3>$\verb!}$![</a>]
191 \end{alltt}
192 \end{small}
194 Els caràcters \verb!{! i \verb!}!, quan estiguen presents en el text
195 original, hauran de ser protegits amb una barra invertida \verb!\! al
196 davant.
198 \subsection{Tractament de majúscules i minúscules}
199 \label{ss:majuscules}
200 Per a cada segment, la informació de majúscules i minúscules de les paraules ve determinada
201 per la informació de majúscules i minúscules del
202 pseudolema del segment, tenint en compte aquestes condicions:
204 \begin{itemize}
205 \item Si totes les lletres del pseudolema estan en minúscules: l'estat de majúscules i
206 minúscules no es modifica.
207 \item Si la primera lletra del pseudolema està en majúscules i la
208 resta en minúscules: en la generació en el mòdul
209 \texttt{trans\-fer\--post}, es farà que la primera lletra que
210 resulte de tots els possibles canvis d'ordre dels mots del segment estiga en majúscules.
211 \notavisible{Crec que aquí hauria de dir \texttt{postchunk} i no
212 \texttt{transferpost}.}
213 \item Si totes les lletres del pseudolema estan en majúscules: totes
214 les paraules romandran en majúscules.
215 \end{itemize}
217 Una requisit és que les paraules de l'interior del segment no
218 comencen per majúscules si no es tracta de noms propis, per tal
219 d'evitar que l'últim mòdul busque quina és la paraula que ha de perdre
220 la majúscula, si n'hi ha. Aquesta tasca correspon al mòdul
221 \texttt{trans\-fer\--in\-tra\-chunk}
222 \notavisible{Ací no hauria de dir \texttt{intrachunk} només?}
223 i es fa mitjançant una macro o
224 algun mecanisme similar.
226 \section{Programa \texttt{transfer} (\texttt{intrachunk})}
228 Aquest programa és l'hereu més directe del mòdul de transferència
229 d'Apertium. De fet, un dels objectius del disseny d'aquest programa
230 és que siga plenament compatible amb l'actual mòdul de transferència.
232 \subsection{Entrada/eixida}
234 \begin{itemize}
235 \item Entrada: dades amb el format d'eixida del \texttt{pretransfer}, és a dir,
236 amb les cues invariants dels multimots desplaçats a una posició
237 anterior a qualsevol etiqueta.
238 \item Eixida: segments (chunks), perquè el mòdul següent els
239 detecte i realitze operacions amb ells.
240 \end{itemize}
242 \subsection{Fitxers de dades}
244 \notavisible{Explicar millor això de l'únic fitxer de configuració}
245 Aquest programa usa un únic fitxer de configuració i un fitxer
246 precompilat de detecció de patrons calculat a partir del primer, de
247 manera idèntica a Apertium. El nom del fitxer de patrons tindrà
248 l'extensió \texttt{.t1x}. Com que \texttt{intrachunk} es qui fa la
249 consulta del diccionari bilingüe, aquest (en forma compilada) també
250 s'ha d'aportar al programa.
252 \notavisible{Potser seria bona idea esmentar en quina secció s'explica el
253 compilador a què es fa referència}
255 La DTD d'aquest fitxer de dades s'especifica en l'apèndix
256 \ref{ss:dtdtransfer}.
258 \subsection{Detecció de patrons}
260 El sistema de detecció de regles d'aquest mòdul serà el mateix que en
261 el mòdul de transferència actual d'Apertium. El programa
262 \texttt{a\-per\-tium-pre\-trans\-fer}
263 \notavisible{Vacil·lació terminològica \texttt{pretransfer}.}
264 és necessari per a adaptar el format
265 d'eixida de l'etiquetador a l'entrada que reconeix el mòdul de
266 transferència. En posteriors versions d'Apertium no es descarta que es
267 modifique el \textit{desambiguador categorial} perquè faça la feina del
268 \texttt{apertium-pretransfer}.
269 \notavisible{També hem d'unificar la terminologia d'altres mòduls:
270 \emph{desambiguador categorial}, \emph{etiquetador}; tal com està redactat
271 el paràgraf es podria pensar que són dues coses diferents.}
273 \subsection{Especificació de les accions associades}
275 És bàsicament similar a l'actual mòdul de transferència d'Apertium,
276 amb les següents incorporacions:
278 \begin{itemize}
279 \item Especificació de l'acció implícita en l'element arrel
280 \texttt{<transfer>}. Aquest element té l'atribut opcional
281 \texttt{default} que pot tenir els valors \texttt{lu} (valor per
282 defecte) o \texttt{chunk} depenent de si es vol que el transfer
283 funcione a la manera d'Apertium 1 o d'Apertium 2, respectivament.
284 \item Atribut \texttt{comment} (opcional) per als elements
285 \texttt{<rule>}. Les regles tindran a partir d'ara un comentari que
286 permetrà d'incloure informació que s'usarà per a documentació.
287 \item Generació de segments (chunks): l'etiqueta \texttt{<chunk>} és una etiqueta d'un nivell més alt
288 que \texttt{<lu>} (\textit{lexical unit}) que
289 permet generar segments amb les característiques que han sigut
290 especificades a la secció anterior; \texttt{<chunk>} i té els següents atributs:
291 \begin{itemize}
292 \item \texttt{name} (opcional): pseudolema del segment. Una
293 cadena que permeta d'identificar el pseudolema del segment.
294 \item \texttt{namefrom} (opcional): pseudolema del segment, obtingut
295 d'una variable. És obligatori especificar bé \texttt{name} o bé
296 \texttt{namefrom}.
297 \item \texttt{case} (opcional): variable que serveix per a obtenir
298 la informació de majúscules o minúscules d'una variable i
299 aplicar-la al lema especificat bé per \texttt{name}, bé per
300 \texttt{namefrom}.
301 \end{itemize}
302 \item Cada chunk comença per una instrucció \texttt{<tags>}, que no
303 permet especificar cap atribut, la qual, per la seua part, conté una
304 o més instruccions individuals \texttt{<tag>}.
305 \item Les instruccions \texttt{<tag>} no tenen atributs. Dins d'elles
306 es pot posar qualsevol instrucció que torne com a valor una cadena:
307 \texttt{<lit>}, \texttt{<var>}.
308 \item Les instruccions \texttt{<clip>} tenen un nou atribut opcional:
309 \texttt{link-to}, que serveix per a especificar una etiqueta
310 \verb!<!\textit{valor de link-to}\verb!>! en comptes de
311 \notavisible{Es ``en comptes de'' o ``addicionalment a''?}
313 informació que continga el \texttt{<clip>} en la resta d'atributs.
314 Aquesta informació és prescindible però pot servir com a
315 documentació de l'origen de la decisió lingüística.
316 \end{itemize}
318 Veiem amb un exemple l'ús de l'element \texttt{<chunk>}:
320 \begin{alltt}
321 <out>
322 <chunk name="adj-nom" case="variableCase">
323 <tags>
324 <tag><lit-tag v="SN"/></tag>
325 <tag><clip pos="2" side="tl" part="gen"/></tag>
326 <tag><clip pos="2" side="tl" part="nbr"/></tag>
327 </tags>
328 <lu>
329 <clip pos="2" side="tl" part="lemh"/>
330 <clip pos="2" side="tl" part="a_nom"/>
331 <clip pos="2" side="tl" part="gen" link-to="2"/>
332 <clip pos="2" side="tl" part="nbr" link-to="3"/>
333 </lu>
334 <b pos="1"/>
335 <lu>
336 <var n="adjectiu"/>
337 <clip pos="1" side="tl" part="lem"/>
338 <clip pos="1" side="tl" part="a_adj"/>
339 <clip pos="2" side="tl" part="gen" link-to="2"/>
340 <clip pos="2" side="tl" part="nbr" link-to="3"/>
341 </lu>
342 </chunk>
343 </out>
344 \end{alltt}
346 \subsection{Acció implícita}
348 Els \textit{superblancs} aïllats, que no són detectats per cap patró
349 d'aquest mòdul s'escriuen en el mateix ordre en què arriben.
351 L'element arrel del fitxer \texttt{.t1x} de regles del
352 \texttt{in\-tra\-chunk}, \texttt{<transfer>}, té un
353 atribut opcional \texttt{default} que pot prendre els valors
354 \begin{itemize}
355 \item \texttt{chunk}: en el cas que es vulga que el mòdul genere
356 segments trivials amb les paraules que no puga incloure en la
357 formació de cap segment o que no hagen sigut especificats. Aquest
358 és el cas d'Apertium 2. El nou segment es crearà
359 mit\-jan\-çant la traducció de la paraula pel diccionari bilingüe.
360 El lema fix dels chunks creats implícitament és
361 \texttt{default}.
362 \item \texttt{lu} (valor implícit): el funcionament actual per
363 defecte del mòdul de transferència d'Apertium 1, traduint la paraula
364 amb el diccionari bilingüe.
365 \end{itemize}
367 A continuació es mostra el resultat del processament implícit d'un
368 segment que no ha sigut detectat per cap regla del
369 \texttt{trans\-fer\--in\-tra\-chunk}:
370 \notavisible{Denominació consistent!!}
373 \begin{alltt}
374 ^default\verb!{!^that<cnjsub>$\verb!}!$
375 \end{alltt}
377 \notavisible{Va sense etiquetes entre \texttt{default} i \texttt{\{}? No caldria dir-ho explícitament?}
379 \section{Programa \texttt{interchunk}}
381 \notavisible{És \texttt{apertium-interchunk} o \texttt{interchunk} només?}
383 El programa \texttt{interchunk} tracta els segments, els reordena i fa els
384 canvis pertinents en la informació morfosintàctica. Això es fa
385 mit\-jan\-çant la detecció de patrons de segments (seqüències de
386 segments). La sintaxi de les instruccions que s'usen per a controlar
387 el seu funcionament són, amb poques diferències, les mateixes que usa
388 el programa \texttt{transfer} d'Apertium 1 o el \texttt{intrachunk}
389 d'Apertium 2, però ha de quedar clar que s'utilitza un arxiu
390 diferent. Els segments són tractats de forma similar a com es
391 tracten les paraules en el transfer d'Apertium.
392 \notavisible{Comprovar la denominació dels programes}
394 \subsection{Entrada/eixida}
396 \begin{itemize}
397 \item Entrada: segments procedents d'\texttt{intrachunk}.
398 \notavisible{Nom OK?}
399 \item Eixida: segments possiblement reordenats i amb la informació del
400 pseudolema del segment possiblement modificada.
401 \end{itemize}
403 \subsection{Fitxers de dades}
405 Aquest mòdul usa dos fitxers de dades. Un fitxer d'especificació del
406 comportament del programa \texttt{in\-ter\-chunk}, amb extensió
407 \texttt{.t2x} pera analogia amb el mòdul anterior, i un
408 fitxer de patrons precalculats per a accelerar l'anàlisi de l'entrada.
409 No s'hi inclou el fitxer binari del diccionari bilingüe perquè no
410 s'usa.
411 \notavisible{Citar el compilador?}
413 La sintaxi del fitxer d'especificació és molt similar a la del mòdul
414 \texttt{in\-tra\-chunk}, i s'especifica en l'apèndix
415 \ref{ss:dtdinterchunk}.
418 \subsection{Detecció de regles}
420 Les regles detecten patrons que estan definits mitjançant seqüències
421 de pseudoparaules. Aquestes pseudoparaules tenen un format basat en
422 el format de la forma lèxica de les paraules. Des del punt de vista
423 pràctic, aquest pseudolema és vist de manera equivalent a com es
424 \notavisible{L'alternança \emph{pseudolema} i \emph{pseudoparaula} s'ha de resoldre}
425 veu la forma lèxica d'una paraula en el mòdul
426 \texttt{in\-tra\-chunk} per a realitzar la detecció.
427 D'aquesta forma, s'usarà una detecció de patrons amb atributs definits
428 sobre les pseudoparaules i no sobre les paraules del patró original.
431 \subsection{Especificació de les accions associades}
433 Les modificacions en el joc d'instruccions d'aquest mòdul ---respecte
434 del joc d'instruccions utilitzat en
435 \texttt{in\-tra\-chunk}--- són les següents:
437 \begin{itemize}
438 \item L'element arrel es diu \texttt{<interchunk>} i no especifica cap
439 atribut.
440 \item Desaparició de l'atribut \texttt{side}: aquest mòdul no fa
441 servir diccionaris bilingües; per tant l'atribut que indica si la
442 part que es consulta és l'origen o la meta no té sentit. Aquest
443 atribut era usat fonamentalment en les instruccions \texttt{<out>}.
444 \item L'etiqueta \texttt{<chunk>} ara s'usa sense atributs,
445 senzillament dins de \texttt{<out>} per a delimitar l'eixida de
446 segments.
447 \item L'atribut predefinit \texttt{lem} fa referència al pseudolema
448 del segment. De la mateixa manera, l'atribut predefinit
449 \texttt{tags} fa referència a les etiquetes del segment. El
450 contingut del segment queda com una cua que es pot imprimir
451 mitjançant l'atribut implícit \texttt{chcontent}.\notavisible{Només imprimir o s'hi pot fer referència també?}
452 \notavisible{Dir de quin element són aquests atributs}
453 \item Tots els valors de \texttt{part}, excepte \texttt{chname},
454 accedeixen a la informació del lema i les etiquetes del
455 pseudolema de cada segment.
456 \item A diferencia del que succeeix en el \texttt{trans\-fer\--in\-ter\-chunk},
457 \notavisible{Denominació!!} no es
458 permet d'imprimir una altra cosa que \texttt{<chunk>}s en les instruccions
459 \texttt{<out>} en el fitxer d'especificació del comportament
460 d'aquest mòdul, i en cap cas paraules soltes.
461 \end{itemize}
463 \subsection{Acció implícita}
465 Al igual que en el mòdul anterior, s'hi ha establert una acció
466 implícita que escriu sense modificar els segments no reconegut per cap
467 patró del fitxer d'especificació d'aquest mòdul. Aquesta acció implícita
468 escriu exactament el que llig, tant si es tracta de chunks com
469 de blancs.
470 \notavisible{Atenció a la vacil·lació \emph{regla}/\emph{acció} en la resta del document. Sempre havia cregut que era \emph{regla}=\emph{patró}+\emph{acció}.}
472 \section{Programa \texttt{postchunk}}
474 El programa \texttt{postchunk} detecta segments individuals, i per a
475 cadascun d'ells, executa unes accions especificades. La detecció es
476 basa en els lemes del segment,
477 \notavisible{Seria \emph{en el lema}?}
478 i no en patrons (no en les etiquetes);
479 això farà que la detecció en aquest mòdul siga específica per a cada
480 ``nom'' de segment.\notavisible{Quan fixem bé la terminologia hem d'assegurar-nos que la redacció d'aquesta part és l'adequada.}
482 D'altra banda, el funcionament de la detecció i del processament de
483 les regles es basa en que les referències a paràmetres es resolen
484 immediatament després de la detecció, és a dir, les etiquetes
485 \texttt{<1>}, \texttt{<2>}, etc. són substituïdes automàticament pel
486 valor dels paràmetres abans de començar el processament. Les posicions
487 (atribut \texttt{pos}) a les quals es fa referència amb les
488 instruccions \texttt{<clip>}, etc. corresponen a la posició de les
489 paraules en l'interior del segment.
491 També aplica automàticament la política de majúscules (veure secció
492 \ref{ss:majuscules}) dels lemes de les pseudoparaules cap a les
493 paraules que són dins del segment.
495 \subsection{Entrada/eixida}
497 \begin{itemize}
498 \item Entrada: segments procedents d'\texttt{in\-ter\-chunk}.
499 \item Eixida: entrada vàlida del mòdul de generació morfològica d'Apertium.
500 \end{itemize}
502 \subsection{Fitxers de dades}
504 Aquest programa té el seu propi arxiu d'especificació, que tindrà
505 extensió \texttt{.t3x}. La sintaxi està basada igualment en el
506 \texttt{transfer} d'Apertium i en el
507 \texttt{trans\-fer\--in\-ter\-chunk} d'Apertium 2.
508 \notavisible{Explicar que no ha de llegir cap fitxer compilat de patrons perquè usa noms i no patrons?}
510 \subsection{Detecció de regles}
512 La detecció dels segments es basa en el nom dels segments. Els
513 segments no detectats reben el processament implícit.
515 \subsection{Especificació de les accions associades}
517 Les diferències en les accions amb
518 \texttt{trans\-fer\--in\-ter\-chunk} són les següents:
520 \begin{itemize}
521 \item Prohibició de l'escriptura de segments (\texttt{<chunk>}s) a
522 l'eixida: només es poden escriure unitats lèxiques d'un mot
523 (\texttt{<lu>}) o de més d'un mot (\texttt{<mlu>}).
524 \notavisible{Comprovar aquest ítem perquè era incomplet i l'ha completat mlf}
525 \item Nou atribut de detecció \texttt{name} de \texttt{<pattern-item>},
526 que s'usa en la part de \texttt{<pattern>} de les regles de manera
527 aïllada, per tal de forçar la detecció dels patrons pel seu nom.
528 \notavisible{Què vol dir ``de manera aïllada''? Sembla que vulga dir ``de tant en tant''}
529 \item Tampoc existeix l'atribut \texttt{side} als elements als quals
530 és aplicable en el mòdul \texttt{trans\-fer\--in\-ter\-chunk}, per
531 la mateixa raó que en \texttt{trans\-fer\--in\-ter\-chunk}: no
532 s'accedeix al diccionari bilingüe.
533 \end{itemize}
535 \subsection{Acció implícita}
537 En aquest mòdul l'acció implícita és la d'escriure les paraules de
538 dins del segment, substituint-hi les referències pels paràmetres del
539 segment. Serà usada per la major part de segments, ja que es preveu
540 que aquest mòdul s'utilitze per a casos molts específics en què
541 calga fer algun processament molt específic.
543 També s'aplica implícitament la política de majúscules (secció
544 \ref{ss:majuscules}).
546 En qualsevol cas, els blancs externs als segments són copiats en el
547 mateix ordre en el que són llegits, ja que la detecció de segments és
548 unitària (aquest mòdul no els agrupa).
552 \section{Elements dels formats de transferència}
553 \label{formatotransfer}
555 En aquesta secció s'explica el format en el qual s'escriuen les regles
556 de transferència estructural. En l'apèndix, a les seccions
557 \ref{ss:dtdtransfer}, \ref{ss:dtdinterchunk} i \ref{ss:dtdpostchunk}
558 s'ofereix la descripció formal (DTD). Els arxius de regles de
559 transferència estructural tenen dues parts ben diferenciades: una de
560 declaració dels elements que s'utilitzaran en les regles i altra de
561 regles pròpiament dites.
563 En la part de \textbf{declaració} trobem:
565 \begin{itemize}
566 \item Una sèrie de declaracions de \emph{categories lèxiques} que
567 especifiquen aquelles formes lèxiques que seran tractades com una
568 categoria particular i que seran detectades en els patrons. Hem de
569 destacar que el lingüista pot incloure qualsevol informació de la
570 forma lèxica per a definir una categoria; les categories poden ser
571 molt genèriques (p.e. tots els noms) o molt específiques (p.e. només
572 aquells determinants que són demostratius femenins i plurals).
573 \item Una sèrie de declaracions dels \emph{atributs} que volem
574 detectar en les formes lèxiques (com el \emph{gènere}, el
575 \emph{nombre}, la \emph{persona} o el \emph{temps}), per a
576 realitzar amb ells les operacions de transformació pertinents i
577 enviar la informació resultant a la sortida de les regles. En la
578 declaració dels atributs s'inclou el nom de l'atribut i els
579 possibles valors que pot prendre aquest atribut en una forma lèxica
580 (en general es corresponen amb els símbols morfològics que la
581 caracteritzen): per exemple, l'atribut de \emph{nombre} pot prendre
582 els valors de \emph{singular}, \emph{plural}, \emph{singular-plural}
583 (per a formes lèxiques invariables, com \emph{crisis} en espanyol) i
584 \emph{nombre per determinar} (per a formes lèxiques de la LM amb
585 distinció \emph{singular}--\emph{plural} el nombre de la qual no es
586 pot determinar en la traducció perquè la forma lèxica de la LO
587 és invariable en nombre). Si dins de la regla, fora del patró, s'ha de
588 fer referència a alguna de les categories lèxiques definides en
589 el punt anterior (per a sotmetre-les a accions o comprovacions),
590 s'han de definir també atributs per a aquestes.
591 \item Una sèrie de declaracions de variables \emph{globals}, que
592 s'usen per a transferir valors d'atributs actius dins de cada
593 regla o d'una regla a les quals s'apliquen posteriorment.
594 \item Una secció de \textit{definició de llistes de cadenes},
595 generalment llistes de lemes, que seran utilitzats per a buscar-hi
596 un valor que correspongui per a realitzar una transformació
597 determinada.
598 \item Una sèrie de declaracions de \emph{macroinstruccions}; les
599 macroinstruccions contenen seqüències d'instruccions d'operacions
600 freqüents i es poden incloure en diverses regles (per exemple, una
601 macroinstrucció per a assegurar la concordança de gènere i nombre
602 entre dues formes lèxiques d'un mateix patró).
603 \end{itemize}
605 En \textbf{les regles de transferència estructural} trobem:
606 \begin{itemize}
607 \item La definició del patró que serà detectat, especificat com una
608 seqüència de categories lèxiques tal com s'han definit en la part de
609 declaració. Cap ressaltar que, si la seqüència de formes lèxiques
610 concorda amb dues regles diferents, primer, preval la més llarga i,
611 segon, per a regles de la mateixa longitud, preval la regla definida
612 en primer lloc.
613 \item La part de processament de les regles, en la qual s'especifiquen les
614 accions a realitzar sobre les FLLO i es construeix el patró en la
616 \end{itemize}
617 \notavisible{Assegurem-nos que totes les sigles estan definides}
619 A continuació s'expliquen detalladament les característiques de
620 cadascun dels elements utilitzats.
622 \subsection{Element \texttt{<transfer>}}
624 \textit{Només transfer/intrachunk}
625 \notavisible{Decidim-nos per un nom}
627 És l'element arrel del mòdul transfer/intrachunk i conté tots els
628 altres elements de l'arxiu de regles de transferència
629 estructural d'aquest mòdul.
631 Té un atribut, \texttt{default}, que pot prendre els valors
632 \texttt{lu} ---que indica que les paraules implícites han de deixar-se
633 intactes, i que funcionarà com un transfer d'Apertium 1.0--- o
634 \texttt{chunk} ---que indica que es crearà d'ofici un segment que
635 encapsule la paraula no reconeguda perquè puga ser tractada pels
636 següents mòduls en Apertium 2. El valor implícit és \texttt{lu}.
638 \subsection{Element \texttt{<interchunk>}}
640 \textit{Només interchunk}
642 És l'element arrel del mòdul interchunk i conté tots els
643 altres elements de l'arxiu de regles de transferència
644 estructural d'aquest mòdul.
646 \subsection{Element \texttt{<postchunk>}}
647 \notavisible{Atenció a l'ús polisèmic del mot \emph{categoria} en el document}
649 \textit{Només postchunk}
651 És l'element arrel del mòdul interchunk i conté tots els
652 altres elements de l'arxiu de regles de transferència
653 estructural d'aquest mòdul.
655 \subsection{Element de secció de definició de
656 categories \\\texttt{<section-def-cats>}}
658 En aquesta secció es defineixen les categories lèxiques que s'usaran
659 per a crear els patrons utilitzats en les regles. Cada definició es
660 realitza amb un \texttt{<\textbf{def-cat}>}.
662 \subsection{Element de definició de categories \texttt{<def-cat>}}
664 Cada definició de categoria té un nom \texttt{n} obligatori com per
665 exemple \texttt{det}, \texttt{adv}, \texttt{prep}, etc. i una llista de
666 categories (\texttt{<\textbf{cat-item}>}) que la defineixen. El
667 nom de la categoria no pot contenir accents.
669 \subsection{Element de categoria \texttt{<cat-item>}}
671 Aquest element té dos usos diferenciats segons en el mòdul en què s'use.
673 \subsubsection{Ús en transfer/intrachunk i en interchunk}
675 Mitjançant aquest element es defineixen les categories lèxiques que es
676 faran servir en els patrons, és a dir, que es vol detectar en el text
677 origen. Aquestes categories es defineixen a partir d'una subseqüència
678 de les etiquetes que donen tant l'analitzador morfològic com el
679 desambiguador. Cal tenir en compte que al llarg dels diferents mòduls
680 de processament lingüístic s'utilitzen diferents categoritzacions
681 lèxiques: en els diccionaris morfològics, els lemes s'acompanyen d'una
682 etiqueta fina (per exemple, \texttt{\emph{<n><m><pl>}} per als noms
683 masculins en plural); el desambiguador categorial agrupa aquestes
684 etiquetes fines en etiquetes més generals (per exemple, la categoria
685 \texttt{NOM} per a tots els noms), encara que a la seva sortida torna
686 a lliurar l'etiqueta fina completa de cada FL; finalment, en el mòdul
687 de transferència, les etiquetes fines de les FL s'agrupen altra vegada
688 en categories més generals (encara que poden definir-se també
689 categories detallades) segons el tipus de formes lèxiques que es
690 vulgui detectar en els patrons.
692 \notavisible{Assegurem-nos que totes les abreviatures estan definides}
694 Cada element \texttt{<\textbf{cat-item}>} té un atribut
695 obligatori \texttt{tags} el valor del qual és una seqüència de símbols
696 gramaticals separats per punts; aquesta seqüència és una subseqüència
697 de la etiqueta fina, és a dir, de la seqüència de símbols gramaticals
698 que defineix cada possible forma lèxica lliurada pel desambiguador
699 lèxic categorial. D'aquesta manera, una categoria representa un
700 determinat conjunt de formes lèxiques. S'han de definir tantes
701 categories diferents com tipus de formes lèxiques es vulga detectar en
702 els patrons. Així, si ens interessa detectar tots els noms (cas de
703 l'\texttt{intrachunk}) o tots els sintagmes nominals de determinat tipus (cas
704 de l'\texttt{interchunk}) per a realitzar operacions amb ells, crearem una
705 categoria definida a partir del símbol gramatical \texttt{n}. D'altra
706 banda, si ens interessa detectar tots els noms femenins i plurals,
707 hauríem de definir una categoria mitjançant els símbols \texttt{n}
708 \texttt{f} i \texttt{pl}.
710 \notavisible{Atenció als noms dels programes: unifiquem-los}
712 Quan un símbol gramatical utilitzat per a definir una categoria ve
713 seguit per altres símbols gramaticals en el grup de lemes que se volen
714 incloure, s'utilitza el caràcter \texttt{"*"}. Per exemple,
715 \texttt{tags}=\texttt{"n.*"} abasta totes les formes lèxiques que
716 continguen aquest símbol, com ara \texttt{casa<n><f><pl>} o
717 \texttt{cotxe<n><m><sg>} per al cas de l'\texttt{intrachunk}; l'ús en
718 el mòdul \texttt{interchunk} seria anàleg però amb pseudoparaules.
719 \notavisible{Atenció a la terminologia \emph{pseudo-}}
720 En canvi, quan darrere del símbol utilitzat no pot venir cap altre
721 símbol, no s'inclou l'asterisc: per exemple,
722 \texttt{tags}=\texttt{"}\texttt{adv"} abastarà tots els adverbis.
723 També pot utilitzar-se l'asterisc per a indicar l'existència de
724 símbols precedents: \texttt{tags}=\texttt{"*.f.*"} inclou a totes les
725 formes lèxiques femenines, siguin de la categoria que siguin. A més,
726 pot utilitzar-se un atribut opcional, \texttt{lemma}, per a definir
727 formes lèxiques a partir del seu lema (veure figura
728 \ref{fig:cat-item}).
730 \notavisible{L'exemple elegit pot ser fosc per a molts lectors que no saben que els adverbis no porten més etiquetes}
732 \begin{figure}
733 \begin{small}
734 \begin{alltt}
735 <\textbf{def-cat} \textsl{n}="nom"/>
736 <\textbf{cat-item} \textsl{tags}="n.*"/>
737 </\textbf{def-cat}>
738 <\textbf{def-cat} \textsl{n}="que"/>
739 <\textbf{cat-item} \textsl{lemma}="que" \textsl{tags}="cnjsub"/>
740 <\textbf{cat-item} \textsl{lemma}="que" \textsl{tags}="rel.an.mf.sp"/>
741 </\textbf{def-cat}>
742 \end{alltt}
743 \end{small}
744 \caption{Ús de l'element \texttt{<\textbf{cat-item}>} per a definir
745 dues categories, una per a noms sense especificar cap lema
746 (\emph{nom}) en la qual s'inclouen totes les formes lèxiques el
747 primer símbol de les quals siga \emph{n}, i altra amb
748 lema associat (\emph{que}), que té més d'un símbol gramatical
749 associat, per a incloure \emph{que} com a \emph{conjunció} i \emph{que}
750 com a \emph{relatiu} en castellà.}
751 \label{fig:cat-item}
752 \end{figure}
754 \subsubsection{Ús en postchunk}
756 Aquest element només preveu l'atribut obligatori \texttt{name}, que fa
757 referència al nom de la regla,
758 \notavisible{De la regla o del patró?}
759 sense etiquetes, ja que al mòdul
760 \texttt{postchunk} només s'usa el pseudolema per a la detecció. En la
761 detecció no s'hi distingeix entre majúscules i minúscules, perquè el pseudolema s'usa per a transmetre la
762 informació sobre les majúscules i les minúscules del segment.
764 \begin{figure}
765 \begin{small}
766 \begin{alltt}
767 <\textbf{def-cat} \textsl{n}="det-nom"/>
768 <\textbf{cat-item} \textsl{name}="det-nom"/>
769 </\textbf{def-cat}>
770 \end{alltt}
771 \end{small}
772 \caption{Ús de l'element \texttt{<\textbf{cat-item}>} en el mòdul
773 postchunk per a detectar chunks de determinant-nom.}
774 \label{fig:cat-item-postchunk}
775 \end{figure}
778 \subsection{Element de secció de definició d'atributs de categoria\\
779 \texttt{<section-def-attrs>}}
781 En aquesta secció es defineixen els atributs que s'extrauran de
782 les categories detectades pel patró i que s'utilitzaran en la part
783 d'acció de les regles. Cada atribut es defineix mitjançant una
784 etiqueta \texttt{<\textbf{def-attr}>}.
786 \notavisible{De vegades les etiquetes aprareixen en el text en
787 negretes i de vegades sense negretes. Decidim-nos per una tipografia
788 i usem-la en tot el document.}
790 \subsection{Element de definició d'atributs de categoria
791 \texttt{<def-attr>}}
793 Cada \texttt{<\textbf{def-attr}>} defineix un atribut amb informació
794 morfològica (tant informació flexiva --gènere, nom, persona, etc.--,
795 com categorial --verb, adjectiu, etc--) mitjançant una llista
796 d'elements d'atribut de categoria (\texttt{<\textbf{attr-item}>}) i té
797 un nom únic obligatori \texttt{n}. Un atribut es defineix, per tant, a
798 partir dels símbols morfològics que poden trobar-se en una forma
799 lèxica donada. \notavisible{Atenció: pseudolemes} Cada atribut extreu, de les formes lèxiques del patró,
800 els símbols que aquestes contenen d'entre els possibles valors donats.
802 \subsection{Element d'atribut de categoria \texttt{<attr-item>}}
804 Cada element d'atribut de categoria representa un dels valors
805 possibles que pot prendre l'atribut. Per exemple, l'atribut de número
806 \texttt{nbr} pot prendre els valors singular (\texttt{sg}), plural
807 (\texttt{pl}), singular--plural (\texttt{sp}) i nombre per determinar
808 (\texttt{ND}). Aquests valors són una subseqüència de les etiquetes
809 morfològiques que caracteritzen les formes lèxiques i s'indiquen en
810 l'atribut \texttt{tags} de l'element, separades per punts si hi ha més
811 d'una. En la figura \ref{fig:attr-item} es pot veure un exemple
812 d'ús d'aquest element per a l'atribut de \emph{nombre} i
813 l'atribut de \emph{nom}. \notavisible{???}
815 \notavisible{Potser s'hauria d'explicar per què s'ha triat el nom \emph{anom} en la figura}
817 Compareu la definició de l'atribut de nom en
818 aquesta figura (amb tots els valors possibles i sense asteriscos) amb
819 la definició de la categoria de nom de la figura \ref{fig:cat-item}.
821 \begin{figure}
822 \begin{small}
823 \begin{alltt}
824 <\textbf{def-attr} \textsl{n}="nbr"/>
825 <\textbf{attr-item} \textsl{tags}="sg"/>
826 <\textbf{attr-item} \textsl{tags}="pl"/>
827 <\textbf{attr-item} \textsl{tags}="sp"/>
828 <\textbf{attr-item} \textsl{tags}="ND"/>
829 </\textbf{def-attr}>
831 <\textbf{def-attr} \textsl{n}="anom"/>
832 <\textbf{attr-item} \textsl{tags}="n"/>
833 <\textbf{attr-item} \textsl{tags}="n.acr"/>
834 </\textbf{def-attr}>
835 \end{alltt}
836 \end{small}
837 \caption{Definició de l'atribut de categoria \emph{nombre}
838 \texttt{nbr}, que pot prendre els valors \emph{singular},
839 \emph{plural}, \emph{singular-plural} o \emph{nombre per
840 determinar}, així com de l'atribut de categoria \emph{nom}, que
841 pot prendre els valors dels símbols \emph{n} o \emph{n.acr}.}
842 \label{fig:attr-item}
843 \end{figure}
846 \subsection{Element de secció de definició de variables\\
847 \texttt{<section-def-vars>}}
849 En aquesta secció es defineixen (mitjançant etiquetes
850 \texttt{<\textbf{def-var}>}) les variables globals de tipus cadena que
851 s'utilitzaran per a transferir informació dins d'una regla i d'una
852 regla a altra (per exemple, per a poder transmetre informació de gènere
853 o nombre entre dos patrons).
855 \notavisible{Que quede clar que aquesta transferència d'una regla a altra es fa només d'una aplicació d'una regla a l'aplicació d'altra regla en un moment posterior, o d'esquerra a dreta}
857 \subsection{Element de definició de variables \texttt{<def-var>}}
858 \label{ss:defvar}
859 La definició d'una variable global de tipus cadena té un nom únic
860 obligatori\texttt{n} que s'utilitzarà per a referir-s'hi
861 dins de les regles. Les variables contenen cadenes que descriuen
862 informació d'estat, com la existència de concordança entre dos
863 elements, la detecció de un signe d'interrogació que calga
864 eliminar en LM, etc.
866 \subsection{Element de secció de definició de
867 llistes de cadenes \\\texttt{<section-def-lists>}}
868 En aquesta secció es defineixen (mitjançant etiquetes
869 \texttt{<\textbf{def-list}>}) les llistes que s'utilitzaran per a
870 realitzar recerques de cadenes. Aquestes llistes es poden utilitzar
871 per a agrupar lemes de paraules que tinguen alguna característica comuna
872 (per exemple, verbs que expressen moviment, adjectius que expressen
873 estats d'ànim, etc.). Aquesta secció és opcional.
875 \subsection{Element de definició de llistes de cadenes \texttt{<def-list>}}
876 Aquest element serveix per a donar nom a cada llista de cadenes
877 mitjançant l'atribut \texttt{n} i per a encapsular la llista que es
878 defineix mitjançant un o més elements \texttt{<\textbf{list-item}>}.
879 Se'n pot veure un exemple d'ús en la figura \ref{fig:deflist}.
881 \subsection{Element de membre de llista de cadenes
882 \texttt{<list-item>}}
883 Aquest element defineix, mitjançant el valor de l'atribut \texttt{v},
884 la cadena concreta que s'inclou en la definició de la llista que
885 encapsula aquest element. Pot veure's un exemple d'ús en la figura
886 \ref{fig:deflist}.
888 \begin{figure}
889 \begin{small}
890 \begin{alltt}
891 <\textbf{def-list} n="verbsestat">
892 <\textbf{list-item} v="actuar"/>
893 <\textbf{list-item} v="buscar"/>
894 <\textbf{list-item} v="estudiar"/>
895 <\textbf{list-item} v="existir"/>
896 <\textbf{list-item} v="ingressar"/>
897 <\textbf{list-item} v="introduir"/>
898 <\textbf{list-item} v="penetrar"/>
899 <\textbf{list-item} v="publicar"/>
900 <\textbf{list-item} v="treballar"/>
901 <\textbf{list-item} v="viure"/>
902 <\textbf{/def-list}>
903 \end{alltt}
904 \end{small}
905 \caption{Definició d'una llista de lemes en català. Aquests lemes s'utilitzen en una regla que es pot veure en la figura \ref{fig:in}.}
906 \label{fig:deflist}
907 \end{figure}
909 \subsection{Element de secció de definició de macroinstruccions \\\texttt{<section-def-macros>}}
911 En aquesta secció es defineixen les macroinstruccions que contenen
912 fragments de codi utilitzat amb freqüència en la part d'acció de les
913 regles.
915 \subsection{Element de definició de macroinstruccions
916 \\\texttt{<def-macro>}}
918 Cada definició d'una macroinstrucció té un nom obligatori (el valor de
919 l'atribut \texttt{n}), el nombre d'arguments que se li passen com a
920 referència (atribut \texttt{npar}) i un cos amb instruccions.
922 \subsection{Element de secció de regles \texttt{<section-rules>}}
924 Aquesta secció conté les regles de transferència estructural,
925 cadascuna en un element
926 \texttt{<\textbf{rule}>}.
928 \subsection{Element de regla \texttt{<rule>}}
930 Cada regla té un patró (\texttt{<\textbf{pattern}>}) i l'acció
931 (\texttt{<\textbf{action}>}) associada que s'executa quan és
932 detectat.
934 La regla pot especificar en un atribut opcional \texttt{comment} un
935 comentari que explica quina és la funció de la regla.
937 \subsection{Element de patró \texttt{<pattern>}}
939 Un patró s'especifica utilitzant components de patró
940 (\texttt{<\textbf{pattern-item}>}), cadascun dels quals correspon a
941 una forma lèxica en el patró detectat, en ordre d'aparició.
943 \subsection{Element de component de patró \texttt{<pattern-item>}}
945 En cada component d'un patró s'indica, mitjançant un atribut de nom
946 obligatori \texttt{n}, quin tipus de forma lèxica es vol detectar.
947 Per a això s'utilitza una de les categories definides
948 en \texttt{<\textbf{section-def-cats}>} (es pot veure un exemple de com es
949 detecta el patró determinant--nom en la figura \ref{fig:regla}).
951 \subsection{Element d'acció \texttt{<action>}}
953 En aquest element s'inclouen les ``instruccions'' que s'han d'executar
954 per a portar a terme el processament que es desitgi per a cada
955 detecció de patrons. La part de processament del patró detectat és un
956 bloc de zero o més instruccions de tipus \texttt{\%sentence}:
957 \texttt{<\textbf{choose}>} (processament condicional),
958 \texttt{<\textbf{let}>} (assignació de valors),
959 \texttt{<\textbf{out}>} (escriptura de formes lèxiques de la
960 LM),\texttt{<\textbf{modify-case}>} (modificació de l'estat de les
961 majúscules i minúscules d'una forma lèxica),
962 \texttt{<\textbf{call-macro}>} (cridades a macroinstruccions) i
963 \texttt{<\textbf{append}>} (concatenació de cadenes).
965 Durant el processament, segons si es compleixen o no una sèrie de opcions
966 condicionals, es realitzen diferents operacions, com ara la
967 concordança dels elements d'un patró, ja que aquests estan
968 condicionats a possibles canvis de gènere o nombre durant el procés de
969 transferència lèxica. Per això, a pesar de treballar amb FL en LM
970 també es té en compte la informació de la LO ja que si, per exemple,
971 en LO els elements d'un patró no concorden, potser tampoc han de
972 fer-ho en LM. Durant l'aplicació de les distintes operacions
973 realitzades dintre un patró, s'assignen valors a atributs del patró,\notavisible{OK?}
974 i, si escau, a variables globals o d'estat i s'envia la informació del
975 patró en LM resultant al següent mòdul (el generador morfològic).
977 \subsection{Element de concatenació de cadenes \\\texttt{<append>}}
979 La instrucció \texttt{<\textbf{append}>} pot servir per emmagatzemar
980 l'eixida abans d'imprimir-la per conveniència del dissenyador de les
981 regles de transferència.
983 L'atribut obligatori \texttt{n} especifica el nom de variable que té
984 l'expressió. Al final de la instrucció, el contingut antic de la
985 variable referenciada serà prefix del nou contingut.
987 El contingut d'aquesta instrucció pot ser una o més de les següents
988 etiquetes: \texttt{<\textbf{b}>}, \texttt{<\textbf{clip}>},
989 \texttt{<\textbf{lit}>}, \texttt{<\textbf{lit-tag}>},
990 \texttt{<\textbf{var}>}, \texttt{<\textbf{get-case-from}>},
991 \texttt{<\textbf{case-of}>} o \texttt{<\textbf{concat}>}. Se pot
992 veure un exemple a la figura \ref{fig:append}.
994 \begin{figure}
995 \begin{small}
996 \begin{alltt}
997 <\textbf{append} n="temporal">
998 <clip pos="3" part="gen" side="tl"/>
999 <\textbf{/append}>
1000 \end{alltt}
1001 \end{small}
1002 \caption{En aquest exemple es concatena a la variable de nom
1003 \texttt{temporal} el valor de gènere de la part de LM de la tercera
1004 paraula detectada per la regla.}
1005 \label{fig:append}
1006 \end{figure}
1009 \subsection{Element d'invocació de macroinstrucció
1010 \\\texttt{<call-macro>}}
1011 \notavisible{Crec que cal canviar totes les aparicions de \emph{cridada} a \emph{invocació}, canviant la preposició (crec)}
1013 Dins d'una regla es pot invocar qualsevol de les macroinstruccions
1014 definides en \texttt{<\textbf{section-def-macros}>}. Per a això, cal
1015 especificar el nom de la macroinstrucció en l'atribut \texttt{n} i un
1016 o més arguments en l'element de paràmetres
1017 \texttt{<\textbf{with-param}>} (veure a continuació).
1019 \subsection{Element de paràmetres \texttt{<with-param>}}
1021 Aquest element s'utilitza dintre de les invocacions de
1022 macroinstruccions \texttt{<\textbf{call-macro}>}. L'atribut
1023 \texttt{pos} de cada argument s'utilitza per a referir-se a una forma
1024 lèxica de la regla que invoca la macroinstrucció. Per exemple, si s'ha
1025 definit una macroinstrucció de 2 paràmetres que realitza operacions de
1026 concordança nom--adjectiu, pot utilitzar-se amb els arguments 1 i 2 en
1027 una regla de nom--adjectiu, amb els arguments 2 i 3 en una regla de
1028 determinant--nom--adjectiu, amb els arguments 1 i 3 en una regla de
1029 nom--adverbi--adjectiu i amb els arguments 2 i 1 en una regla
1030 d'adjectiu--nom. Es pot veure un exemple d'invocació de macroinstrucció
1031 en la figura \ref{fig:macro}.
1033 \begin{figure}
1034 \begin{small}
1035 \begin{alltt}
1036 <\textbf{call-macro} n="fconcord2">
1037 <\textbf{with-param} pos="3"/>
1038 <\textbf{with-param} pos="1"/>
1039 <\textbf{/call-macro}>
1040 \end{alltt}
1041 \end{small}
1042 \caption{Invocació de la macroinstrucció \texttt{f-concord2} per a fer
1043 concordar els elements d'un patró com per exemple
1044 determinant--adverbi--nom. La propagació de gènere i nombre es fa a
1045 partir d'un dels elements, en aquest cas el nom que apareix com a
1046 tercer element del patró (3). Per això, la posició del nom es passa
1047 com primer paràmetre i després es passen la resta d'elements. Com que
1048 l'adverbi (en posició 2) no necessita informació de concordança,
1049 només es passa la posició del determinant (1).}
1050 \label{fig:macro}
1051 \end{figure}
1053 \subsection{Element de selecció \texttt{<choose>}}
1054 \label{choose}
1056 La instrucció de selecció es compon d'una o més opcions condicionals
1057 (\texttt{<\textbf{when}>}) i una opció
1058 alternativa\texttt{<\textbf{otherwise}>}, d'inclusió opcional.
1060 \subsection{Element de condició \texttt{<when>}}
1062 Amb aquest element es descriu una opció condicional (veure pàgina
1063 \pageref{choose}). Es compon de la condició a
1064 verificar \texttt{<\textbf{test}>} i d'un bloc de zero o més
1065 instruccions de tipus \texttt{<\textbf{choose}>},
1066 \texttt{<\textbf{let}>},\texttt{<\textbf{out}>},
1067 \texttt{<\textbf{modify-case}>}, \texttt{<\textbf{call-macro}>} o \texttt{<\textbf{append}>},
1068 \notavisible{OK append?}
1070 s'executaran si es compleix la citada condició.
1072 \subsection{Element d'opció alternativa \texttt{<otherwise>}}
1074 L'element \texttt{<\textbf{otherwise}>} conté un bloc d'una o més
1075 instruccions (de tipus \texttt{\%sentence}:
1076 \texttt{<\textbf{choose}>}, \texttt{<\textbf{let}>},
1077 \texttt{<\textbf{out}>}, \texttt{<\textbf{modify-case}>},
1078 \texttt{<\textbf{call-macro}>} i \texttt{\textbf{append}>}) que han de
1079 realitzar-se si no és certa la condició descrita en cap dels
1080 \texttt{<\textbf{when}>} d'un\texttt{<\textbf{choose}>}.
1082 \subsection{Element d'avaluació \texttt{<test>}}
1084 L'element d'avaluació \texttt{<\textbf{test}>} dintre d'un element de
1085 condició \texttt{<\textbf{when}>} pot estar compost per una conjunció
1086 (\texttt{<\textbf{and}>}), una disjunció (\texttt{<\textbf{or}>}) o
1087 una negació (\texttt{<\textbf{not}>}) de condicions a avaluar, així
1088 com per una senzilla condició d'igualtat de cadenes (\texttt{<\textbf{equal}>}), de començament de cadena (\texttt{<\textbf{begins-with}>}), de final de cadena (\texttt{<\textbf{ends-with}>}), de subcadena \texttt{<\textbf{contains-substring}>} o d'inclusió en conjunt \texttt{<\textbf{in}>}.
1090 \notavisible{Segur que es pot millorar la redacció de l'últim paràgraf, canviat per mlf perquè hi estiguen totes les condicions booleanes simples.}
1092 \subsection{Elements d'operadors condicionals o booleans:
1093 \texttt{<equal>}, \texttt{<and>}, \texttt{<or>}, \texttt{<not>},
1094 \texttt{<in>}}
1096 \notavisible{Cal completar-ho: falten \texttt{contains-substring}, \texttt{ends-with}, \texttt{begins-with}, etc.}
1098 \begin{itemize}
1099 \item L'element de conjunció \texttt{<\textbf{and}>} representa una
1100 condició, composta de dues o més condicions, que es compleix quan
1101 totes les condicions que s'hi inclouen són certes. Es pot veure un
1102 exemple del seu ús en la figura \ref{fig:regla}
1103 \item L'element de disjunció \texttt{<\textbf{or}>} representa una
1104 condició, composta de dues o més condicions, que es compleix quan
1105 almenys una és certa. En la figura \ref{fig:ornot} es
1106 presenta un exemple d'aquest tipus de condició per a avaluar la
1107 concordança de gènere d'un patró en LO.
1108 \item L'element de negació \texttt{<\textbf{not}>} representa una
1109 condició que es compleix quan la condició inclosa no es compleix i
1110 viceversa. Es pot veure un exemple de negació d'una igualtat en la
1111 figura \ref{fig:ornot}.
1112 \item L'operador condicional més simple
1113 \notavisible{No! N'hi ha molts més: \texttt{begins-with}, \texttt{ends-with}, \texttt{in}, \texttt{contains-string}, etc. }
1114 és el d'igualtat
1115 (\texttt{<\textbf{equal}>}). És una instrucció que comprova si dos
1116 arguments (dues cadenes) són o no idèntics. Es pot veure un exemple
1117 de l'ús d'aquest element en les figures \ref{fig:clip} i
1118 \ref{fig:lit-tag}. En aquest operador, a més, es pot especificar
1119 l'atribut \texttt{caseless}, el qual, si té el valor \texttt{yes},
1120 fa que la comparació entre cadenes es realitzi sense tenir en compte
1121 les diferències de majúscules i minúscules.
1122 \notavisible{Totes les comprovacions condicionals de cadenes tenen l'atribut \texttt{caseless}; \texttt{in} també; més avall}
1123 \item L'operador de recerca en llistes, \texttt{<\textbf{in}>}, que
1124 serveix per a buscar qualsevol valor (que correspon al primer
1125 paràmetre de la condició en una llista definida en la secció
1126 corresponent (\texttt{<\textbf{section-def-lists}}), a la qual es
1127 fa referència mitjançant l'atribut \texttt{n} de l'element
1128 \texttt{<\textbf{list}>}.
1129 \notavisible{Millorar la redacció}
1130 El resultat de la recerca és cert si el valor es troba
1131 en la llista. En aquesta comparació es pot utilitzar també
1132 l'atribut \texttt{caseless}: si s'hi assigna el valor \texttt{yes},
1133 es realitza la recerca en la llista sense tenir en compte les
1134 diferències de majúscules i minúscules. En la figura \ref{fig:in}
1135 pot veure un exemple del seu ús.
1136 \end{itemize}
1138 \notavisible{Cal unificar tota la discussió anterior, traient factor comú.}
1140 \notavisible{Cal descriure la resta d'elements condicionals que no hi són.}
1142 \subsection{Element \texttt{<clip>}}
1143 \label{ss:clip}
1146 L'element \texttt{<\textbf{clip}>} representa una subcadena d'una
1147 forma lèxica de la LO o de la LM, definida pel valor de diversos
1148 atributs (es pot veure un exemple d'ús en la figura \ref{fig:clip}):
1150 \begin{itemize}
1151 \item \texttt{pos} és un índex (1, 2, 3, etc.) utilitzat per a
1152 seleccionar una forma lèxica dins del patró associat a la regla: es correspon amb el
1153 lloc que ocupa la forma lèxica en el patró. En el mòdul
1154 \textit{postchunk}, també existeix l'índex ``0'' i fa referència al
1155 pseudolema del chunk que és tractat com una paraula més, per tal
1156 d'accedir a la seua informació i prendre decisions a partir d'ella.
1157 \item \texttt{side} \textit{(només transfer/intrachunk)} \notavisible{Atenció a la denominació} especifica si
1158 se selecciona un \emph{clip} de la LO (\texttt{sl}, per \emph{source
1159 language}) o de la LM (\texttt{tl}, per \emph{target language}).
1160 \item \texttt{part} indica quina part de la forma lèxica es
1161 processa. Generalment el seu valor és un dels atributs definits en
1162 \texttt{<\textbf{section-def-\\attrs}>} (\texttt{gen}, \texttt{nbr},
1163 etc.), encara que també pot prendre quatre valors predefinits que
1164 són: \texttt{lem} (per a fer referència al lema de la forma lèxica),
1165 \texttt{lemh} (per a fer referència a la primera part d'un lema
1166 partit), \texttt{lemq} (la cua del lema partit), i \texttt{whole}
1167 (la forma lèxica completa, amb el lema i tots els símbols
1168 gramaticals després d'aplicar o no les possibles transformacions en
1169 la part precedent de la regla).
1170 \item \texttt{link-to} \textit{(només transfer/intrachunk)}
1171 substitueix el valor que es derivaria de la consulta de la resta
1172 d'atributs pel valor especificat en l'atribut, que ha de ser un
1173 número natural ($>0$), i que serveix per a indicar dins dels
1174 elements \texttt{<\textbf{chunk}>} a quina etiqueta del segment es
1175 fa referència des d'una unitat lèxica \texttt{<\textbf{lu}>}. La
1176 resta d'atributs queden com a documentació que enllaça la informació
1177 de processament amb la informació lingüística.
1178 \end{itemize}
1181 \begin{figure}
1182 \begin{small}
1183 \begin{alltt}
1184 <\textbf{test}>
1185 <\textbf{not}>
1186 <\textbf{equal}>
1187 <\textbf{clip} \textsl{pos}="2" \textsl{side}="tl" \textsl{part}="gen"/>
1188 <\textbf{clip} \textsl{pos}="2" \textsl{side}="sl" \textsl{part}="gen"/> <\textbf{/equal}>
1189 <\textbf{/not}>
1190 <\textbf{/test}>
1191 \end{alltt}
1192 \end{small}
1193 \caption{Fragment d'una regla en la qual es comprova si el gènere
1194 (\texttt{gen}) en LM (\texttt{tl}) de la segona unitat lèxica
1195 identificada en un patró és distint del gènere de la mateixa unitat
1196 lèxica en LO (\texttt{sl})}
1197 \label{fig:clip}
1198 \end{figure}
1202 \subsection{Element de cadena literal \texttt{<lit>}}
1204 Aquest element serveix per a especificar el valor d'una cadena
1205 literal mitjançant l'atribut \texttt{v}. Per exemple,
1206 \texttt{<\textbf{lit} v=\texttt{"}caminar\texttt{"}/>} representa la
1207 cadena \emph{caminar}.
1209 \subsection{Element de valor d'etiqueta \texttt{<lit-tag>}}
1211 És similar a l'element \texttt{<\textbf{lit}>} però no especifica el
1212 valor d'una cadena literal sinó el d'una etiqueta morfològica,
1213 mitjançant l'atribut \texttt{v}. Es pot veure un exemple del seu ús en
1214 la figura \ref{fig:lit-tag}.
1216 \begin{figure}
1217 \begin{small}
1218 \begin{alltt}
1219 <\textbf{equal}>
1220 <\textbf{clip} \textsl{pos}="2" \textsl{side}="tl" \textsl{part}="nbr"/>
1221 <\textbf{lit-tag} \textsl{v}="ND"/>
1222 <\textbf{/equal}>
1223 \end{alltt}
1224 \end{small}
1225 \caption{Ús de l'element \texttt{<\textbf{lit-tag}>}: es comprova si
1226 l'etiqueta (o símbol) de nombre (\texttt{nbr}) de la segona unitat
1227 lèxica de la LM (\texttt{tl}) és \texttt{ND} (nombre per
1228 determinar)}
1229 \label{fig:lit-tag}
1230 \end{figure}
1232 \begin{figure}
1233 \begin{small}
1234 \begin{alltt}
1235 <\textbf{test}>
1236 <\textbf{or}>
1237 <\textbf{not}>
1238 <\textbf{equal}>
1239 <\textbf{clip} \textsl{pos}="1" \textsl{side}="sl" \textsl{part}="gen"/>
1240 <\textbf{clip} \textsl{pos}="3" \textsl{side}="sl" \textsl{part}="gen"/>
1241 <\textbf{/equal}>
1242 <\textbf{/not}>
1243 <\textbf{not}>
1244 <\textbf{equal}>
1245 <\textbf{clip} \textsl{pos}="2" \textsl{side}="sl" \textsl{part}="gen"/>
1246 <\textbf{clip} \textsl{pos}="3" \textsl{side}="sl" \textsl{part}="gen"/>
1247 <\textbf{/equal}>
1248 <\textbf{/not}>
1249 <\textbf{/or}>
1250 <\textbf{/test}>
1251 \end{alltt}
1252 \end{small}
1253 \caption{Fragment d'una regla en la qual es comprova si el gènere en
1254 LO de la primera o de la segona unitat lèxica identificada en un
1255 patró (podria ser determinant--adjectiu--nom) és distint del gènere
1256 de la tercera unitat lèxica també en LO.}
1257 \label{fig:ornot}
1258 \end{figure}
1260 \subsection{Element de concatenació de cadenes \texttt{<concat>}}
1262 Aquest element s'usa per a concatenar cadenes per a assignar-les a una
1263 variable. S'usa de manera combinada amb \texttt{<\textbf{let}>}, i el
1264 valor anterior de la variable que es modifica amb l'assignació de
1265 \texttt{</textbf{concat}>}, es perd.
1267 No té cap atribut. Pot contenir qualsevol instrucció que retorna una
1268 cadena, com ara \texttt{<\textbf{lit}>}, \texttt{<\textbf{lit-tag}>} o
1269 \texttt{<\textbf{clip}>}.
1271 \subsection{Element de variable \texttt{<var>}}
1274 Cada \texttt{<\textbf{var}>} és un identificador de variable:
1275 l'atribut obligatori \texttt{n} indica el seu nom tal com ha sigut
1276 definit en \texttt{<\textbf{section-def-vars}>}. Quan es troba en un
1277 \texttt{<\textbf{out}>}, un \texttt{<\textbf{test}>}, o en la part dreta
1278 d'un \texttt{<\textbf{let}>}, representa el valor de la variable; quan
1279 es troba en la part esquerra d'un \texttt{<\textbf{let}>}, dins d'un
1280 \texttt{<\textbf{append}>} o en \texttt{un <\textbf{modify-case}>},
1281 representa la referència de la variable i es pot canviar el seu valor.
1283 \subsection{Element de referència a llista de cadenes \texttt{<list>}}
1285 Aquest element només s'usa com a segon paràmetre d'una recerca
1286 \texttt{<\textbf{in}>}. L'atribut \texttt{n} fa referència a la llista
1287 concreta definida en la secció de definició de llistes de cadenes
1288 \texttt{<\textbf{section-def-lists}>}. Es pot veure un exemple d'ús la figura
1289 \ref{fig:in}.
1291 \begin{figure}
1292 \begin{small}
1293 \begin{alltt}
1294 <\textbf{rule}>
1295 <\textbf{pattern}>
1296 <\textbf{pattern-item} \textsl{n}="verb"/>
1297 <\textbf{pattern-item} \textsl{n}="a"/>
1298 <\textbf{/pattern}>
1299 <\textbf{action}>
1300 <\textbf{choose}>
1301 <\textbf{when}>
1302 <\textbf{test}>
1303 <\textbf{in} \textsl{caseless}="yes"/>
1304 <\textbf{clip} \textsl{pos}="1" \textsl{side}="sl" \textsl{part}="lem"/>
1305 <\textbf{list} \textsl{n}="verbsestat"/>
1306 <\textbf{/in}>
1307 <\textbf{/test}>
1308 <\textbf{let}>
1309 <\textbf{clip} \textsl{pos}="2" \textsl{side}="tl" \textsl{part}="lem"/>
1310 <\textbf{lit} \textsl{v}="en"/>
1311 <\textbf{/let}>
1312 <\textbf{/when}>
1313 <!-- ... -->
1314 \end{alltt}
1315 \end{small}
1316 \caption{Fragment d'una regla que detecta un patró format per un verb
1317 més la preposició \emph{a} i a continuació comprova si el verb (el
1318 lema indicat en \texttt{lem}) de la LO (\texttt{sl}) és
1319 un dels que s'han inclòs en la llista de verbs d'estat (definida en
1320 la figura \ref{fig:deflist}). En cas afirmatiu, el lema de la segona
1321 paraula de la LM (\texttt{tl}) es canvia per \emph{en} .}
1322 \label{fig:in}
1323 \end{figure}
1326 \subsection{Element d'informació de majúscules/mi\-nús\-cu\-les\\
1327 \texttt{<get-case-from>}}
1329 L'element \texttt{<\textbf{get-case-from}>} representa la cadena
1330 resultant d'aplicar l'esquema de majúscules que presenta el lema d'una
1331 unitat lèxica en LO a una cadena (\emph{clip}, \emph{lit}
1332 o \emph{var}). Per a fer referència a la unitat lèxica de la qual es
1333 prendrá la informació, s'utilitza l'atribut \texttt{pos} el qual
1334 indica la posició d'aquesta unitat lèxica en LO. S'utilitza quan es
1335 reordenen les unitats lèxiques d'un patró o quan s'afegeix o es
1336 suprimeix una unitat lèxica. Es pot veure un exemple d'ús en la
1337 figura\ref{fig:case}, que conté una regla per a transformar el
1338 pretèrit perfet simple en espanyol (\emph{dije}) pel pretèrit
1339 perfet perifràstic en català (\emph{vaig dir}). En aquesta regla
1340 s'afegeix una FL amb lema \emph{anar} i símbol morfològic \emph{vaux}
1341 ("verb auxiliar"), el qual ha de prendre la informació de majúscules
1342 del verb en espanyol (que té la posició "1" en el patró), perquè es
1343 traduisca \emph{Dije} per \emph{Vaig dir}, \emph{dije} per \emph{vaig
1344 dir} i \emph{DIJE} per \emph{VAIG DIR}.
1346 \subsection{Element d'obtenció del patró de majúscules/mi\-nús\-cu\-les\\
1347 \texttt{<case-of>}}
1349 Serveix per a obtenir el patró de majúscules/minúscules, és a dir, un
1350 dels valors "\texttt{aa}", "\texttt{Aa"} o "\texttt{AA}", d'una
1351 cadena, que s'obté com en el cas de l'etiqueta
1352 \texttt{<\textbf{clip}>}. Té els mateixos atributs: \texttt{pos}, la
1353 posició que ocupa la paraula en el patró detectat; \texttt{part},
1354 l'atribut concret a què es fa referència (normalment el lema), amb els
1355 atributs predefinits que ja s'esmenten en la pàgina \pageref{ss:clip},
1356 i a més, només per al cas del mòdul transfer/intrachunk, l'atribut
1357 \texttt{side}, el costat de la traducció, \texttt{sl} per a la LO i
1358 \texttt{tl} per a la LM. En la figura \ref{fig:case} es pot veure un
1359 exemple d'utilització d'aquest element, i en l'apartat següent (sobre
1360 <\texttt{\textbf{modify-case}>}) es troba una explicació més detallada
1361 de l'exemple.
1363 \subsection{Element de modificació d'estat de majúscules/mi\-nús\-cu\-les
1364 \texttt{<modify-case>}}
1366 Aquesta instrucció serveix per a modificar les majúscules o minúscules
1367 de la primera expressió (el primer paràmetre, típicament un
1368 lema) mitjançant un literal o una variable (el segon paràmetre). El
1369 primer paràmetre pot ser una \texttt{<\textbf{var}>},
1370 un \texttt{<\textbf{clip}>} o un \texttt{<\textbf{case-of}>},
1371 mentre que el segon pot ser qualsevol cosa que retorne un valor. En
1372 principi, serà \texttt{<\textbf{var}>} o \texttt{<\textbf{lit}>}.
1374 Els valors que poden prendre aquests paràmetres són ``\texttt{Aa}'',
1375 per a expressar que la ``part esquerra'' d'aquesta modificació de les
1376 majúscules ha de tenir la primera lletra en majúscules i la resta en
1377 minúscules;``\texttt{aa}'', per a posar tot en minúscules i
1378 ``\texttt{AA}'', per a posar tot en majúscules. En la figura
1379 \ref{fig:case} es pot veure un exemple de la seua utilització. En
1380 aquesta regla es modifica l'estat de majúscules del lema en LM en
1381 posició "1", que correspon a \emph{dir}, ja que, encara que a l'eixida
1382 de la regla siga la segona forma lèxica (\emph{vaig dir}), és la
1383 traducció de la FL la que té la posició 1 en LO, i per tant continua
1384 tenint assignada aquesta posició en la LM. A aquest lema se li assigna
1385 el valor ``\texttt{aa}''en cas que el lema en LO tingui l'estat
1386 ``\texttt{Aa}''. A la resta de casos no cal especificar res, ja que
1387 l'estat de majúscules/minúscules en la FL amb posició 1 coincidirà en
1388 LO i en la LM i, per tant, es transfereix automàticament.
1389 % REFERÈNCIA EXTERNA (es pot veure la pàgina \pageref{mayusc} per a
1390 % més informació sobre la gestió de majúscules i minúscules en els
1391 % diccionaris).
1393 \begin{figure}
1394 \begin{small}
1395 \begin{alltt}
1396 <\textbf{rule}>
1397 <\textbf{pattern}>
1398 <\textbf{pattern-item} n="pretind"/>
1399 <\textbf{/pattern}>
1400 <\textbf{action}>
1401 <\textbf{out}>
1402 <\textbf{lu}>
1403 <\textbf{get-case-from} pos ="1">
1404 <\textbf{lit} v="anar"/>
1405 <\textbf{/get-case-from}>
1406 <\textbf{lit-tag} v="vaux"/>
1407 <\textbf{clip} pos="1" side="sl" part="persona"/>
1408 <\textbf{clip} pos="1" side="sl" part="nbr"/>
1409 <\textbf{/lu}>
1410 <\textbf{b/}>
1411 <\textbf{/out}>
1412 <\textbf{choose}>
1413 <\textbf{when}>
1414 <\textbf{test}>
1415 <\textbf{equal}>
1416 <\textbf{case-of} pos="1" side="sl" part="lemh"/>
1417 <\textbf{lit} v="Aa"/>
1418 <\textbf{/equal}>
1419 <\textbf{/test}>
1420 <\textbf{modify-case}>
1421 <\textbf{case-of} pos="1" side="tl" part="lemh"/>
1422 <\textbf{lit} v="aa"/>
1423 <\textbf{/modify-case}>
1424 <\textbf{/when}>
1425 <\textbf{/choose}>
1426 <\textbf{out}>
1427 <\textbf{lu}>
1428 <\textbf{clip} pos="1" side="tl" part="lemh"/>
1429 <\textbf{clip} pos="1" side="tl" part="averb"/>
1430 <\textbf{lit-tag} v="inf"/>
1431 <\textbf{clip} pos="1" side="tl" part="lemq"/>
1432 <\textbf{/lu}>
1433 <\textbf{/out}>
1434 <\textbf{/action}>
1435 <\textbf{/rule}>
1436 \end{alltt}
1437 \end{small}
1438 \caption{Regla per a traduir de castellà a català que transforma els verbs
1439 en pretèrit perfet simple o indefinit en castellà (\emph{dije}) en la
1440 forma de pretèrit perfecte perifràstic usual en català (\emph{vaig
1441 dir}). Al mateix temps assigna la informació correcta de
1442 majúscules/minúscules a les dues paraules resultants.}
1443 \label{fig:case}
1444 \end{figure}
1446 \subsection{Element d'assignació \texttt{<let>}}
1448 La instrucció d'assignació \texttt{<\textbf{let}>} assigna el valor de
1449 la part dreta de l'assignació (una cadena literal, un \texttt{clip},
1450 una variable, etc.) a la part esquerra (un \texttt{clip}, una
1451 variable, etc.). Es pot veure un exemple d'ús en la figura
1452 \ref{fig:regla}.
1454 \begin{figure}
1455 \begin{small}
1456 \begin{alltt}
1457 <\textbf{rule}>
1458 <\textbf{pattern}>
1459 <\textbf{pattern-item} n="det"/>
1460 <\textbf{pattern-item} n="nom"/>
1461 <\textbf{/pattern}>
1462 <\textbf{action}>
1463 <\textbf{choose}>
1464 <\textbf{when}>
1465 <\textbf{test}>
1466 <\textbf{and}>
1467 <\textbf{not}>
1468 <\textbf{equal}>
1469 <\textbf{clip} pos="2" side="tl" part="gen"/>
1470 <\textbf{clip} pos="2" side="sl" part="gen"/>
1471 <\textbf{/equal}>
1472 <\textbf{/not}>
1473 <\textbf{not}>
1474 <\textbf{equal}>
1475 <\textbf{clip} pos="2" side="tl" part="gen"/>
1476 <\textbf{lit-tag} v="mf"/>
1477 <\textbf{/equal}>
1478 <\textbf{/not}>
1479 <\textbf{not}>
1480 <\textbf{equal}>
1481 <\textbf{clip} pos="2" side="tl" part="gen"/>
1482 <\textbf{lit-tag} v="GD"/>
1483 <\textbf{/equal}>
1484 <\textbf{/not}>
1485 <\textbf{/and}>
1486 <\textbf{/test}>
1487 <\textbf{let}>
1488 <\textbf{clip} pos="1" side="tl" part="gen"/>
1489 <\textbf{clip} pos="2" side="tl" part="gen"/>
1490 <\textbf{/let}>
1491 <\textbf{/when}>
1492 <\textbf{/choose}>
1493 <!-- Altres operacions de concordança de gènere i nombre -->
1494 \end{alltt}
1495 \end{small}
1496 \caption{Fragment d'una regla en la qual el patró detectat és
1497 determinant--nom (continua en la fig. \ref{fig:regla2}): en aquesta
1498 part de la regla, s'assigna el gènere del nom al determinant en cas
1499 que el nom canvie de gènere entre LO (\texttt{sl}) i la LM
1500 (\texttt{tl}) durant el procés de transferència lèxica entre ambdues
1501 llengües.}
1502 \label{fig:regla}
1503 \end{figure}
1505 \subsection{Element de sortida \texttt{<out>}}
1506 \label{ss:out}
1508 En la instrucció d'eixida s'especifiquen les formes lèxiques que
1509 s'envien a l'eixida del mòdul després d'haver estat sotmeses a les
1510 operacions de transferència estructural pertinents. L'ús d'aquest
1511 element varia segons el mòdul. Per una banda, l'ús del mode transfer i
1512 del postchunk són similars, perquè l'eixida que s'ha d'imprimir en els
1513 dos casos és entrada de generador. Els mòduls intrachunk i interchunk
1514 tenen modes d'ús diferents: el primer per a crear els segments i el
1515 segon per a modificar els segments sense modificar la seua part
1516 interna.
1518 \subsubsection{Ús en el mode transfer i en el mòdul postchunk}
1520 La instrucció envia cada forma lèxica dintre d'un conjunt
1521 \texttt{<\textbf{lu}>}, que pot estar contingut dintre d'un element
1522 \texttt{<\textbf{mlu}>} si el que s'envia és una multiparaula composta
1523 de dues o més FL. A més, s'envien també els espais en blanc o
1524 superblancs (\texttt{<\textbf{b}>}) que calgui col·locar entre FL i
1525 FL. En les figures \ref{fig:case} i \ref{fig:regla2} es pot veure un
1526 exemple d'ús.
1528 \begin{figure}
1529 \begin{small}
1530 \begin{alltt}
1531 <!-- ... -->
1532 <\textbf{out}>
1533 <\textbf{lu}>
1534 <\textbf{clip} pos="1" side="tl" part="whole"/>
1535 <\textbf{/lu}>
1536 <\textbf{lu}>
1537 <\textbf{clip} pos="2" side="tl" part="whole"/>
1538 <\textbf{/lu}>
1539 <\textbf{/out}>
1540 <\textbf{/action}>
1541 <\textbf{/rule}>
1542 \end{alltt}
1543 \end{small}
1544 \caption{Fragment d'una regla (ve de la fig. \ref{fig:regla}). Al
1545 final de la regla, i després de diverses operacions, es dóna eixida
1546 a la informació resultant mitjançant l'atribut \texttt{whole}, el
1547 qual conté el lema i els símbols morfològics de cada FL (posicions 1
1548 i 2 del patró).}
1549 \label{fig:regla2}
1550 \end{figure}
1552 \subsubsection{Ús en mode intrachunk}
1554 L'eixida d'aquest mòdul s'espera que siga una seqüència de chunks
1555 separada per blancs. No conté directament formes lèxiques, si no és
1556 dins dels segments.
1558 \begin{figure}
1559 \begin{small}
1560 \begin{alltt}
1561 <\textbf{out}>
1562 <\textbf{chunk} name="pr" case="caseFirstWord">
1563 <\textbf{tags}>
1564 <\textbf{tag}><\textbf{lit-tag} v="PREP"/><\textbf{/tag}>
1565 <\textbf{/tags}>
1566 <\textbf{lu}>
1567 <\textbf{clip} pos="1" side="tl" part="whole"/>
1568 <\textbf{/lu}>
1569 <\textbf{/chunk}>
1570 <\textbf{b} pos="1"/>
1571 <\textbf{chunk} name="probj" case="caseOtherWord">
1572 <\textbf{tags}>
1573 <\textbf{tag}><\textbf{lit-tag} v="SN"/><\textbf{/tag}>
1574 <\textbf{tag}><\textbf{lit-tag} v="tn"/><\textbf{/tag}>
1575 <\textbf{tag}><\textbf{clip} pos="2" side="tl" part="pers"/><\textbf{/tag}>
1576 <\textbf{tag}><\textbf{clip} pos="2" side="tl" part="gen"/><\textbf{/tag}>
1577 <\textbf{tag}><\textbf{clip} pos="2" side="tl" part="nbr"/><\textbf{/tag}>
1578 <\textbf{/tags}>
1579 <\textbf{lu}>
1580 <\textbf{clip} pos="2" side="tl" part="lem"/>
1581 <\textbf{lit-tag} v="prn"/>
1582 <\textbf{lit-tag} v="2"/>
1583 <\textbf{clip} pos="2" side="tl" part="pers"/>
1584 <\textbf{clip} pos="2" side="tl" part="gen" link-to="4"/>
1585 <\textbf{clip} pos="2" side="tl" part="nbr" link-to="5"/>
1586 <\textbf{/lu}>
1587 <\textbf{/chunk}>
1588 <\textbf{/out}>
1589 \end{alltt}
1590 \end{small}
1591 \caption{Instrucció d'eixida que imprimeix dos segments separats per
1592 un blanc. La seqüència que s'imprimeix és la de preposició seguida
1593 de sintagma nominal. Les etiquetes que s'enllacen a fora com a
1594 referència són la persona, el gènere i el nombre del sintagma
1595 nominal. Usa les etiquetes \texttt{<\textbf{tag}>} per a especificar
1596 les etiquetes del segment, i el valor dels atributs \texttt{name} i
1597 \texttt{case} per a especificar la forma lèxica del chunk.}
1598 \label{fig:chunkintrachunk}
1599 \end{figure}
1602 \subsubsection{Ús en el mòdul interchunk}
1604 En aquest mòdul les formes lèxiques de les paraules són inaccessibles,
1605 per tant només són possibles les operacions amb els chunks. La
1606 informació de lema i d'etiquetes que hi ha dins de l'element
1607 \texttt{<\textbf{chunk}>} corresponen al lema del chunk i a les
1608 etiquetes del chunk exclusivament.
1610 Es pot veure un exemple d'ús a la figura \ref{fig:chunkinterchunk}.
1612 \begin{figure}
1613 \begin{small}
1614 \begin{alltt}
1615 <\textbf{out}>
1616 <\textbf{b} pos="1">
1617 <\textbf{chunk}>
1618 <\textbf{clip} pos="2" part="lem"/>
1619 <\textbf{clip} pos="2" part="tags"/>
1620 <\textbf{clip} pos="2" part="chcontent"/>
1621 <\textbf{/chunk}>
1622 <\textbf{/out}>
1623 \end{alltt}
1625 \end{small}
1626 \caption{Aquesta eixida s'ha fet per a descartar el primer chunk d'una
1627 regla (caiguda de pronom. L'ús dels tres elements
1628 \texttt{<\textbf{clip}>}, s'fet ací amb fins il·lustratius, s'hauria
1629 pogut substituir per la part \texttt{whole} que els agruparia en un
1630 únic \texttt{<\textbf{clip}>} .}
1631 \label{fig:chunkinterchunk}
1632 \end{figure}
1635 \subsection{Element d'unitat lèxica \texttt{<lu>}}
1636 \label{ss:lu}
1638 El seu nom prové de \emph{lexical unit} o ``unitat lèxica'' i és
1639 l'element mitjançant el qual s'envia cada forma lèxica del patró en LM
1640 a l'eixida de la regla, dintre de l'element\texttt{<\textbf{out}>}.
1641 Mitjançant aquest element pot enviar-se la forma lèxica completa, amb
1642 l'atribut \texttt{whole} d'un \texttt{<\textbf{clip}>}, o bé, en cas
1643 necessari, indicar explícitament cadascuna de les seves parts (lema i
1644 etiquetes, especificades mitjançant cadenes \texttt{<\textbf{clip}>},
1645 cadenes literals \texttt{<\textbf{lit}>}, etiquetes
1646 \texttt{<\texttt{\textbf{lit-tag}}>}, variables
1647 \texttt{<\texttt{\textbf{var}}>}, així com informació de majúscules i
1648 minúscules (\texttt{<\textbf{get-case-from}>},
1649 \texttt{<\textbf{case-of}>}). Cal tenir en compte que, com s'ha
1650 explicat abans, en el cas de les multiparaules amb \emph{lema partit}
1651 cal recol·locar la cua d'un lema multiparaula darrere dels símbols
1652 gramaticals de la paraula flexionada (o cap del lema), ja que el mòdul
1653 \texttt{pretransfer} ha avançat la cua i l'ha col·locat abans dels
1654 símbols gramaticals del començament. Aquesta recol·locació es realitza
1655 aquí, dintre de l'element \texttt{<\textbf{lu}>}, mitjançant els
1656 valors \texttt{lemh} i \texttt{lemq} de l'atribut \texttt{part} d'un
1657 \texttt{<\textbf{clip}>}. L'atribut \texttt{lemh} correspon al
1658 començament de lema, i l'atribut\texttt{lemq}, a la cua del lema. Com
1659 es veu en l'exemple\ref{fig:case}, la part \texttt{lemq} del
1660 \texttt{<\textbf{clip}>} és col·locada darrere del començament del
1661 lema i dels símbols gramaticals que l'acompanyen. Aquesta regla
1662 serviria, per exemple, per a la forma en espanyol \emph{eché de
1663 menos}, que ha de traduir-se al català per \emph{vaig trobar a
1664 faltar}. L'atribut \texttt{a\_verb} que apareix darrere de
1665 \texttt{lemh} conté el símbol gramatical que descriu la categoria del
1666 verb (\emph{vblex}, \emph{vbser}, \emph{vbhaver} o \emph{vbmod} segons
1667 el cas). Així, l'última forma lèxica enviada per aquesta regla, per al
1668 cas de \emph{vaig trobar a faltar}, seria en el flux de dades:
1670 \begin{alltt}
1671 ^trobar<vblex><inf># a faltar\$
1672 \end{alltt}
1674 \noindent El símbol coixinet del flux de dades es correspon amb
1675 l'element \texttt{<\textbf{g}>} dels diccionaris, utilitzat per a
1676 indicar la posició de les parts invariables de una unitat multiparaula
1677 amb lema partit. És important tenir en compte que els atributs que
1678 s'inclouen dins de \texttt{<\textbf{lu}>} poden estar buits. Així, un
1679 verb que entre per la regla de la figura \ref{fig:case} i que no sigui
1680 un multimot amb lema partit, serà enviat amb l'atribut \texttt{lemq}
1681 buit, ja que no té cua de lema. D'aquesta manera no cal definir regles
1682 diferents per a formes lèxiques amb cua i sense cua.
1683 %REFERÈNCIA EXTERNA
1684 % Es pot veure també altre exemple en la pàgina \pageref{reglaverb1}, que la regla per a verb envia amb \texttt{<\textbf{lu}>} els atributs \texttt{gen}
1685 %(\emph{gènere}) i \texttt{nbr} (\emph{nombre}).
1686 D'aquesta manera
1687 s'inclouen els participis (amb gènere i nombre) i les altres formes
1688 verbals (les quals duran aquests atributs buits). En la mateixa pàgina
1689 es pot veure una regla per a verb seguit de pronom enclític. Aquí, la
1690 cua del lema es col·loca darrere del pronom enclític; així, les formes
1691 lèxiques enviades en el cas d'una multiparaula unida a un pronom
1692 enclític, com ara \emph{echándote de menos}, serien, en el flux de dades i
1693 en la traducció cap al català:
1695 \begin{alltt}
1696 ^trobar<vblex><ger>+et<prn><enc><p2><mf><sg># a faltar\$
1697 \end{alltt}
1699 Per descomptat, aquesta regla serveix també per a verbs que no
1700 segueixin aquest patró de multiparaula, de manera que la forma
1701 \emph{explicándote} seria d'aquesta manera enviada per la regla en la
1702 traducció d'espanyol a català:
1704 \begin{alltt}
1705 ^explicar<vblex><ger>+et<prn><enc><p2><mf><sg>\$
1706 \end{alltt}
1708 Quant a l'atribut \texttt{whole} d'un \texttt{<\textbf{clip}>}, és
1709 important tenir en compte que només pot utilitzar-se per a enviar
1710 la forma lèxica completa en cas que la paraula enviada no puga ser una
1711 multiparaula, és a dir, que no puga contenir un lema partit. Compareu
1712 les figures \ref{fig:case} i \ref{fig:regla2}. L'atribut \texttt{whole}
1713 pot utilitzar-se en el segon exemple perquè conté el lema
1714 \texttt{lem} i totes les etiquetes morfològiques de les formes
1715 lèxiques en posició 1 i 2 (determinant i nom). En canvi, en el primer
1716 exemple, la forma lèxica enviada dintre de \texttt{<\textbf{lu}>}
1717 s'envia per parts, amb un \texttt{lemh} (cap del lema) i un
1718 \texttt{lemq} (cua del lema), ja que pot ocórrer que el verb detectat en
1719 el patró sigui una multiparaula amb lema partit. En la pràctica, això
1720 significa que, en el nostre sistema, l'atribut \texttt{whole} pot
1721 utilitzar-se per a enviar qualsevol tipus de forma lèxica excepte els
1722 verbs i els noms, ja que només hem definit multiparaules amb flexió per a formes
1723 verbals i noms.
1725 \subsection{Element d'unitat lèxica \texttt{<mlu>}}
1727 El seu nom prové de \emph{multilexical unit} o ``multiforma lèxica''i
1728 s'utilitza dintre de l'element \texttt{<\textbf{out}>} per a enviar
1729 multiparaules compostes per més d'una forma lèxica. Cada forma lèxica
1730 d'una \texttt{<\textbf{mlu}>} s'envia dintre d'un element
1731 \texttt{<\textbf{lu}>}. A la sortida del mòdul, les formes lèxiques
1732 contingudes dintre d'aquest element apareixeran unides entre si
1733 mitjançant el símbol '+' del flux de dades. Això significa que es
1734 convertiran en una multiparaula composta per diverses formes lèxiques
1735 i que seran tractades com a una unitat pels mòduls subsegüents; per
1736 tant,ven el diccionari de generació haurà d'existir una entrada per a
1737 aquesta multiparaula perquè siga possible generar-la. En el nostre
1738 sistema, aquest element s'utilitza, per exemple, per a unir els
1739 pronoms enclítics als verbs conjugats.
1741 \subsection{Element d'encapsulament de fragment \texttt{<chunk>}}
1743 Aquest element només està definit en els mòduls intrachunk i
1744 interchunk. En el mòdul postchunk no s'usa perquè no és necessari
1745 crear cap chunk a l'eixida.
1747 \subsubsection{Ús en el mòdul intrachunk}
1749 En aquest mode, l'element \texttt{<\textbf{chunk}>} ha de tenir un
1750 atribut \texttt{name} que és el lema del segment, o bé un atribut
1751 \texttt{namefrom}, que fa referència a una variable prèviament
1752 definida, el valor de la qual s'usarà com a lema del segment. A
1753 més, pot incorporar un atribut \texttt{case} per a especificar de
1754 quina variable s'agafa la política de majúscules (amb un valor
1755 obtingut amb l'instrucció \texttt{<\textbf{case-from}>}, per exemple).
1757 Es pot veure un exemple d'ús de l'element en la figura
1758 \ref{fig:chunkintrachunk}.
1760 \subsubsection{Ús en el mòdul interchunk}
1762 En aquest mòdul l'element \texttt{<\textbf{chunk}>} no especifica cap
1763 atribut, només s'usa a la manera que s'usa \texttt{<\textbf{lu}>} en
1764 el mode de transfer o en el postchunk per a delimitar la forma lèxica.
1765 La part invariable del segment passa al final, usualment amb una
1766 instrucció de \texttt{<\textbf{clip}>} i l'ús de la part
1767 \texttt{chcontent}, el contingut invariable del chunk.
1769 Es pot veure un exemple d'ús de l'element en la figura
1770 \ref{fig:chunkinterchunk}.
1773 \subsection{Element de secció d'enllaç d'etiquetes \texttt{<tags>}}
1775 \textit{Només transfer/intrachunk}.
1777 Aquest element serveix per a
1778 especificar una llista d'etiquetes o elements \texttt{<\textbf{tag}>}
1779 que seran les pseudoetiquetes del chunk. No té atributs, i ha
1780 d'especificar-se al començament dels elements
1781 \texttt{<\textbf{chunk}>}.
1783 \subsection{Element d'enllaç d'etiquetes \texttt{<tag>}}
1785 \textit{Només transfer/intrachunk}.
1787 L'element \texttt{<\textbf{tag}>}
1788 ha de contenir una etiqueta, que es pot especificar mitjançant una
1789 instrucció \texttt{<\textbf{clip}>} o bé d'etiqueta literal
1790 \texttt{<\textbf{lit-tag}>}. No té atributs.
1792 \subsection{Element de blanc \texttt{<b>}}
1794 L'element \texttt{<\textbf{b}>} fa referència als [super]blancs, i és
1795 indexat mitjançant l'atribut \texttt{pos}; per exemple, un
1796 \texttt{<\textbf{b}>} amb \texttt{pos="2"} es refereix als
1797 [super]blancs (incloent-hi les dades de format encapsulades pel
1798 desformatador) entre la 2a FLLO i la 3a FLLO. La gestió explícita de
1799 [super]blancs permet la col·locació correcta del format quan el
1800 resultat de la transferència estructural té més o menys elements
1801 lèxics que l'original o bé ha estat sotmès a algun tipus de
1802 reordenament.
1804 \subsection{Preprocessament del mòdul de transferència estructural}
1806 Els fitxers d'especificació dels mòduls de transferència estructural,
1807 també anomenats \emph{fitxers de regles de transferència}, són
1808 preprocessats pel programa \textit{a\-per\-tium-preprocess-transfer} què
1809 calcula els patrons per a emparellar precondicions de les regles i a
1810 més indexa les regles per a accelerar el seu processament en temps
1811 d'execució. Aquesta informació s'emmagatzema en un arxiu en format
1812 binari que es llegeix conjuntament amb el diccionari bilingüe
1813 corresponent i el propi fitxer de regles de transferència per a
1814 l'execució conjunta dels mòduls de transferència lèxica i estructural.
1817 \chapter{Mòdul de selecció lèxica}
1819 \notavisible{Aquest capítol documenta el nou mòdul introduït a la cadena de
1820 muntatge d'Apertium i hauria d'ubicar-se entre les seccions 3.3 i 3.4 de
1821 la documentació de la versió 1 d'Apertium, a excepció de la
1822 secció~\ref{se:diccionaris} que hauria d'ubicar-se a la secció 3.1.2
1823 (pàgina 26) on s'expliquen els diccionaris usats per Apertium.}
1825 \section{Introducció}
1826 Quan el sistema Apertium s'utilitza per a traduïr automàticament entre
1827 llengües menys emparentades que les que ha tractat fins ara, pren
1828 importància la qüestió de la tria lèxica, que s'ha de dur a terme quan una
1829 paraula de la llengua origen pot tenir més d'una traducció en llengua
1830 meta. Per aquest motiu s'ha creat un nou mòdul, el mòdul
1831 de selecció lèxica, que s'ocupa d'aquesta qüestió.
1833 Abans d'explicar-ne les característiques, veurem com els
1834 problemes d'\emph{equivalència
1835 múltiple} (l'existència de
1836 més d'una traducció possible en llengua meta per a un lema o una forma
1837 lèxica en llengua
1838 origen) es tracten a Apertium de dues maneres diferents.
1840 Per una banda, ens trobem amb la situació en què entre els múltiples
1841 equivalents en llengua meta no hi ha una gran diferència de
1842 significat, i el fet d'escollir entre l'un o l'altre no comportaria
1843 cap error de traducció. Podríem dir que entre aquests equivalents hi
1844 ha una relació de sinonímia o quasisinonímia. En aquest cas, el
1845 lingüista escull com a traducció un dels dos lemes (generalment el més
1846 freqüent o més usual), i posa una restricció de direcció en els altres
1847 (amb els atributs \texttt{LR} o \texttt{RL}) per tal que siguin traduïts en la direcció
1848 contrària però no pas en la direcció en què hi ha múltiples
1849 equivalents.
1851 Per altra banda, tenim el cas en què entre els múltiples equivalents
1852 en llengua meta hi ha una evident diferència de significat que pot
1853 portar a errors de traducció quan es tria el lema inadequat. Aquests
1854 casos són els que tracta el nou mòdul de selecció lèxica. El lingüista
1855 codifica les entrades amb els atributs \texttt{slr} o \texttt{srl} que
1856 s'expliquen en l'apartat següent, identificant així les diferents
1857 possibilitats de traducció, i el mòdul de selecció lèxica s'ocupa
1858 d'escollir, mitjançant procediments estadístics, quina és la traducció
1859 adequada en un context determinat.
1862 Decidir quan una situació d'equivalència múltiple s'ha de tractar
1863 d'una manera o de l'altra, de vegades no és senzill. Per exemple,
1864 quan entre dos o
1865 més lemes de la llengua meta existeix diferència de significat,
1866 però considerem que el mòdul de selecció lèxica no serà capaç
1867 d'escollir la bona traducció a partir del context, seguirem el primer
1868 mètode: escollir la traducció fixa que volguem (la més general, la que
1869 considerem adequada en el màxim de situacions possibles) i posar una
1870 restricció de direcció en la resta d'equivalents.
1871 En la resta de casos, codificarem les entrades de manera que la decisió
1872 quedi en mans del mòdul de selecció lèxica.
1874 Quan s'utilitzi un sistema Apertium sense mòdul de selecció lèxica, l'única manera
1875 de codificar entrades amb diverses traduccions possibles és la primera, és a dir, escollint
1876 una única traducció i marcant la resta d'equivalències amb una restricció de direcció.
1877 En cas que utilitzem diccionaris bilingües amb múltiples traduccions,
1878 codificades amb els atributs \texttt{slr} o \texttt{srl},
1879 en un sistema que no disposa de mòdul de selecció lèxica, un full d'estil
1880 s'encarrega de convertir aquestes entrades
1881 pensades per al mòdul de selecció lèxica en entrades amb restriccions de direcció \texttt{LR} o \texttt{RL},
1882 de manera que un dels múltiples equivalents (el que el lingüista ha escollit com a
1883 a entrada predeterminada) queda com a traducció fixa del lema en llengua origen.
1885 Com a exemples d'equivalències bilingües que haurien de portar una restricció
1886 de direcció, podem donar els parells de traducció \texttt{ca-es}
1887 \emph{encara -- aún/todavía} i \emph{sobtat -- súbito/repentino}, el primer dels
1888 quals podria quedar així:
1889 \begin{alltt}
1890 \begin{small}
1892 <e r="LR">
1894 <l>aún<s n="adv"/></l>
1895 <r>encara<s n="adv"/></r>
1896 </p>
1897 </e>
1900 <l>todavía<s n="adv"/></l>
1901 <r>encara<s n="adv"/></r>
1902 </p>
1903 </e>
1904 \end{small}
1905 \end{alltt}
1908 Com a exemple del segon cas (múltiples equivalents amb gran diferència de significat) tenim els parells
1909 \texttt{es-ca} \emph{hoja -- full/fulla} o \emph{muñeca -- nina/canell}, i els exemples \texttt{en-ca}
1910 mostrats en el següent apartat.
1913 \begin{figure}
1914 {\footnotesize
1915 \setlength{\tabcolsep}{0.5mm}
1916 \begin{center}
1917 \begin{tabular}{ccccccccc}
1919 \parbox{0.95cm}{text en llengua origen} \\
1920 $\downarrow$ \\
1921 \framebox{\parbox{1.0cm}{desfor\-matador}} $\rightarrow$ &
1922 \framebox{\parbox{0.6cm}{anal. morf.}} $\rightarrow$ &
1923 \framebox{\parbox{1.0cm}{desamb. categ.}} $\rightarrow$ &
1924 \framebox{\parbox{0.6cm}{selec. lèxic}} $\rightarrow$ &
1925 \framebox{\parbox{0.85cm}{transf.\ estruc.}} $\rightarrow$ &
1926 \framebox{\parbox{0.6cm}{gen. morf.}}
1927 $\rightarrow$ & \framebox{\parbox{1.2cm}{post\-generador}}
1928 $\rightarrow$ & \framebox{\parbox{1.0cm}{refor\-matador}} \\
1929 & & & & $\updownarrow$ & & & $\downarrow$ \\
1930 & & & & \framebox{\parbox{0.8cm}{transf.\ lèxica}} & & &
1931 \parbox{0.95cm}{text en llengua meta}\\
1932 \end{tabular}
1933 \end{center}
1935 \caption{Els nou mòduls que formen la cadena de muntatge de la versió
1936 2 del sistema de traducció automàtica Apertium.}
1937 \label{fig:moduls}
1938 \end{figure}
1940 La figura~\ref{fig:moduls} mostra com queda la cadena de muntatge en
1941 la versió 2 d'Apertium.\footnote{Aquesta figura reemplaça a la figura
1942 1.1 que es troba a la pàgina 6 de la documentació de la versió 1
1943 d'Apertium.} El mòdul encarregat de la tria lèxica (selector lèxic)
1944 s'executa després del desambiguador lèxic categorial i abans del mòdul
1945 encarregat de la transferència estructural; per tant, aquest nou mòdul
1946 treballa únicament amb informació de la llengua origen.
1948 La resta del capítol s'organitza de la següent manera: la
1949 secció~\ref{se:diccionaris} explica la modificació feta per a
1950 especificar més d'una traducció al diccionari bilingüe; la
1951 secció~\ref{se:preprocessament} explica el preprocessament que s'ha de
1952 fer del diccionari bilingüe, tant si s'usa un mòdul
1953 de tria lèxica com si no. Finalment en la secció~\ref{se:lextor} s'explica
1954 com funciona i com s'ha d'entrenar el mòdul que fa la tria lèxica.
1956 \section{Modificació dels diccionaris}\label{se:diccionaris}
1958 La modificació feta als diccionaris per a permetre l'especificació de
1959 més d'una traducció en llengua meta consisteix a afegir dos atributs
1960 nous a l'element \texttt{<e>}. Aquests nous atributs poden utilitzar-se en
1961 tots els diccionaris però només tenen sentit quan es tracta d'una
1962 entrada del diccionari bilingüe.
1964 \begin{figure}[tb]
1965 \begin{small}
1966 \begin{alltt}
1968 <!\textsl{ATTLIST} e
1969 r (LR|RL) \textsl{#IMPLIED}
1970 lm CDATA \textsl{#IMPLIED}
1971 a CDATA \textsl{#IMPLIED}
1972 c CDATA \textsl{#IMPLIED}
1973 i CDATA \textsl{#IMPLIED}
1974 slr CDATA \textsl{#IMPLIED}
1975 srl CDATA \textsl{#IMPLIED}>
1977 <!-- r: restriction LR: left-to-right,
1978 RL: right-to-left -->
1979 <!-- lm: lemma -->
1980 <!-- a: author -->
1981 <!-- c: comment -->
1982 <!-- i: ignore ('yes') means ignore, otherwise it is not ignored) -->
1983 <!-- slr: translation sense when translating from left to right -->
1984 <!-- srl: translation sense when translating from right to left -->
1986 \end{alltt}
1987 \end{small}
1988 \caption{Fragment de la DTD \texttt{dix.dtd} on es defineix l'element
1989 \texttt{<e>} usat per a definir una entrada als
1990 diccionaris.}\label{fig:dixdtd}
1991 \end{figure}
1993 La figura~\ref{fig:dixdtd} mostra el fragment de la DTD
1994 \texttt{dix.dtd} on es defineix l'element \texttt{e} usat per a
1995 codificar les entrades als diccionaris. Els nous atributs introduïts
1996 són:
1997 \begin{description}
1998 \item[slr (\emph{sense from left to right})] s'utilitza per a
1999 especificar la \emph{marca de traducció} quan la traducció és d'esquerra dreta.
2000 L'atribut pot rebre qualsevol valor; no obstant
2001 això, el més apropiat és que rebi el valor del lema marcat com a
2002 \texttt{<r>}.
2003 \item[srl (\emph{sense from right to left})] s'utilitza per a
2004 especificar la marca de traducció quan la traducció és de dreta a
2005 esquerra. Com abans, l'atribut pot rebre qualsevol valor, però el
2006 més apropiat és que reba el lema marcat com a \texttt{<l>}.
2007 \end{description}
2009 A més, en ambdós casos el valor de l'atribut pot acabar amb un espai
2010 en blanc i la lletra ``D'' per a indicar que
2011 aquesta és la traducció predeterminada, és a dir, la traducció a emprar
2012 quan no hi ha suficient informació per a triar-ne una altra.
2014 El següent exemple il·lustra el funcionament dels nous atributs.
2015 Considerem el cas d'un diccionari bilingüe anglès--català i les
2016 següents entrades amb més d'una traducció en llengua meta:
2017 \begin{itemize}
2018 \item \emph{look}: que es pot traduir al català com \emph{mirar} (per
2019 defecte) o com \emph{parèixer},
2020 \item \emph{floor}: que es pot traduir al català per \emph{pis} (per
2021 defecte) o per \emph{terra},
2022 \item \emph{pis}: que es pot traduir a l'anglès per \emph{flat} (per
2023 defecte) o per \emph{floor} (prenent \emph{pis} en el sentit de
2024 paviment).
2025 \end{itemize}
2027 Aquesta informació es representa fent ús dels dos atributs esmentats
2028 abans:
2029 \begin{alltt}
2030 \begin{small}
2031 <e srl="flat D">
2033 <l>flat<s n="n"/></l>
2034 <r>pis<s n="n"/><s n="m"/></r>
2035 </p>
2036 </e>
2038 <e slr="pis D" srl="floor">
2040 <l>floor<s n="n"/></l>
2041 <r>pis<s n="n"/><s n="m"/></r>
2042 </p>
2043 </e>
2045 <e slr="terra">
2047 <l>floor<s n="n"/></l>
2048 <r>terra<s n="n"/><s n="m"/></r>
2049 </p>
2050 </e>
2052 <e slr="mirar D">
2054 <l>look<s n="vblex"/></l>
2055 <r>mirar<s n="vblex"/></r>
2056 </p>
2057 </e>
2059 <e slr="parèixer">
2061 <l>look<s n="vblex"/></l>
2062 <r>parèixer<s n="vblex"/></r>
2063 </p>
2064 </e>
2065 \end{small}
2066 \end{alltt}
2070 \section{Preprocessament dels diccionaris bilingües}\label{se:preprocessament}
2071 El fet que, amb aquesta modificació, es creïn diccionaris bilingües
2072 que permeten l'especificació de més d'una traducció per paraula fa
2073 necessari un preprocessament d'aquests diccionaris, ja que el motor de
2074 traducció Apertium treballa amb diccionaris compilats en els quals
2075 cada mot té només una traducció possible.
2077 El preprocessament dels diccionaris es fa automàticament durant la
2078 compilació, per la qual cosa l'usuari final no ha de fer cap acció especial.
2080 \subsection{Preprocessament sense mòdul de tria lèxica}
2082 Quan aquests diccionaris s'utilitzin en un sistema que no disposa de
2083 mòdul de selecció lèxica, el preprocessament es realitza amb
2084 l'aplicació del full d'estil \texttt{translate-to-default-equivalent.xsl}. Aquest full
2085 d'estil converteix els diccionaris amb més d'una possible traducció per entrada en
2086 diccionaris amb una sola traducció per entrada, escollint com a
2087 traducció l'entrada marcada com a equivalent predeterminat, i posant una
2088 restricció de direcció (\texttt{LR} o \texttt{RL} segons el cas) en les entrades
2089 restants, de manera que aquestes només es tradueixen en la direcció de
2090 traducció en què no hi ha multiplicitat d'equivalents. Aquest full
2091 d'estil es crida des del \texttt{Makefile}.
2093 Com a exemple, les tres primeres entrades que es mostren en la secció
2094 \ref{se:diccionaris} queden així després de l'aplicació del full
2095 d'estil esmentat:
2097 \begin{alltt}
2098 \begin{small}
2101 <l>flat<s n="n"/></l>
2102 <r>pis<s n="n"/><s n="m"/></r>
2103 </p>
2104 </e>
2106 <e r="LR">
2108 <l>floor<s n="n"/></l>
2109 <r>pis<s n="n"/><s n="m"/></r>
2110 </p>
2111 </e>
2113 <e r="RL">
2115 <l>floor<s n="n"/></l>
2116 <r>terra<s n="n"/><s n="m"/></r>
2117 </p>
2118 </e>
2119 \end{small}
2120 \end{alltt}
2122 \subsection{Preprocessament amb mòdul de tria lèxica}
2124 En el cas que el sistema Apertium funcioni amb un mòdul de selecció lèxica, el diccionari bilingüe
2125 s'ha de preprocessar per a obtenir:
2126 \begin{itemize}
2127 \item un diccionari monolingüe que per a cada paraula en
2128 llengua origen (per exemple \emph{look}) retorni totes les possibles
2129 marques de traducció (\texttt{look\_\_mirar D} i
2130 \texttt{look\_\_parèixer}), aquest diccionari serà utilitzat pel
2131 mòdul que fa la tria lèxica; i
2132 \item un nou diccionari bilingüe que donada una paraula
2133 amb la selecció lèxica ja feta (per exemple
2134 \texttt{look\_\_parèixer}) en retorni la traducció
2135 (\emph{parèixer}); aquest serà el diccionari bilingüe a emprar en la
2136 transferència lèxica.
2137 \end{itemize}
2139 Aquest preprocessament es fa automàticament amb el següent
2140 programari en compilar els diccionaris:
2141 \begin{itemize}
2142 \item \texttt{apertium-gen-lextormono}, que rep tres paràmetres:
2143 \begin{itemize}
2144 \item el sentit de traducció per al qual es vol obtenir el
2145 diccionari monolingüe usat en la tria lèxica; \texttt{lr}
2146 (\emph{left to rigth}) per a la traducció d'esquerra a dreta, i
2147 \texttt{rl} (\emph{right to left}) per a la traducció de dreta a
2148 esquerra;
2149 \item el diccionari bilingüe a preprocessar; i
2150 \item el fitxer on s'ha d'escriure el diccionari monolingüe
2151 resultant.
2152 \end{itemize}
2153 \item \texttt{apertium-gen-lextorbil}, que rep tres paràmetres:
2154 \begin{itemize}
2155 \item el sentit de traducció (\texttt{lr} o \texttt{rl}) per al qual
2156 es vol obtenir el diccionari bilingüe a usar pel mòdul de
2157 transferència lèxica;
2158 \item el diccionari bilingüe a preprocessar; i
2159 \item el fitxer on s'ha d'escriure el diccionari bilingüe resultant.
2160 \end{itemize}
2161 \end{itemize}
2163 \section{Mòdul per a la tria lèxica}\label{se:lextor}
2164 El mòdul encarregat de la tria lèxica s'executa després del
2165 desambiguador lèxic categorial i abans de la transferència estructural
2166 (vegeu la figura~\ref{fig:moduls} de la pàgina~\pageref{fig:moduls});
2167 per tant fa ús únicament d'informació de la llengua origen de la
2168 traducció. No obstant això, per a l'entrenament del mòdul també es fa
2169 ús d'informació de la llengua meta.
2171 \subsection{Entrenament}\label{se:entrenament}
2172 Per al entrenament del mòdul que fa la tria lèxica es necessiten un
2173 corpus en llengua origen i un altre en llengua meta; no cal que
2174 estiguen relacionats. Tots dos corpus han de ser preprocessats abans
2175 de l'entrenament. Aquest preprocessament, el qual consisteix a
2176 analitzar els còrpora i fer la desambiguació lèxica categorial, es pot
2178 %perquè estiguen en el mateix format que quan es fa la
2179 %tria lèxica durant la traducció (vegeu la secció~\ref{se:us} més
2180 %avall)
2181 amb \texttt{apertium-preprocess-corpus-lextor}.
2183 L'entrenament del mòdul encarregat de la tria lèxica consisteix a fer
2184 les següents tasques:\footnote{L'entrenament dels models usats per a
2185 la tria lèxica s'ha automatitzat en aquells paquets lingüístics que
2186 l'usen. A més tot el programari esmentat té la seua pàgina de manual UNIX}
2187 \begin{enumerate}
2188 \item obtenir la llista de paraules que no hauran de ser tingudes en
2189 compte a l'hora de fer la tria lèxica (\emph{stopwords}). Aquesta
2190 llista pot fer-se a mà o mitjançant
2191 \texttt{apertium-gen-stopwords-lextor};
2192 \item obtenir la llista de paraules (en llengua origen) que tenen més
2193 d'una traducció en llengua meta amb
2194 \texttt{apertium-gen-wlist-lextor};
2195 \item traduir a la llengua meta cada una de les paraules obtingudes en
2196 el pas anterior amb \texttt{apertium-gen-wlist-lextor-translation};
2197 \item entrenar amb \texttt{apertium-lextor --trainwrd} i usant el
2198 corpus preprocessat de la llengua meta un model de coaparició de
2199 paraules per a les obtingudes en el pas anterior;
2200 \item entrenar amb \texttt{apertium-lextor --trainlch} i usant el
2201 corpus preprocessat de la llengua origen, els diccionaris generats
2202 amb els programes esmentats a la secció~\ref{se:preprocessament} i
2203 els models de coaparició de paraules estimats en el pas anterior, un
2204 model de coaparició per a cadascuna de les marques de traducció
2205 d'aquelles paraules que poden tenir més d'una traducció en llengua
2206 meta.
2207 \end{enumerate}
2209 \subsection{Utilització}\label{se:us}
2210 Els models de coaparició de paraules estimats a la secció anterior per
2211 a cadascuna de les marques de traducció proporcionen la informació
2212 necessària per a portar a terme la tria lèxica amb informació del
2213 context.
2215 La tria lèxica es fa amb \texttt{apertium-lextor --lextor}; els formats
2216 usats per a la comunicació amb la resta de mòduls del motor de
2217 traducció són:
2218 \begin{description}
2219 \item [Entrada:] text en el mateix format que el d'entrada al mòdul de
2220 transferència estructural, és a dir, text analitzat i desambiguat
2221 amb les cues invariants dels multimots desplaçats abans de qualsevol
2222 etiqueta.
2223 \item [Eixida:] text en el mateix format però amb la marca de
2224 traducció a emprar quan es faça la transferència lèxica.
2225 \end{description}
2227 El següent exemple il·lustra els formats d'entrada/eixida usats pel
2228 selector lèxic (suposem que únicament el verb anglès \emph{get} té més
2229 d'un sentit de traducció als diccionaris):
2230 \begin{itemize}
2231 \item Text en llengua origen (anglès): \emph{To get to the city
2232 centre}
2233 \item Entrada al selector lèxic: \verb!^To<pr>$!
2234 \verb!^get<vblex><inf>$! \verb!^to<pr>$! \verb!^the<det><def><sp>$!
2235 \verb!^city<n><sg>$! \verb!^centre<n><sg>$!
2236 \item Marques de traducció al diccionari bilingüe per al verb \emph{get}:
2237 \texttt{rebre}, \texttt{agafar}, \texttt{arribar},
2238 \texttt{aconseguir D}
2239 \item Eixida del selector lèxic: \verb!^To<pr>$!
2240 \verb!^get__arribar<vblex><inf>$! \verb!^to<pr>$!
2241 \verb!^the<det><def><sp>$! \verb!^city<n><sg>$!
2242 \verb!^centre<n><sg>$!
2243 \end{itemize}
2246 \chapter{Formularis web d'inserció de dades}
2248 Aquest capítol presenta el sistema de manteniment de diccionaris
2249 d'Apertium 2. Està estructurat en dues seccions. En la secció
2250 \ref{ss:formadmin} es dóna l'informació necessària per a instal·lar la
2251 ferramenta i realitzar adaptacions. En la secció \ref{ss:formus} s'exposa el
2252 mode d'ús de l'aplicació web per a dur a terme la millora de les dades
2253 lingüístiques.
2256 \section{Introducció}
2258 El formularis per a la introducció de nous termes als diccionaris de
2259 les diferents llengües sorgeixen com a resposta a la necessitat de
2260 proveir una ferramenta amb la qual introduir còmodament noves paraules
2261 als diferents diccionaris i amb la possibilitat de fer-ho de forma
2262 remota des de qualsevol ordinador que tinga accés a Internet.
2264 Així és plantegen com uns formularis que estan escrits en \texttt{php}
2265 i són utilitzables amb qualsevol navegador d'Internet, bé de forma
2266 local en el mateix ordinador on s'emmagatzemen els diccionaris o bé
2267 remotament.
2269 \section{Instal·lació i administració}
2270 \label{ss:formadmin}
2272 \subsection{Instal·lació de la ferramenta}
2274 La instal·lació s'ha de realitzar en un màquina Unix, que tinga
2275 instal·lat un servidor web Apache amb \texttt{php}. Així s'ha de
2276 procedir primerament a fer la instal·lació del servidor \texttt{php}
2277 si no estigués ja fet. Una vegada estiga resolt el punt anterior es
2278 procedeix a fer la instal·lació pròpiament dita.
2280 S'obté el paquet \textit{`apertium-lexical-webform-0.9'} i
2281 es descomprimeix dins del directori on vaja a deixar-se la ferramenta
2282 de formularis d'inserció.
2284 \begin{alltt}
2285 # cd /ruta/dels/formularis
2286 # tar -xvzf /ruta/apertium-lexical-webform-0.9.tar.gz
2287 \end{alltt}
2289 S'ha de tenir en compte que l'Apache sols serveix les pàgines que
2290 estan dintre del directori arrel amb què l'hem configurat. Per tant el
2291 directori on deixem els formularis ha de ser un subdirectori que
2292 estiga dintre de l'arrel del servidor Apache.
2294 Seguidament s'edita el fitxer de configuració que està en
2295 \textit{private/config.php} i es dóna valors adequats a les variables
2296 de configuració:
2298 \begin{itemize}
2299 \item \texttt{\$anmor}: ruta sencera on es troba l'analitzador
2300 morfològic \textit{'lt-proc`}.
2301 \item \texttt{\$dicos\_path}: ruta on es troben els diccionaris finals
2302 i el binaris compilats de cada diccionari. Este directori ha de
2303 contindre un sub-directori per a cada diccionari amb el que pot
2304 treballar el formulari. El nom del subdirectori ha de seguir la
2305 següent sintaxi: \texttt{paradigmes-ll-rr} , on \textit{ll} i
2306 \textit{rr} són les inicials del parell de llengües del traductor en
2307 concret. En cada directori es deixen els diccionaris finals amb què
2308 treballa el traductor i els corresponents binaris compilats.
2309 Aquests directoris es poden substituir per enllaços simbòlics en
2310 cas que es troben en diferents llocs.
2311 \item \texttt{\$usuaris\_professionals}: un llistat amb els usuaris
2312 professionals del sistema que tenen permís per a inserir als
2313 diccionaris del formulari i validar paraules pendents de
2314 confirmació.
2315 \item \texttt{\$mail}: Adreça electrònica de l'administrador
2316 encarregat dels formularis. Quan algú sol.licite donar-se d'alta com
2317 a usuari s'enviarà un correu electrònic a aquesta adreça.
2318 \end{itemize}
2320 Una vegada s'han configurat els paràmetres d'aquest fitxer el servidor
2321 de formularis ja es troba en funcionament.
2324 \subsection{Estructura de directoris}
2326 Tots els fitxers necessaris per al correcte funcionament s'estructuren
2327 de la següent forma:
2329 \begin{itemize}
2330 \item \texttt{/index.php:} presenta el formulari inicial d'inserció.
2331 Té un apartat per a cada parell de llengües on s'introdueix el lema
2332 en llengua origen i en llengua meta i permet triar el tipus de
2333 categoria gramatical que es tracta. En prémer el botó \textit{'Go
2334 on'} avancem a la pàgina següent on seleccionarem els paradigmes
2335 de flexió corresponent a cadascun dels lemes en llengua origen i
2336 llengua meta.
2337 \item \texttt{/dics:} directori amb els diccionaris de les entrades
2338 que van inserint-se des dels formularis. Estan els fitxers amb les
2339 entrades dels usuaris no professionals (pendents de ser validades) i
2340 els diccionaris amb les entrades en format \texttt{XML} dels usuaris
2341 professionals
2342 \item \texttt{/private:} aquí està la major part dels mòduls
2343 utilitzats en els formularis. També conté els directoris amb la
2344 definició de paradigmes per a totes les llengües amb les que podem
2345 treballar, aquests directoris tenen la forma
2346 \texttt{paradigmes-ll-rr} sent \textit{ll} i \textit{rr} les
2347 inicials del parell de llengües del traductor en concret. L'ordre
2348 escollit per a les dues llengües, primer \textit{ll} i després
2349 \textit{rr} depèn de l'ordre en que s'hagen construït les entrades
2350 per al diccionari bilingüe. També estan en aquest directori els
2351 fitxers encarregats de fer tot el processament de les paraules a
2352 inserir. Aquests son:
2353 \begin{itemize}
2354 \item \texttt{resultado.php: } Aquest \textit{php} és cridat quan
2355 s'insereixen dues paraules de qualsevol parell de llengües des del
2356 mòdul \textit{index.php}. Bàsicament el que fa és establir el parell
2357 de llengües amb què es treballarà (\textit{\$LR} i \textit{\$RL}) i
2358 la categoria gramatical de la paraula que s'inserirà
2359 (\textit{\$tipus}). S'inclou al mòdul \textit{selec.php} que serà el
2360 següent que es crida en el procés d'inserció. En el cas que el
2361 \textit{tipus} de la paraula a inserir fos una unitat multi-paraula
2362 (\textit{Multi Word Verb}) aleshores és el mòdul \textit{multip.php}
2363 el que s'inclou i es crida en comptes de \textit{selec.php}. Els
2364 elements \textit{Multi Word Verb} o unitats multi-paraula estan
2365 formats per un verb que pot flexionar seguit d'una cua invariable
2366 d'una o més paraules.
2367 \item \texttt{selecc.php: } És el mòdul encarregat de proporcionar la
2368 selecció del paradigma escollit per a cada una de les dues paraules,
2369 la paraula en llengua origen i en llengua meta. Proporciona una
2370 llista de paradigmes per a escollir que depenen del tipus gramatical
2371 de l'entrada que estem creant. Quan es selecciona un nou paradigma
2372 per a un dels dos lemes, proporciona uns exemples de la flexió del
2373 lema a inserir segons el paradigma que hem escollit. Si acceptem els
2374 paradigmes escollits, el mòdul crida a \textit{insertarPro.php} o
2375 \textit{insertar.php} depenen de si l'usuari que està fent la nova
2376 inserció està considerat com a professional o no professional
2377 respectivament.
2378 \item \texttt{multip.php: } Té la mateixa funció que el mòdul
2379 \textit{selecc.php} però per a les unitats multi-paraula. Utilitza
2380 les mateixes variables i realitza les mateixes operacions, però quan
2381 mostra els exemples ho fa flexionant el verb i afegint totes les
2382 paraules que formen la cua. La manera de funcionar del mòdul és
2383 anàloga a la del mòdul \textit{selecc.php} i la seua descripció
2384 detallada la trobarem a l'apartat \ref{ss:fitxersphp}.
2385 \item \texttt{valida.php: } Aquest mòdul es crida quan un usuari
2386 professional decideix validar paraules que estan en la cua
2387 d'entrades pendents de validació. Llegeix el fitxer amb la cua de
2388 paraules per validar i el recorre un a un, agafa les dades de
2389 l'entrada corresponent (\textit{LRlem, RLlem, paradigmaLR,
2390 paradigmaRL, LR, RL}, etc...) i crida a \textit{selecc.php} per a
2391 continuar amb el procés d'inserció d'eixa entrada particular.
2392 \item \texttt{insertarPro.php: } Aquest mòdul es crida quan ja hem
2393 seleccionat el paradigma adequat per a la paraula en llengua origen
2394 i en llengua meta (operació realitzada en \textit{selecc.php}) i
2395 volem visualitzar com quedarà l'entrada en el format \texttt{XML}
2396 dels tres diccionaris, monolingüe origen, bilingüe i monolingüe
2397 meta. Des d'aquesta pantalla es podrà modificar directament el codi
2398 i finalment acceptar la nova entrada o cancelar l'operació.
2399 \item \texttt{ins\_multip.php: } Té la mateixa funció que
2400 \textit{insertarPro.php} però està pensat per a les unitats
2401 multi-paraula, de manera que té un tractament especial amb l'entrada
2402 per a que el codi \texttt{XML} que s'insereix als diccionaris siga
2403 correcte.
2404 \item \texttt{insertar.php: } És el mòdul equivalent a
2405 \textit{insertarPro.php} però quan l'operació està realitzant-la un
2406 usuari no professional. Les accions que es realitzen en este cas són
2407 molt més senzilles ja que l'única cosa que es fa és inserir en el
2408 fitxer de termes pendents de validar els lemes i els paradigmes
2409 escollits per l'usuari no professional, i queden allí fins que un
2410 usuari professional els valida.
2411 \item \texttt{verSemi.php: } Este mòdul té la funció de mostrar el
2412 fitxer amb les entrades inserides per usuaris no professionals i que
2413 estan pendents de ser validades. Pot servir com ajuda per als
2414 usuaris professionals que abans de començar a validar paraules poden
2415 comprovar quines estan en la cua per a validar. Per a cridar-lo
2416 apareix un enllaç en el formulari generat per \textit{selec.php} des
2417 d'on es pot cridar aquesta funcionalitat.
2418 \item \texttt{paradigmas.xsl:} Full d'estils que s'utilitza per a
2419 generar els fitxers de paradigmes amb que treballen els mòduls del
2420 formulari. S'utilitza amb l'especificació dels paradigmes de cada
2421 llengua escrit en format \texttt{XML}. Aquest punt es tractarà més
2422 extensament en l'apartat \textit{Fitxers de Paradigmes}.
2423 \item \texttt{creaparadigma.awk:} Fitxer \texttt{awk} que també
2424 s'utilitza per a generar els fitxers de paradigmes de treball.
2425 \item \texttt{gen\_paradig.sh:} Script que es pot fer servir si volem
2426 que automàticament es generen els fitxers de paradigmes de tots els
2427 parells de llengües que tenim instal·lats.
2428 \end{itemize}
2429 \end{itemize}
2431 L'especificació detallada de les tasques de cada mòdul es troba en les
2432 seccions corresponents.
2434 \subsection{Fitxers php}
2436 \subsubsection{resultado.php}
2438 Depenent del valor de la variable \texttt{\$nomtrad} actualitzada per
2439 \textit{index.php} el mòdul assigna els valor adequats a \texttt{\$LR}
2440 i \texttt{\$RL} (el tipus de llengua origen i llengua meta
2441 respectivament). Seguidament, depenent de la categoria gramatical de
2442 la paraula que s'inserirà, assignem el valor adequat a la variable
2443 \$tipus i cridem a \textit{selec.php} o \textit{multip.php} depenent
2444 de si es tracta d'una paraula simple o d'una unitat multi-paraula.
2446 \subsubsection{selecc.php}
2447 \label{ss:fitxersphp}
2449 Aquest mòdul té la funció de triar el paradigma corresponent a les
2450 paraules que volem introduir. Es tria el paradigma de la paraula en
2451 llengua origen i en llengua meta.
2453 Depenent de la categoria gramatical de la paraula que estem
2454 introduint, s'assignen uns determinats valors a unes variables que
2455 darrerament s'utilitzaran, aquestes són
2456 \begin{itemize}
2457 \item \texttt{cadFich:} categoria gramatical del lema.
2458 \item \texttt{show:} cadena que es mostra al formulari indicant la
2459 categoria gramatical de la paraula que està inserint-se.
2460 \item \texttt{tag:} cadena amb l'etiqueta \texttt{XML} d'eixida de
2461 l'analitzador morfològic per a aquesta categoria gramatical.
2462 \item \texttt{tagout:} cadena amb el codi \texttt{XML} que indica la
2463 categoria gramatical de la paraula. Esta cadena s'utilitzarà quan es
2464 compose l'entrada final \texttt{XML} que s'inserirà al diccionari.
2465 \item \texttt{nota:} cadena amb possibles comentaris a inserir en el
2466 codi \texttt{XML} de l'entrada.
2467 \end{itemize}
2468 Els formularis treballen amb 4 tipus de diccionaris:
2469 \begin{itemize}
2470 \item \textit{Semiprofessionals}: Aquests contenen les paraules
2471 inserides des del formulari per usuaris no professionals i que estan
2472 pendents de validació. Acaben amb l'extensió "\textit{semi.dic}"
2473 \item \textit{Diccionaris del formulari}: Contenen les paraules que
2474 han sigut inserides des del formulari per usuaris professionals i
2475 també les que han estat validades des dels diccionaris
2476 semiprofessionals. Acaben amb l'extensió "\textit{webform}".
2477 \item \textit{Finals}: Són els fitxers amb totes les entrades escrites
2478 en codi \texttt{XML} . Aquests fitxers són els que utilitza
2479 definitivament el traductor després de rebre un tractament adequat
2480 de compilació. Acaben amb l'extensió "\textit{dix}".
2481 \item \textit{Finals compilats}: Després d'haver compilat els
2482 diccionaris finals ja poden ser utilitzats pels binaris del
2483 traductor. Acaben amb l'extensió "\textit{bin}"
2484 \end{itemize}
2486 Aquests diccionaris són utilitzats pels formularis i hi ha variables
2487 que contenen les rutes on es poden trobar. També es donen valors a les
2488 variables que mantenen les rutes on s'han de buscar els fitxers
2489 auxiliars i de configuració:
2490 \begin{itemize}
2491 \item \texttt{path:} ruta per als diccionaris temporals.
2492 \item \texttt{fich\_LR:} diccionari de la llengua origen de les
2493 paraules inserides mitjançant el formulari i que encara no són al
2494 diccionari final ni al diccionari compilat.
2495 \item \texttt{fich\_RL:} diccionari de la llengua meta de les paraules
2496 inserides mitjançant el formulari i que encara no són al diccionari
2497 final ni al diccionari compilat.
2498 \item \texttt{fich\_LRRL:} diccionari bilingüe de les paraules
2499 inserides mitjançant el formulari i que encara no són al diccionari
2500 final ni al diccionari compilat.
2501 \item \texttt{fich-semi:} entrades inserides mitjançant el formulari
2502 per usuaris no professionals i que estan pendents de validació.
2503 \item \texttt{path\_paradigmasLR:} ruta dels fitxers amb els
2504 paradigmes de flexió per a llengua origen.
2505 \item \texttt{path\_paradigmasRL:} ruta dels fitxers amb els
2506 paradigmes de flexió per a llengua meta.
2507 \item \texttt{anmor:} ruta de l'analitzador morfològic.
2508 \item \texttt{aut\_LRRL:} ruta del binari morfològic de llengua origen
2509 a llengua meta.
2510 \item \texttt{aut\_RLLR:} ruta del binari morfològic de llengua meta a
2511 llengua origen.
2512 \end{itemize}
2514 Seguidament s'insereix el codi html del que ha de fer depenent de
2515 l'acció seleccionada. Les accions que es produeixen per ordre
2516 seqüencial són les següents:
2518 \begin{itemize}
2519 \item Comprova que el lema en llengua origen a inserir no hi siga ja
2520 en els diccionaris de paraules inserides pel formulari. Si s'hagués
2521 cridat a \texttt{selecc.php} des de la pantalla de validació de
2522 paraules (\texttt{valida.php}) aleshores comprova que el lema no hi
2523 siga ja en el fitxer de paraules inserides per usuaris no
2524 professionals. També ho comprova en el diccionari complet final.
2525 \item Fa la mateixa comprovació corresponent per a la llengua meta.
2526 \item Seguidament s'escriu codi per a seleccionar restriccions del
2527 sentit de la traducció.
2528 \item Es defineixen una sèrie de funcions que s'utilitzaran en la
2529 generació d'exemples per als lemes quan triem el corresponent
2530 paradigma. Aquestes son:
2531 \begin{itemize}
2532 \item \texttt{esVocalFuerte}
2533 \item \texttt{esVocalDebil}
2534 \item \texttt{esVocal}
2535 \item \texttt{PosicioVocalTall}
2536 \end{itemize}
2537 Aquestes funcions es descriuen més endavant en l'apartat
2538 corresponent a \textit{insertarPro.php}.
2539 \item S'obri el fitxer de paradigmes per a mostrar una finestra de
2540 selecció desplegable amb els paradigmes que podem triar per al lema
2541 en llengua origen que estem tractant. Per a fer això s'ha de
2542 comprovar seqüencialment els paradigmes corresponents a la categoria
2543 gramatical del lema i comprovar que el paradigma es pot aplicar al
2544 lema corresponent.
2545 \item Seguidament es fa el mateix però per als paradigmes del lema en
2546 llengua meta.
2547 \item Amb els lemes i amb els paradigmes corresponents seleccionats,
2548 s'han de generar els exemples de com quedaria la flexió d'eixos
2549 lemes segons els paradigmes escollits. Per aconseguir això
2550 necessitem per una banda l'arrel del lema (\texttt{raiz\_LR i
2551 raiz\_RL}) i per altra les terminacions d'exemple per al paradigma
2552 escollit (\texttt{paradigma\_LR i paradigma\_RL}), terminacions que
2553 s'obtenen del fitxer de paradigmes. Finalment compon una cadena amb
2554 els exemples generats (\texttt{ejemplos\_LR i ejemplos\_RL}) i els
2555 mostra
2556 \item Si estem en aquesta pantalla perquè venim de validar paraules
2557 (\texttt{valida=1}) aleshores afegeix al formulari un botó per a
2558 eliminar l'entrada actual en cas que no volguérem validar-la i
2559 inserir-la.
2560 \item Si l'usuari que ha entrat en aquesta pantalla és un usuari
2561 reconegut com a professional, aleshores afegeix al formulari un botó
2562 per a que eixe usuari puga triar l'opció de validar paraules
2563 inserides per usuaris no professionals
2564 \item Finalment tenim el tractament de l'acció corresponent activada
2565 al polsar un dels botons de confirmació que es mostren a la part
2566 inferior del formulari. Si l'acció és \textit{"Delete"} , cosa que
2567 sols pot ocórrer quan s'estan validant entrades, elimina l'entrada
2568 corresponent del fitxer amb les entrades d'usuaris no professionals.
2569 Sinó, l'acció és la de confirmar (botó \textit{"Go on"}), i cridem
2570 al mòdul \texttt{insertarPro.php} o \texttt{insertar.php} depenent
2571 de si l'usuari es professional o no professional respectivament.
2572 Aquests mòduls s'encarreguen de fer l'inserció als diccionaris.
2573 \end{itemize}
2574 Quan s'ha inserit la paraula, es torna a mostrar la pàgina de
2575 \texttt{validar.php} o de \texttt{selecc.php} depenent de si havíem
2576 entrat des d'un procediment de validació (i aleshores
2577 \textit{valida=1}) o des d'una inserció normal.
2579 \subsubsection{multip.php}
2580 El codi i el comportament d'aquest mòdul és el mateix que el de
2581 \textit{selecc.php}. L'única diferència és que aquest està pensat per
2582 a tractar les unitats multiparaula, mentre que \textit{selec.php}
2583 tracta la resta de unitats. Així, la diferència més evident es que
2584 tenim les variables \texttt{\$LRcua} i \texttt{\$RLcua} que contenen
2585 la cua invariable que va després de la part variable de la
2586 multi-paraula. Quan es mostren els exemples, a banda de mostrar la
2587 part variable flexionada segons el paradigma escollit, també es mostra
2588 un quadre de text modificable amb la cua invariable.
2590 Quan es premi el botó de seguir amb l'inserció de l'entrada als
2591 diccionaris, es crida al mòdul \textit{ins\_multip.php} en comptes de
2592 \textit{insertarPro.php}.
2594 \subsubsection{valida.php}
2595 Aquest mòdul és cridat quan un usuari professional polsa el botó
2596 "\textit{validate pairs}". El control passa a aquest mòdul que llegeix
2597 el diccionari d'entrades pendents de ser validades (\$fichSemi) del
2598 parell de llengües corresponent. Aleshores s'entra en un bucle que
2599 recorre aquest fitxer i va llegint les entrades una a una. Amb la
2600 informació de l'entrada particular dóna valor a una sèrie de variables
2601 que seran utilitzades en els mòduls que faran el tractament posterior,
2602 com ara:
2603 \begin{center}
2604 % use packages: array
2605 \begin{tabular}{ll}
2606 \$LRlem & \$RLlem \\
2607 \$paradigmaLR & \$paradigmaRL \\
2608 \$direccions & \$tipo \\
2609 \$comentarios & \$user \\
2610 \$geneLR & \$geneRL \\
2611 \$numLR & \$numRL \\
2612 \$LR & \$RL
2613 \end{tabular}
2614 \end{center}
2616 Una vegada establerts els valors adequats per a aquestes variables es
2617 cedeix el control a \textit{selec.php} que tracta l'entrada com si
2618 d'una inserció d'usuari professional es tractara. Després d'inserir
2619 les entrades als diccionaris mitjançant \textit{insertarPro.php}, el
2620 flux torna a \textit{valida.php} que continua amb la següent entrada
2621 per validar.
2623 \subsubsection{insertarPro.php}
2624 Una vegada introduïts els lemes i seleccionats els paradigmes
2625 corresponents en \textit{selec.php}, aquest mòdul és l'encarregat de
2626 generar les corresponents entrades en codi \texttt{XML} i inserir-les
2627 als diccionaris monolingües i al bilingüe.
2629 Realitza moltes operacions semblants a les realitzades en
2630 \textit{selec.php}, com ara generar els exemples de la paraula
2631 flexionada. Així primerament dóna valor a \texttt{cadFich, show, tag,
2632 tagout, nota} depenent de la categoria gramatical (\texttt{\$tipus})
2633 de la paraula a inserir. Assigna rutes a les variables de ubicació de
2634 fitxers i defineix unes funcions necessàries de igual manera a com
2635 ocorria en \textit{selec.php}.
2636 \begin{itemize}
2637 \item \texttt{esVocalFuerte}: Retorna \textit{true} si la vocal és
2638 forta, és a dir \textit{a, e, o}.
2639 \item \texttt{esVocalDebil}: Retorna \textit{true} si la vocal és
2640 feble, és a dir \textit{a, e, o}.
2641 \item \texttt{esVocal}: Retorna \textit{true} si el caràcter que li
2642 passem com argument és una vocal.
2643 \item \texttt{diptongo}: Retorna \textit{true} si les dues lletres que
2644 se li passen com arguments formen diftong. Això ocorrerà sempre que
2645 les dues vocals no siguin fortes.
2646 \item \texttt{acentuar}: Se li passa una cadena de text i l'accentua
2647 seguint les regles del castellà en funció del parametre
2648 \textit{\$siguienteletra}.
2649 \item \texttt{esMayuscula}: Retorna \textit{true} si el caràcter està
2650 en majúscula.
2651 \item \texttt{TieneAcento}: Retorna \textit{true} si la cadena té
2652 accent.
2653 \item \texttt{acentua}: Accentua l'última vocal accentuable d'una
2654 paraula amb un accent tancat o obert depenent del sentit indicat en
2655 el paràmetre \$sentit.
2656 \item \texttt{PonQuitaAcento}: Posa o lleva l'accent de la primera
2657 cadena passada com argument en funció de si la segona cadena
2658 argument té o no té accent.
2659 \item \texttt{PosicioVocalTall}: Torna la posició dins del lema
2660 (\$lema) on es troba la vocal (\$vocal) que separa l'arrel de la
2661 desinència. Busquem la vocal del final cap al principi i tornem la
2662 primera ocurrència de \$vocal.
2663 \end{itemize}
2665 Ara es realitzen les mateixes operacions que en \textit{selec.php},
2666 comprova que l'entrada no hi siga ja als diccionaris i genera els
2667 exemples de la paraula flexionada amb el paradigma prèviament
2668 escollit. Seguidament el que fem és construir la cadena amb el codi
2669 \texttt{XML} que va a inserirem al diccionari monolingüe de llengua
2670 origen. Amb la informació que disposem dels lemes provinent de
2671 \textit{selec.php}, es genera una cadena de text (\texttt{\$cad\_LR})
2672 que conté el codi \texttt{XML} per al diccionari monolingüe. Aquesta
2673 cadena es mostra en una finestra de text que pot ser modificada
2674 manualment. El mateix procés es repeteix per a generar la cadena
2675 corresponent al diccionari monolingüe de llengua meta
2676 (\texttt{\$cad\_RL}) i per al diccionari bilingüe
2677 (\texttt{\$cad\_bil}). Seguidament, es concatena a aquestes variables
2678 de cadena els comentaris i el nom d'usuari que insereix l'entrada, si
2679 s'escau. Finalment s'acaba de compondre la pantalla de formulari, amb
2680 botons d'acceptar, eliminar i tornar cap enrere. El codi que fa el
2681 tractament de cadascuna de les possibles accions es troba al final del
2682 fitxer:
2683 \begin{itemize}
2684 \item \texttt{Inserir: } En aquest cas, fa unes substitucions de
2685 caràcters perquè l'entrada tinga el format adequat per als
2686 diccionaris, i insereix les cadenes \texttt{\$cad\_LR, \$cad\_bil,
2687 \$cad\_RL} als diccionaris monolingüe origen, bilingüe i
2688 monolingüe meta respectivament (\texttt{\$fich\_LR, \$fich\_LRRL,
2689 \$fich\_RL}). Si es produeix algun tipus d'error en inserir
2690 l'entrada informa d'aquest fet amb una notificació per pantalla. Si
2691 \textit{insertarPro.php} havia estat cridat des d'un procediment de
2692 validació de paraules (\textit{\$valida=1}), aleshores insereix un
2693 botó "\textit{Continue}" per a seguir validant paraules. En cas
2694 contrari insereix un botó de tancar la finestra que ens permetrà
2695 acabar.
2696 \item \texttt{Eliminar: } En aquest cas, elimina l'entrada del fitxer d'entrades pendents de validar.
2697 \end{itemize}
2699 \subsubsection{ins\_multip.php}
2701 Realitza les mateixes operacions que \textit{insertarPro.php} però
2702 quan l'entrada a inserir és una unitat multi-paraula. La diferencia
2703 principal és que ara disposem de dues variables addicionals
2704 \texttt{\$LRcua} i \texttt{\$RLcua} que contenen la part invariable de
2705 la multi-paraula. Quan s'insereix l'entrada als diccionaris s'ha
2706 d'afegir aquesta cua al lloc convenient i convertir els espais en blanc
2707 per l'etiqueta de blanc \texttt{<b/>}.
2709 \subsubsection{insertar.php}
2711 La funció d'aquest mòdul és molt senzilla. Compon una cadena de text
2712 amb la informació provinent de \textit{selec.php} separada per
2713 tabuladors. Aquesta cadena conté tota la informació necessària per a
2714 generar una entrada al diccionari:
2716 \texttt{\$LRlem.\$RLlem.\$paradigmaLR.\$direccion.\$paradigmaRL.}
2719 \texttt{\$tipo.\$comentarios.\$user.\$geneLR.\$geneRL.}
2723 Aquesta entrada es guarda en un fitxer (\$fichSemi) que conté la cua
2724 amb les entrades pendents de validar inserides per usuaris no
2725 professionals. Quan un usuari considerat professional vulga validar
2726 entrades pendents, el mòdul \textit{valida.php} llegirà aquest mateix
2727 fitxer.
2730 \subsubsection{verSemi.php}
2731 S'encarrega de mostrar per pantalla el fitxer d'entrades pendents de
2732 validació, i ho fa així: llegeix el fitxer amb les entrades
2733 (\textit{\$fichSemi}) i entra en un bucle que recorre totes les
2734 entrades que es troben al fitxer. Per a cadascuna d'elles mostra un
2735 línia amb la següent informació:
2737 \texttt{\$LRlem
2738 \$paradigmaLR
2739 \$direccion
2740 \$RLlem}
2742 \texttt{\$paradigmaRL
2743 \$tipo
2744 \$comentarios}
2746 \subsection{Fitxers de diccionari}
2748 Els fitxers amb les entrades inserides des de el formulari es troben
2749 en \texttt{/dics}. Ací es troben dos tipus de fitxers:
2751 \begin{itemize}
2752 \item \texttt{apertium-ll-rr.xx.webform}: El fitxer que conté entrades
2753 en codi \texttt{XML} preparades per a ser copiades en els
2754 diccionaris finals. El fitxer te el format mostrat, sent
2755 \texttt{ll-rr} les inicials corresponents al traductor al que fa
2756 referència eixe fitxer i \texttt{xx} les inicials a la llengua del
2757 monolingüe al que fa referència o les inicials del bilingüe. Per
2758 exemple, les inicials del traductor espanyol-català són
2759 \texttt{es-ca}. Per aquest traductor tenim el monolingüe de espanyol
2760 (\texttt{es}), el de català (\texttt{ca}) i el bilingüe
2761 (\texttt{es-ca}) Així, en aquest directori tindrem els següents
2762 fitxers per al traductor espanyol-català:
2763 \begin{center}
2764 \texttt{apertium-es-ca.es.webform apertium-es-ca.ca.webform apertium-es-ca.es-ca.webform}
2765 \end{center}
2768 \item \texttt{oo-mm.semi.dic}: El fitxer que conté les entrades
2769 pendents de ser validades d'un determinat traductor. \texttt{oo-mm}
2770 són les inicials corresponents al traductor concret. Per exemple, el
2771 traductor espanyol-català tindrà aquest fitxer per al
2772 semi-professional: \texttt{es-ca.semi.dic}
2775 \end{itemize}
2777 \subsection{Fitxers de paradigmes}
2779 Els paradigmes utilitzats per a cada parell de llengües s'especifiquen
2780 en dos arxius de format \texttt{XML} anomenats
2781 \texttt{paradig.ll-rr.xx.xml} on \texttt{xx} són les inicials
2782 corresponents a una llengua i \texttt{ll-rr} les inicials
2783 corresponents a un parell de llengües. Aquests arxius estan formats per un
2784 conjunt d'entrades corresponents a paradigmes o models de flexió de les paraules
2785 d'una llengüa en concret. El fitxer \texttt{XML} es composa de les següents parts:
2786 \begin{itemize}
2787 \item Capçalera/Arrel del document d'especificació.\\
2788 \begin{alltt}
2789 <?xml version="1.0" encoding="ISO-8859-1"?>
2790 <?xml-stylesheet type="text/xsl" href="paradigmas.xsl"?>
2791 <!DOCTYPE form SYSTEM "form.dtd">
2792 <form lang="oc" langpair="oc-ca">
2793 \end{alltt}
2794 A l'atribut \textit{lang} estan les inicials de la llengua per a la
2795 qual estan especificant-se paradigmes i a l'atribut
2796 \textit{langpair} estan les inicials corresponents al parell de
2797 llengües del traductor a què correspon el fitxer. Cal que
2798 al mateix directori on estan els fitxers de paradigmes estiga
2799 \texttt{form.dtd} on s'especifica la DTD que segueixen aquests
2800 fitxers. Aquesta DTD està detallada a l'anexe \ref{ss:dtdparadigmes}.
2801 \item Un conjunt d'elements que defineixen els paradigmes. Per a
2802 explicar el format dels elements s'utilitzarà el següent exemple:
2804 \begin{alltt}
2805 <entry PoS="adj" nbr="sg_pl" gen="mf">
2806 <endings>
2807 <stem>amable</stem>
2808 <ending/>
2809 <ending>s</ending>
2810 </endings>
2811 <paradigms howmany="1">
2812 <par n="amable\_\_adj"/>
2813 </paradigms>
2814 </entry>
2815 \end{alltt}
2816 Cada paradigma està especificat en un element \texttt{<entry>}.
2817 Aquest element pot tenir tres atributs:
2818 \begin{itemize}
2819 \item \textit{PoS}: la categoria gramatical del paradigma. Pot
2820 prendre els valors: acr, adj, adv, noun, pname, pr, verb. Aquest
2821 és obligatori per a qualsevol categoria gramatical.
2822 \item \textit{nbr}: els nombres admesos pel paradigma. Pot tenir
2823 els valors: sg, pl, sg\_pl, sp.
2824 \item \textit{gen}: els gèneres admesos pel paradigma. Pot tenir
2825 els valors: m, f, m f, mf.
2826 \end {itemize}
2827 A més, està format per dos elements:
2828 \begin{itemize}
2829 \item \texttt{endings}: l'arrel i les terminacions utilitzades per a
2830 seleccionar el paradigma al formulari i mostrar els exemples de
2831 flexió.
2832 \item \texttt{paradigms}: especificació del paradigma o
2833 paradigmes que defineixen la flexió seguida per una entrada en concret.
2834 Necessita de l'atribut \textit{howmany} que indica el nombre de
2835 paradigmes que utilitza l'entrada. Per a cadascun dels
2836 paradigmes utilitzats hi ha una línia que especifica el nom del
2837 paradigma del diccionari, i que té el següent format:
2838 \begin{center}
2839 \begin{alltt}
2840 <par n="long\_\_adj"/>
2841 \end{alltt}
2842 \end{center}
2843 \end {itemize}
2844 \end {itemize}
2846 A partir del fitxer de paradigmes escrit en \texttt{XML}, s'han de
2847 generar els fitxers amb els que directament treballen els mòduls dels
2848 formularis. Si s'executa el script \texttt{/private/gen\_paradig.sh}
2849 el procés es realitza automàticament per a tots els parells de
2850 llengües de què disposem:
2851 \begin{alltt}
2852 # cd private
2853 # ./gen\_paradig.sh
2854 \end{alltt}
2855 Per a inserir un nou paradigma als formularis, cal
2856 preparar l'entrada corresponent al fitxer de paradigmes en format
2857 \texttt{XML} i després actualitzar els arxius de treball amb l'ordre
2858 anterior.
2860 El procés automatitzat també es pot realitzar de forma manual si no
2861 volem actualitzar els fitxers de tots els parells de llengües que
2862 tenim instal·lats. La generació manual dels arxius de
2863 treball, es fa amb un full d'estil \texttt{XSL} mitjançant
2864 aquesta ordre:
2865 \begin{alltt}
2866 # xsltproc paradigmas.xsl fitxer\_de\_paradigmes.xml
2867 | ./creaparadig.awk
2868 \end{alltt}
2870 Aquesta acció genera un fitxer de treball per a cada categoria
2871 gramatical. Els fitxers generats es troben en els directoris \texttt{/private/paradigmas.ll-rr}.
2872 Cada directori conté fitxers amb els paradigmes que es poden utilitzar
2873 per a cada parell de llengües \texttt{ll-rr} i per a cada component gramatical.
2874 Cadascun d'aquests directori conté els fitxers següents:
2875 \begin{itemize}
2876 \item \texttt{paradigacr\_xx}: paradigmes per acrònims de la llengua
2877 \texttt{xx}.
2878 \item \texttt{paradigadj\_xx}: paradigmes per adjectius de la llengua
2879 \texttt{xx}.
2880 \item \texttt{paradigadv\_xx}: paradigmes per adverbis de la llengua
2881 \texttt{xx}.
2882 \item \texttt{paradigcnjadv\_xx}: paradigmes per a conjuncions
2883 adverbials de la llengua \texttt{xx}.
2884 \item \texttt{paradigcnjcoo\_xx}: paradigmes per a conjuncions
2885 copulatives de la llengua \texttt{xx}.
2886 \item \texttt{paradigcnjsub\_xx}: paradigmes per a conjuncions
2887 subordinades de la llengua \texttt{xx}.
2888 \item \texttt{paradignoun\_xx}: paradigmes per a noms de la llengua
2889 \texttt{xx}.
2890 \item \texttt{paradigpname\_xx}: paradigmes per a noms propis de la
2891 llengua \texttt{xx}.
2892 \item \texttt{paradigpr\_xx}: paradigmes per a preposicions de la
2893 llengua \texttt{xx}.
2894 \item \texttt{paradigverb\_xx}: paradigmes per a verbs de la llengua
2895 \texttt{xx}.
2896 \end{itemize}
2898 Els fitxers estan composts per una entrada per línia. Cada entrada
2899 conté la informació següent:
2901 \begin{center}
2902 % use packages: array
2903 \begin{tabular}{lllll}
2904 \textit{exemples} & \textit{nombre de paradigmes} & \textit{paradigmes\_model} & \textit{(nombres)} & \textit{(gèneres)}
2905 \end{tabular}
2906 \end{center}
2909 El separador utilitzat per a les diferents parts de l'entrada es el
2910 tabulador.
2911 \begin{itemize}
2912 \item \textit{Exemples}: són les terminacions que s'utilitzaran per a
2913 generar els exemples quan escollim aquest paradigma com a prototip
2914 per a una determinada paraula a inserir.
2915 \item \textit{Nombre de paradigmes}: és el nombre de paradigmes del
2916 diccionari que s'utilitzaran per a flexionar adequadament aquest
2917 model de flexió en particular.
2918 \item \textit{Paradigmes model}: és el nom del paradigma o paradigmes
2919 que estan al diccionari i que són els que s'utilitzaran per a
2920 flexionar la nova entrada.
2921 \item \textit{(Nombres)}: Només es posa en el cas de noms, adjectius i
2922 acrònims. Fa referència al nombre del paradigma.
2923 \item \textit{(Gèneres)}: Només es posa en el cas de noms, adjectius i
2924 acrònims. Fa referència al gènere del paradigma.
2925 \end{itemize}
2927 Així per exemple, al traductor espanyol-català tindríem el directori \texttt{/private\-/paradigmas.es-ca}
2928 on trobaríem dos fitxers \texttt{XML}: \texttt{paradig.es-ca.es.xml}
2929 i \texttt{paradig.es-ca.ca.xml} amb l'especificació dels paradigmes
2930 utilitzats en cada llengua. A partir d'aquests fitxers es poden generar tots
2931 els fitxers de paradigmes per un parell de llengües concret amb l'ordre:
2932 \begin{alltt}
2933 # cd private/paradigmas.es-ca
2934 # xsltproc ../paradigmas.xsl paradig.es-ca.es.xml
2935 | ../creaparadig.awk
2936 # xsltproc ../paradigmas.xsl paradig.es-ca.ca.xml
2937 | ../creaparadig.awk
2938 \end{alltt}
2940 O bé, es poden generar automàticament per a tots els parells de llengües amb:
2941 \begin{alltt}
2942 # ./private/gen\_paradig.sh
2943 \end{alltt}
2945 Entre els fitxers de treball generats hi hauria un anomenat \texttt{paradigverb\_ca} que conté
2946 els possibles paradigmes de verbs per al català, on una possible línia seria la següent:
2948 \begin{center}
2949 \texttt{abra/çar /ço /ci 1 abalan/çar\_\_vblex}
2950 \end{center}
2952 que deriva de l'entrada en \texttt{XML}:
2954 \begin{alltt}
2955 <entry PoS="verb">
2956 <endings>
2957 <stem>abra</stem>
2958 <ending>çar</ending>
2959 <ending>ço</ending>
2960 <ending>ci</ending>
2961 </endings>
2962 <paradigms howmany="1">
2963 <par n="abalan/çar\_\_vblex"/>
2964 </paradigms>
2965 </entry>
2966 \end{alltt}
2968 \section{Utilització dels formularis}
2969 \label{ss:formus}
2970 \subsection{Introducció}
2972 Quan un usuari vulga inserir noves entrades a un diccionari ha de connectar-se mitjançant un client navegador a l'adreça on s'haja instal·lat el servidor de
2973 formularis, per exemple:
2974 \begin{center}
2975 \texttt{http://xixona.dlsi.ua.es/forms}
2976 \end{center}
2977 S'obrirà una pàgina web amb el portal d'entrada a \texttt{Opentrad\- Apertium\- Insertion\- Form}. En el marc de l'esquerra hi ha enllaços per a obtenir més \textit{informació} , \textit{descarregar} els programes i \textit{contacte} per a sol·licitar registrar-se com a usuari del sistema. Per a registrar-se com a usuari cal enviar un correu electrònic al webmaster encarregat dels formularis.
2979 Per a inserir noves paraules, s'omplirà el formulari amb les dades corresponents i polsarem el botó \textit{'Go On'}; en aquest moment cal autentificar-se com a usuari registrat o no deixarà continuar amb el procediment d'inserir paraules. Quan un usuari es registra pot ser registrat de dues formes, com a usuari professional o com a usuari no professional. Ambdós tenen unes habilitacions diferents i que s'explicaran en apartats següents.
2981 \subsection{Inserció d'entrades}
2983 \subsubsection{Usuari professional}
2985 Quan vulguem inserir una nova entrada als diccionaris cal que ens dirigim a l'apartat corresponent al parell de llengües que vulguem ampliar. Aleshores especifiquem el lema en llengua origen i en llengua meta i triem el tipus de categoria gramatical de les entrades que inserirem. Seguidament, polsem el botó \textit{'Go on'} per a seguir amb el procés d'inserció.
2987 En aquest punt apareix una nova finestra on mostra els lemes i uns paràmetres que caracteritzen la nova entrada al diccionari. Si l'entrada ja hi és en algun dels diccionaris, s'avisarà a l'usuari i el sistema automàticament escollirà sentit unidireccional (d'esquerra a dreta o a l'inrevés). Si no és en cap, triarà doble sentit de traducció. En aquesta nova finestra podem fer estes tres accions, si s'escau:
2988 \begin{itemize}
2989 \item Escollir el paradigma corresponent per al lema en llengua origen
2990 % i també en llengua meta (aquesta acció és obligatòria, la resta
2991 no).\footnote{Escollir el paradigma és un procés amb el que s'ha
2992 d'anar amb molta cura. Cal triar el paradigma exacte que descriu
2993 el comportament del lema que estem inserint. En el cas
2994 d'adjectius, noms i acrònims, cal escollir el paradigma que
2995 s'ajusti a la flexió desitjada i també als gèneres admesos. En el
2996 cas d'acrònims cal fixar-se en el gènere i nombre que admeteix
2997 cada paradigma dels que podem escollir; per exemple BBC serveix
2998 per a acrònims femenins singulars i SA per a acrònims femenins que
2999 admeteixen plural). En el cas de noms propis cal escollir el
3000 paradigma corresponent depenent de si es tracta d'un nom propi de
3001 cosa (un diari), de persona o de lloc.}
3002 \item Escollir la direcció de traducció de l'entrada si és diferent de
3003 la proposada automàticament.
3004 \item Afegir comentaris en l'entrada que quedaran al diccionari final.
3005 \end{itemize}
3007 Una vegada hem fet les operacions corresponents, polsem el botó
3008 \textit{'Go on'} si volem confirmar l'entrada o \textit{'Close'} si
3009 senzillament volem cancelar l'operació d'inserció.
3011 La següent i última pantalla que se'ns mostra conté les tres entrades
3012 en format \texttt{XML} generades per als diccionaris monolingüe
3013 llengua origen, bilingüe i monolingüe llengua meta. Aquestes entrades
3014 es mostren en tres finestres de text i es poden editar per si cal fer
3015 alguna modificació. Una vegada revisades les entrades, polsarem el
3016 botó \textit{'Insert'} per a inserir-les definitivament als
3017 diccionaris corresponents. També tenim la possibilitat de polsar el
3018 botó \textit{'Go back'} en cas que volguérem tornar al pas anterior.
3020 \subsubsection{Usuari no professional}
3022 Quan un usuari entra al sistema d'inserció com a usuari no
3023 professional, el procediment d'inserció de paraules és el mateix que
3024 per a l'usuari professional, però les entrades inserides no es guarden
3025 als diccionaris generats pels formularis sinó que queden en una cua
3026 d'entrades pendents de validació. Per inserir les paraules d'aquesta
3027 cua als diccionaris cal que un usuari professional les valide.
3029 \subsection{Validació d'entrades pendents d'aprovació}
3031 Els usuaris professionals, en la pantalla on s'escull el paradigma
3032 dels lemes inserits, tenen dos enllaços addicionals:
3033 \begin{itemize}
3034 \item \textit{See pairs to be validated}: Ací obrirem una finestra on
3035 podrem veure el contingut del fitxer amb les paraules que estan
3036 pendents de validació; paraules que hauran estat inserides per
3037 usuaris no professionals. Aquesta finestra és merament informativa i
3038 es tanca polsant el botó \textit{'Close'}.
3039 \item \textit{Validate pairs}: Aquesta opció permet a un usuari
3040 professional validar una a una les entrades pendents. Quan polsem
3041 este botó, s'obri la finestra de selecció de paradigmes que s'ha
3042 vist en l'apartat d'inserció de noves paraules. Esta finestra es
3043 mostra amb les dades que havia escollit l'usuari que havia afegit
3044 eixa entrada. Ara, l'usuari professional podrà modificar els lemes,
3045 esborrar l'entrada (botó \textit{'Delete'}) o seguir amb el procés
3046 d'inserció. Si segueix amb l'inserció de l'entrada, el procés és el
3047 mateix que en una inserció normal, sols que quan l'entrada queda
3048 definitivament afegida als diccionaris de formulari el control torna
3049 a mostrar la següent entrada a validar de la cua
3051 Aquest procés és repeteix fins que es validen totes les paraules de la cua o finalitzem el procés en polsar el botó \textit{'Close'}.
3053 \end {itemize}
3072 \newpage
3073 \appendix
3075 \chapter[DTDs de formats XML]{Definicions de tipus de document (DTD) en XML}
3076 \label{DTDs}
3078 \notavisible{Les DTDs de les seccions \ref{ss:dtdtransfer},
3079 \ref{ss:dtdinterchunk} i \ref{ss:dtdpostchunk} substitueixen la
3080 DTD del transfer d'Apertium. De la mateixa manera, la DTD del
3081 diccionari que es presenta en \ref{ss:dtddiccionario} substitueix l'antiga DTD del diccionari
3082 d'Apertium.}
3084 \section[DTD del mòdul prechunk]{DTD del mòdul de transferència
3085 estructural (pre\-chunk)}
3086 \label{ss:dtdtransfer}
3088 DTD per al format de les regles de transferència estructural. Aquesta
3089 definició ve amb el paquet \texttt{apertium} (versió 2.0) que es
3090 pot descarregar de \url{http://www.sourceforge.net}. La descripció dels
3091 diferents elements es troba en l'apartat \ref{formatotransfer}.
3093 \begin{small}
3094 \begin{alltt}
3095 <!\textsl{ENTITY} \% condition "(and|or|not|equal|begins-with|
3096 ends-with|contains-substring|in)">
3097 <!\textsl{ENTITY} \% container "(var|clip)">
3098 <!\textsl{ENTITY} \% sentence "(let|out|choose|modify-case|
3099 call-macro|append)">
3100 <!\textsl{ENTITY} \% value "(b|clip|lit|lit-tag|var|get-case-from|
3101 case-of|concat)">
3102 <!\textsl{ENTITY} \% stringvalue "(clip|lit|var|get-case-from|
3103 case-of)">
3105 <!\textsl{ELEMENT} \textbf{transfer} (section-def-cats,
3106 section-def-attrs,
3107 section-def-vars,
3108 section-def-lists?,
3109 section-def-macros?,
3110 section-rules)>
3112 <!\textsl{ATTLIST} transfer default (lu|chunk) \textsl{#IMPLIED}>
3114 <!\textsl{ELEMENT} \textbf{section-def-cats} (def-cat+)>
3116 <!\textsl{ELEMENT} \textbf{def-cat} (cat-item+)>
3117 <!\textsl{ATTLIST} def-cat n ID \textsl{#REQUIRED}>
3119 <!\textsl{ELEMENT} \textbf{cat-item} \textsl{EMPTY}>
3120 <!\textsl{ATTLIST} cat-item lemma CDATA \textsl{#IMPLIED}
3121 tags CDATA \textsl{#REQUIRED} >
3123 <!\textsl{ELEMENT} \textbf{section-def-attrs} (def-attr+)>
3125 <!\textsl{ELEMENT} \textbf{def-attr} (attr-item+)>
3126 <!\textsl{ATTLIST} def-attr n ID \textsl{#REQUIRED}>
3128 <!\textsl{ELEMENT} \textbf{attr-item} \textsl{EMPTY}>
3129 <!\textsl{ATTLIST} attr-item tags CDATA \textsl{#IMPLIED}>
3131 <!\textsl{ELEMENT} \textbf{section-def-vars} (def-var+)>
3133 <!\textsl{ELEMENT} \textbf{def-var} \textsl{EMPTY}>
3134 <!\textsl{ATTLIST} def-var n ID \textsl{#REQUIRED}>
3136 <!\textsl{ELEMENT} \textbf{section-def-lists} (def-list)+>
3138 <!\textsl{ELEMENT} \textbf{def-list} (list-item+)>
3139 <!\textsl{ATTLIST} def-list n ID \textsl{#REQUIRED}>
3141 <!\textsl{ELEMENT} \textbf{list-item} \textsl{EMPTY}>
3142 <!\textsl{ATTLIST} list-item v CDATA \textsl{#REQUIRED}>
3144 <!\textsl{ELEMENT} \textbf{section-def-macros} (def-macro)+>
3146 <!\textsl{ELEMENT} \textbf{def-macro} (\%sentence;)+>
3147 <!\textsl{ATTLIST} def-macro n ID \textsl{#REQUIRED}>
3148 <!\textsl{ATTLIST} def-macro npar CDATA \textsl{#REQUIRED}>
3150 <!\textsl{ELEMENT} \textbf{section-rules} (rule+)>
3152 <!\textsl{ELEMENT} \textbf{rule} (pattern, action)>
3153 <!\textsl{ATTLIST} rule comment CDATA \textsl{#IMPLIED}>
3155 <!\textsl{ELEMENT} \textbf{pattern} (pattern-item+)>
3157 <!\textsl{ELEMENT} \textbf{pattern-item} \textsl{EMPTY}>
3158 <!\textsl{ATTLIST} pattern-item n \textsl{IDREF} \textsl{#REQUIRED}>
3160 <!\textsl{ELEMENT} \textbf{action} (\%sentence;)*>
3162 <!\textsl{ELEMENT} \textbf{choose} (when+,otherwise?)>
3164 <!\textsl{ELEMENT} \textbf{when} (test,(\%sentence;)*)>
3166 <!\textsl{ELEMENT} \textbf{otherwise} (\%sentence;)+>
3168 <!\textsl{ELEMENT} \textbf{test} (\%condition;)+>
3170 <!\textsl{ELEMENT} \textbf{and} ((\%condition;),(\%condition;)+)>
3172 <!\textsl{ELEMENT} \textbf{or} ((\%condition;),(\%condition;)+)>
3174 <!\textsl{ELEMENT} \textbf{not} (\%condition;)>
3176 <!\textsl{ELEMENT} \textbf{equal} (\%value;,\%value;)>
3177 <!\textsl{ATTLIST} equal caseless (no|yes) \textsl{#IMPLIED}>
3179 <!\textsl{ELEMENT} \textbf{begins-with} (\%value;,\%value;)>
3180 <!\textsl{ATTLIST} begins-with caseless (no|yes) \textsl{#IMPLIED}>
3182 <!\textsl{ELEMENT} \textbf{ends-with} (\%value;,\%value;)>
3183 <!\textsl{ATTLIST} ends-with caseless (no|yes) \textsl{#IMPLIED}>
3185 <!\textsl{ELEMENT} \textbf{contains-substring} (\%value;,\%value;)>
3186 <!\textsl{ATTLIST} contains-substring caseless (no|yes) \textsl{#IMPLIED}>
3188 <!\textsl{ELEMENT} \textbf{in} (\%value;, list)>
3189 <!\textsl{ATTLIST} in caseless (no|yes) \textsl{#IMPLIED}>
3191 <!\textsl{ELEMENT} \textbf{list} \textsl{EMPTY}>
3192 <!\textsl{ATTLIST} list n \textsl{IDREF} \textsl{#REQUIRED}>
3194 <!\textsl{ELEMENT} \textbf{let} (\%container;, \%value;)>
3196 <!\textsl{ELEMENT} \textbf{append} (\%value;)+>
3197 <!\textsl{ATTLIST} append n \textsl{IDREF} \textsl{#REQUIRED}>
3199 <!\textsl{ELEMENT} \textbf{out} (mlu|lu|b|chunk)+>
3201 <!\textsl{ELEMENT} \textbf{modify-case} (\%container;, \%stringvalue;)>
3203 <!\textsl{ELEMENT} \textbf{call-macro} (with-param)*>
3204 <!\textsl{ATTLIST} call-macro n \textsl{IDREF} \textsl{#REQUIRED}>
3206 <!\textsl{ELEMENT} \textbf{with-param} \textsl{EMPTY}>
3207 <!\textsl{ATTLIST} with-param pos CDATA \textsl{#REQUIRED}>
3209 <!\textsl{ELEMENT} \textbf{clip} \textsl{EMPTY}>
3210 <!\textsl{ATTLIST} clip pos CDATA \textsl{#REQUIRED}
3211 side (sl|tl) \textsl{#REQUIRED}
3212 part CDATA \textsl{#REQUIRED}
3213 queue CDATA \textsl{#IMPLIED}
3214 link-to CDATA \textsl{#IMPLIED}>
3216 <!\textsl{ELEMENT} \textbf{lit} \textsl{EMPTY}>
3217 <!\textsl{ATTLIST} lit v CDATA \textsl{#REQUIRED}>
3219 <!\textsl{ELEMENT} \textbf{lit-tag} \textsl{EMPTY}>
3220 <!\textsl{ATTLIST} lit-tag v CDATA \textsl{#REQUIRED}>
3222 <!\textsl{ELEMENT} \textbf{var} \textsl{EMPTY}>
3223 <!\textsl{ATTLIST} var n \textsl{IDREF} \textsl{#REQUIRED}>
3225 <!\textsl{ELEMENT} \textbf{get-case-from} (clip|lit|var)>
3226 <!\textsl{ATTLIST} get-case-from pos CDATA \textsl{#REQUIRED}>
3228 <!\textsl{ELEMENT} \textbf{case-of} \textsl{EMPTY}>
3229 <!\textsl{ATTLIST} case-of pos CDATA \textsl{#REQUIRED}
3230 side (sl|tl) \textsl{#REQUIRED}
3231 part CDATA \textsl{#REQUIRED}>
3233 <!\textsl{ELEMENT} \textbf{concat} (\%value;)+>
3235 <!\textsl{ELEMENT} \textbf{mlu} (lu+)>
3237 <!\textsl{ELEMENT} \textbf{lu} (\%value;)+>
3239 <!\textsl{ELEMENT} \textbf{chunk} (tags,(mlu|lu|b)+)>
3240 <!\textsl{ATTLIST} chunk name CDATA \textsl{#IMPLIED}
3241 namefrom CDATA \textsl{#IMPLIED}
3242 case CDATA \textsl{#IMPLIED}>
3244 <!\textsl{ELEMENT} \textbf{tags} (tag+)>
3245 <!\textsl{ELEMENT} \textbf{tag} (\%value;)>
3247 <!\textsl{ELEMENT} \textbf{b} \textsl{EMPTY}>
3248 <!\textsl{ATTLIST} b pos CDATA \textsl{#IMPLIED}>
3250 \end{alltt}
3251 \end{small}
3253 \newpage
3254 \section{DTD del mòdul interchunk}
3255 \label{ss:dtdinterchunk}
3257 DTD per al format de les regles de transferència estructural del mòdul
3258 interchunk. Aquesta definició ve amb el paquet \texttt{apertium}
3259 (última versió) que es pot descarregar de
3260 \url{http://www.sourceforge.net}. La descripció dels diferents
3261 elements es troba en l'apartat \ref{formatotransfer}.
3263 \begin{small}
3264 \begin{alltt}
3266 <!\textsl{ENTITY} \% condition "(and|or|not|equal|begins-with|
3267 ends-with|contains-substring|in)">
3268 <!\textsl{ENTITY} \% container "(var|clip)">
3269 <!\textsl{ENTITY} \% sentence "(let|out|choose|modify-case|
3270 call-macro|append)">
3271 <!\textsl{ENTITY} \% value "(b|clip|lit|lit-tag|var|get-case-from|
3272 case-of|concat)">
3273 <!\textsl{ENTITY} \% stringvalue "(clip|lit|var|get-case-from|
3274 case-of)">
3276 <!\textsl{ELEMENT} \textbf{interchunk} (section-def-cats,
3277 section-def-attrs,
3278 section-def-vars,
3279 section-def-lists?,
3280 section-def-macros?,
3281 section-rules)>
3283 <!\textsl{ELEMENT} \textbf{section-def-cats} (def-cat+)>
3285 <!\textsl{ELEMENT} \textbf{def-cat} (cat-item+)>
3286 <!\textsl{ATTLIST} def-cat n ID \textsl{#REQUIRED}>
3288 <!\textsl{ELEMENT} \textbf{cat-item} \textsl{EMPTY}>
3289 <!\textsl{ATTLIST} cat-item lemma CDATA \textsl{#IMPLIED}
3290 tags CDATA \textsl{#REQUIRED} >
3292 <!\textsl{ELEMENT} \textbf{section-def-attrs} (def-attr+)>
3294 <!\textsl{ELEMENT} \textbf{def-attr} (attr-item+)>
3295 <!\textsl{ATTLIST} def-attr n ID \textsl{#REQUIRED}>
3297 <!\textsl{ELEMENT} \textbf{attr-item} \textsl{EMPTY}>
3298 <!\textsl{ATTLIST} attr-item tags CDATA \textsl{#IMPLIED}>
3300 <!\textsl{ELEMENT} \textbf{section-def-vars} (def-var+)>
3302 <!\textsl{ELEMENT} \textbf{def-var} \textsl{EMPTY}>
3303 <!\textsl{ATTLIST} def-var n ID \textsl{#REQUIRED}>
3305 <!\textsl{ELEMENT} \textbf{section-def-lists} (def-list)+>
3307 <!\textsl{ELEMENT} \textbf{def-list} (list-item+)>
3308 <!\textsl{ATTLIST} def-list n ID \textsl{#REQUIRED}>
3310 <!\textsl{ELEMENT} \textbf{list-item} \textsl{EMPTY}>
3311 <!\textsl{ATTLIST} list-item v CDATA \textsl{#REQUIRED}>
3313 <!\textsl{ELEMENT} \textbf{section-def-macros} (def-macro)+>
3315 <!\textsl{ELEMENT} \textbf{def-macro} (\%sentence;)+>
3316 <!\textsl{ATTLIST} def-macro n ID \textsl{#REQUIRED}>
3317 <!\textsl{ATTLIST} def-macro npar CDATA \textsl{#REQUIRED}>
3319 <!\textsl{ELEMENT} \textbf{section-rules} (rule+)>
3321 <!\textsl{ELEMENT} \textbf{rule} (pattern, action)>
3322 <!\textsl{ATTLIST} rule comment CDATA \textsl{#IMPLIED}>
3324 <!\textsl{ELEMENT} \textbf{pattern} (pattern-item+)>
3326 <!\textsl{ELEMENT} \textbf{pattern-item} \textsl{EMPTY}>
3327 <!\textsl{ATTLIST} pattern-item n \textsl{IDREF} \textsl{#REQUIRED}>
3329 <!\textsl{ELEMENT} \textbf{action} (\%sentence;)*>
3331 <!\textsl{ELEMENT} \textbf{choose} (when+,otherwise?)>
3333 <!\textsl{ELEMENT} \textbf{when} (test,(\%sentence;)*)>
3335 <!\textsl{ELEMENT} \textbf{otherwise} (\%sentence;)+>
3337 <!\textsl{ELEMENT} \textbf{test} (\%condition;)+>
3339 <!\textsl{ELEMENT} \textbf{and} ((\%condition;),(\%condition;)+)>
3341 <!\textsl{ELEMENT} \textbf{or} ((\%condition;),(\%condition;)+)>
3343 <!\textsl{ELEMENT} \textbf{not} (\%condition;)>
3345 <!\textsl{ELEMENT} \textbf{equal} (\%value;,\%value;)>
3346 <!\textsl{ATTLIST} equal caseless (no|yes) \textsl{#IMPLIED}>
3348 <!\textsl{ELEMENT} \textbf{begins-with} (\%value;,\%value;)>
3349 <!\textsl{ATTLIST} begins-with caseless (no|yes) \textsl{#IMPLIED}>
3351 <!\textsl{ELEMENT} \textbf{ends-with} (\%value;,\%value;)>
3352 <!\textsl{ATTLIST} ends-with caseless (no|yes) \textsl{#IMPLIED}>
3354 <!\textsl{ELEMENT} \textbf{contains-substring} (\%value;,\%value;)>
3355 <!\textsl{ATTLIST} contains-substring caseless (no|yes) \textsl{#IMPLIED}>
3357 <!\textsl{ELEMENT} \textbf{in} (\%value;, list)>
3358 <!\textsl{ATTLIST} in caseless (no|yes) \textsl{#IMPLIED}>
3360 <!\textsl{ELEMENT} \textbf{list} \textsl{EMPTY}>
3361 <!\textsl{ATTLIST} list n \textsl{IDREF} \textsl{#REQUIRED}>
3363 <!\textsl{ELEMENT} \textbf{let} (\%container;, \%value;)>
3365 <!\textsl{ELEMENT} \textbf{append} (\%value;)+>
3366 <!\textsl{ATTLIST} append n \textsl{IDREF} \textsl{#REQUIRED}>
3368 <!\textsl{ELEMENT} \textbf{out} (b|chunk)+>
3370 <!\textsl{ELEMENT} \textbf{modify-case} (\%container;, \%stringvalue;)>
3372 <!\textsl{ELEMENT} \textbf{call-macro} (with-param)*>
3373 <!\textsl{ATTLIST} call-macro n \textsl{IDREF} \textsl{#REQUIRED}>
3375 <!\textsl{ELEMENT} \textbf{with-param} \textsl{EMPTY}>
3376 <!\textsl{ATTLIST} with-param pos CDATA \textsl{#REQUIRED}>
3378 <!\textsl{ELEMENT} \textbf{clip} \textsl{EMPTY}>
3379 <!\textsl{ATTLIST} clip pos CDATA \textsl{#REQUIRED}
3380 part CDATA \textsl{#REQUIRED}>
3382 <!\textsl{ELEMENT} \textbf{lit} \textsl{EMPTY}>
3383 <!\textsl{ATTLIST} lit v CDATA \textsl{#REQUIRED}>
3385 <!\textsl{ELEMENT} \textbf{lit-tag} \textsl{EMPTY}>
3386 <!\textsl{ATTLIST} lit-tag v CDATA \textsl{#REQUIRED}>
3388 <!\textsl{ELEMENT} \textbf{var} \textsl{EMPTY}>
3389 <!\textsl{ATTLIST} var n \textsl{IDREF} \textsl{#REQUIRED}>
3391 <!\textsl{ELEMENT} \textbf{get-case-from} (clip|lit|var)>
3392 <!\textsl{ATTLIST} get-case-from pos CDATA \textsl{#REQUIRED}>
3394 <!\textsl{ELEMENT} \textbf{case-of} \textsl{EMPTY}>
3395 <!\textsl{ATTLIST} case-of pos CDATA \textsl{#REQUIRED}
3396 part CDATA \textsl{#REQUIRED}>
3398 <!\textsl{ELEMENT} \textbf{concat} (\%value;)+>
3400 <!\textsl{ELEMENT} \textbf{chunk} (\%value;)+>
3402 <!\textsl{ELEMENT} \textbf{pseudolemma} (\%value;)>
3404 <!\textsl{ELEMENT} \textbf{b} \textsl{EMPTY}>
3405 <!\textsl{ATTLIST} b pos CDATA \textsl{#IMPLIED}>
3407 \end{alltt}
3408 \end{small}
3410 \newpage
3411 \section{DTD del mòdul postchunk}
3412 \label{ss:dtdpostchunk}
3414 DTD per al format de les regles de transferència estructural del mòdul
3415 postchunk. Aquesta definició ve amb el paquet \texttt{apertium}
3416 (última versió) que es pot descarregar de
3417 \url{http://www.sourceforge.net}. La descripció dels diferents
3418 elements es troba en l'apartat \ref{formatotransfer}.
3420 \begin{small}
3421 \begin{alltt}
3422 <!\textsl{ENTITY} \% condition "(and|or|not|equal|begins-with|
3423 ends-with|contains-substring|in)">
3424 <!\textsl{ENTITY} \% container "(var|clip)">
3425 <!\textsl{ENTITY} \% sentence "(let|out|choose|modify-case|
3426 call-macro|append)">
3427 <!\textsl{ENTITY} \% value "(b|clip|lit|lit-tag|var|get-case-from|
3428 case-of|concat)">
3429 <!\textsl{ENTITY} \% stringvalue "(clip|lit|var|get-case-from|
3430 case-of)">
3432 <!\textsl{ELEMENT} \textbf{postchunk} (section-def-cats,
3433 section-def-attrs,
3434 section-def-vars,
3435 section-def-lists?,
3436 section-def-macros?,
3437 section-rules)>
3439 <!\textsl{ELEMENT} \textbf{section-def-cats} (def-cat+)>
3441 <!\textsl{ELEMENT} \textbf{def-cat} (cat-item+)>
3442 <!\textsl{ATTLIST} def-cat n ID \textsl{#REQUIRED}>
3444 <!\textsl{ELEMENT} \textbf{cat-item} \textsl{EMPTY}>
3445 <!\textsl{ATTLIST} cat-item name CDATA \textsl{#REQUIRED}>
3447 <!\textsl{ELEMENT} \textbf{section-def-attrs} (def-attr+)>
3449 <!\textsl{ELEMENT} \textbf{def-attr} (attr-item+)>
3450 <!\textsl{ATTLIST} def-attr n ID \textsl{#REQUIRED}>
3452 <!\textsl{ELEMENT} \textbf{attr-item} \textsl{EMPTY}>
3453 <!\textsl{ATTLIST} attr-item tags CDATA \textsl{#IMPLIED}>
3455 <!\textsl{ELEMENT} \textbf{section-def-vars} (def-var+)>
3457 <!\textsl{ELEMENT} \textbf{def-var} \textsl{EMPTY}>
3458 <!\textsl{ATTLIST} def-var n ID \textsl{#REQUIRED}>
3460 <!\textsl{ELEMENT} \textbf{section-def-lists} (def-list)+>
3462 <!\textsl{ELEMENT} \textbf{def-list} (list-item+)>
3463 <!\textsl{ATTLIST} def-list n ID \textsl{#REQUIRED}>
3465 <!\textsl{ELEMENT} \textbf{list-item} \textsl{EMPTY}>
3466 <!\textsl{ATTLIST} list-item v CDATA \textsl{#REQUIRED}>
3468 <!\textsl{ELEMENT} \textbf{section-def-macros} (def-macro)+>
3470 <!\textsl{ELEMENT} \textbf{def-macro} (\%sentence;)+>
3471 <!\textsl{ATTLIST} def-macro n ID \textsl{#REQUIRED}>
3472 <!\textsl{ATTLIST} def-macro npar CDATA \textsl{#REQUIRED}>
3474 <!\textsl{ELEMENT} \textbf{section-rules} (rule+)>
3476 <!\textsl{ELEMENT} \textbf{rule} (pattern, action)>
3477 <!\textsl{ATTLIST} rule comment CDATA \textsl{#IMPLIED}>
3479 <!\textsl{ELEMENT} \textbf{pattern} (pattern-item+)>
3481 <!\textsl{ELEMENT} \textbf{pattern-item} \textsl{EMPTY}>
3482 <!\textsl{ATTLIST} pattern-item n \textsl{IDREF} \textsl{#REQUIRED}>
3484 <!\textsl{ELEMENT} \textbf{action} (\%sentence;)*>
3486 <!\textsl{ELEMENT} \textbf{choose} (when+,otherwise?)>
3488 <!\textsl{ELEMENT} \textbf{when} (test,(\%sentence;)*)>
3490 <!\textsl{ELEMENT} \textbf{otherwise} (\%sentence;)+>
3492 <!\textsl{ELEMENT} \textbf{test} (\%condition;)+>
3494 <!\textsl{ELEMENT} \textbf{and} ((\%condition;),(\%condition;)+)>
3496 <!\textsl{ELEMENT} \textbf{or} ((\%condition;),(\%condition;)+)>
3498 <!\textsl{ELEMENT} \textbf{not} (\%condition;)>
3500 <!\textsl{ELEMENT} \textbf{equal} (\%value;,\%value;)>
3501 <!\textsl{ATTLIST} equal caseless (no|yes) \textsl{#IMPLIED}>
3503 <!\textsl{ELEMENT} \textbf{begins-with} (\%value;,\%value;)>
3504 <!\textsl{ATTLIST} begins-with caseless (no|yes) \textsl{#IMPLIED}>
3506 <!\textsl{ELEMENT} \textbf{ends-with} (\%value;,\%value;)>
3507 <!\textsl{ATTLIST} ends-with caseless (no|yes) \textsl{#IMPLIED}>
3509 <!\textsl{ELEMENT} \textbf{contains-substring} (\%value;,\%value;)>
3510 <!\textsl{ATTLIST} contains-substring caseless (no|yes) \textsl{#IMPLIED}>
3512 <!\textsl{ELEMENT} \textbf{in} (\%value;, list)>
3513 <!\textsl{ATTLIST} in caseless (no|yes) \textsl{#IMPLIED}>
3515 <!\textsl{ELEMENT} \textbf{list} \textsl{EMPTY}>
3516 <!\textsl{ATTLIST} list n \textsl{IDREF} \textsl{#REQUIRED}>
3518 <!\textsl{ELEMENT} \textbf{let} (\%container;, \%value;)>
3520 <!\textsl{ELEMENT} \textbf{append} (\%value;)+>
3521 <!\textsl{ATTLIST} append n \textsl{IDREF} \textsl{#REQUIRED}>
3523 <!\textsl{ELEMENT} \textbf{out} (b|lu|mlu)+>
3525 <!\textsl{ELEMENT} \textbf{modify-case} (\%container;, \%stringvalue;)>
3527 <!\textsl{ELEMENT} \textbf{call-macro} (with-param)*>
3528 <!\textsl{ATTLIST} call-macro n \textsl{IDREF} \textsl{#REQUIRED}>
3530 <!\textsl{ELEMENT} \textbf{with-param} \textsl{EMPTY}>
3531 <!\textsl{ATTLIST} with-param pos CDATA \textsl{#REQUIRED}>
3533 <!\textsl{ELEMENT} \textbf{clip} \textsl{EMPTY}>
3534 <!\textsl{ATTLIST} clip pos CDATA \textsl{#REQUIRED}
3535 part CDATA \textsl{#REQUIRED}>
3537 <!\textsl{ELEMENT} \textbf{lit} \textsl{EMPTY}>
3538 <!\textsl{ATTLIST} lit v CDATA \textsl{#REQUIRED}>
3540 <!\textsl{ELEMENT} \textbf{lit-tag} \textsl{EMPTY}>
3541 <!\textsl{ATTLIST} lit-tag v CDATA \textsl{#REQUIRED}>
3543 <!\textsl{ELEMENT} \textbf{var} \textsl{EMPTY}>
3544 <!\textsl{ATTLIST} var n \textsl{IDREF} \textsl{#REQUIRED}>
3546 <!\textsl{ELEMENT} \textbf{get-case-from} (clip|lit|var)>
3547 <!\textsl{ATTLIST} get-case-from pos CDATA \textsl{#REQUIRED}>
3549 <!\textsl{ELEMENT} \textbf{case-of} \textsl{EMPTY}>
3550 <!\textsl{ATTLIST} case-of pos CDATA \textsl{#REQUIRED}
3551 part CDATA \textsl{#REQUIRED}>
3553 <!\textsl{ELEMENT} \textbf{concat} (\%value;)+>
3555 <!\textsl{ELEMENT} \textbf{mlu} (lu+)>
3557 <!\textsl{ELEMENT} \textbf{lu} (\%value;)+>
3559 <!\textsl{ELEMENT} \textbf{b} \textsl{EMPTY}>
3560 <!\textsl{ATTLIST} b pos CDATA \textsl{#IMPLIED}>
3562 \end{alltt}
3563 \end{small}
3565 \newpage
3566 \section{DTD del format dels diccionaris}
3567 \label{ss:dtddiccionario}
3569 DTD per al format dels diccionari. Aquesta definició ve amb el paquet
3570 \texttt{apertium} i amb el paquet \texttt{lttoolbox}.
3572 \begin{small}
3573 \begin{alltt}
3574 <!\textsl{ELEMENT} \textbf{dictionary} (alphabet?, sdefs?,
3575 pardefs?, section+)>
3577 <!\textsl{ELEMENT} \textbf{alphabet} (\textsl{#PCDATA})>
3579 <!\textsl{ELEMENT} \textbf{sdefs} (sdef+)>
3581 <!\textsl{ELEMENT} \textbf{sdef} \textsl{EMPTY}>
3582 <!\textsl{ATTLIST} sdef n ID \textsl{#REQUIRED}>
3584 <!\textsl{ELEMENT} \textbf{pardefs} (pardef+)>
3586 <!\textsl{ELEMENT} \textbf{pardef} (e+)>
3587 <!\textsl{ATTLIST} pardef n CDATA \textsl{#REQUIRED}>
3589 <!\textsl{ELEMENT} \textbf{section} (e+)>
3591 <!\textsl{ATTLIST} section id ID \textsl{#REQUIRED}
3592 type (standard|inconditional|postblank) \textsl{#REQUIRED}>
3594 <!\textsl{ELEMENT} \textbf{e} (i | p | par | re)+>
3595 <!\textsl{ATTLIST} e r (LR|RL) \textsl{#IMPLIED}
3596 lm CDATA \textsl{#IMPLIED}
3597 a CDATA \textsl{#IMPLIED}
3598 c CDATA \textsl{#IMPLIED}
3600 <!\textsl{ELEMENT} \textbf{par} \textsl{EMPTY}>
3601 <!\textsl{ATTLIST} par n CDATA \textsl{#REQUIRED}>
3603 <!\textsl{ELEMENT} \textbf{i} (\textsl{#PCDATA} | b | s | g | j | a)*>
3605 <!\textsl{ELEMENT} \textbf{re} (\textsl{#PCDATA})>
3607 <!\textsl{ELEMENT} \textbf{p} (l, r)>
3609 <!\textsl{ELEMENT} \textbf{l} (\textsl{#PCDATA} | a | b | g | j | s)*>
3611 <!\textsl{ELEMENT} \textbf{r} (\textsl{#PCDATA} | a | b | g | j | s)*>
3613 <!\textsl{ELEMENT} \textbf{a} \textsl{EMPTY}>
3615 <!\textsl{ELEMENT} \textbf{b} \textsl{EMPTY}>
3617 <!\textsl{ELEMENT} \textbf{g} (\textsl{#PCDATA} | a | b | j | s)*>
3618 <!\textsl{ATTLIST} g i CDATA \textsl{#IMPLIED}>
3620 <!\textsl{ELEMENT} \textbf{j} \textsl{EMPTY}>
3622 <!\textsl{ELEMENT} \textbf{s} \textsl{EMPTY}>
3624 <!\textsl{ATTLIST} s n \textsl{IDREF} \textsl{#REQUIRED}>
3626 \end{alltt}
3627 \end{small}
3630 \newpage
3631 \section{DTD dels paradigmes del formulari}
3632 \label{ss:dtdparadigmes}
3634 DTD per al format dels fitxers de paradigmes que utilitza l'eina de formularis. Aquesta definició ve amb el paquet
3635 \texttt{apertium-lexical-webform}.
3637 \begin{small}
3638 \begin{alltt}
3641 <!\textsl{ELEMENT} \textbf{form} (entry)+>
3643 <!\textsl{ATTLIST} \textbf{form}
3644 lang CDATA \textsl{#REQUIRED}
3645 langpair CDATA \textsl{#REQUIRED}>
3647 <!\textsl{ELEMENT} \textbf{entry} (endings, paradigms)+>
3649 <!\textsl{ATTLIST} \textbf{entry}
3650 PoS CDATA \textsl{#REQUIRED}
3651 nbr CDATA \textsl{#IMPLIED}
3652 gen CDATA \textsl{#IMPLIED}>
3654 <!\textsl{ELEMENT} \textbf{endings} (stem, ending+)>
3656 <!\textsl{ELEMENT} \textbf{stem} (\textsl{#PCDATA})>
3658 <!\textsl{ELEMENT} \textbf{ending} (\textsl{#PCDATA})>
3660 <!\textsl{ELEMENT} \textbf{paradigms} (par+)>
3662 <!\textsl{ATTLIST} \textbf{paradigms} howmany CDATA \textsl{#REQUIRED}>
3664 <!\textsl{ELEMENT} \textbf{par} \textsl{EMPTY}>
3666 <!\textsl{ATTLIST} \textbf{par} n CDATA \textsl{#REQUIRED}>
3670 \end{alltt}
3671 \end{small}
3676 \end{document}