Support du format d'un document

From Apertium
Jump to navigation Jump to search

In English

Le support du format dans Apertium est réalisé par des programmes spéciaux pour encapsuler et dé-encapsuler les informations de formatage dans des "superblancs", qui sont délimités par les caractères [ et ]. Donc par exemple, pour traiter le HTML, le programme apertium-deshtml encapsule les informations de formatage, alors que apertium-rehtml les dé-encapsule (restaure), comme dans l'exemple suivant :

$ echo "<em>C'est</em> un <b>test</b>" | apertium-deshtml
[<em>]C'est[<\/em> ]un[ <b>]test.[][<\/b>]

$ echo "<em>C'est</em> un <b>test</b>" | apertium-deshtml | apertium-rehtml
<em>C'est</em> un <b>test</b>

Formats officiellement supportés par Apertium[edit]

Pour l'instant, des dé-formateurs et re-formateurs sont disponibles dans le paquet Apertium pour :

  • texte simple (apertium-destxt)
  • HTML (apertium-deshtml)
  • RTF (apertium-desrtf)
  • OpenOffice.org Writer ODT (apertium-desodt)
  • Microsoft Word DOCX, WXML (apertium-deswxml)
  • Microsoft Powerpoint PPTX (apertium-despptx)
  • Microsoft Excel XLSX (apertium-desxlsx)
  • QuarkXPress XpressTag (apertium-desxpresstag)
  • MediaWiki (apertium-desmediawiki -- encore en développement, voir Traduction des documents wikimedia)

Il n'y a pour l'instant aucune construction supportant les fichiers gettext .po ou les formats de sous-titres, mais voir Traduction des fichiers gettext et Traduction des sous titres pour des très solutions simples.

Note: apertium-destxt ajoute un point avant chaque changement de ligne qui n'est pas suivi de texte, ce qui fait que vous pouvez avoir quelquefois deux points.

Formats supportés dans des paquets séparés[edit]

D'autres dé-formateurs et re-formateurs ont été écrits directement en langage C ou C++ sans faire appel à des fichiers XML. Ils ne respectent donc pas les spécification de format décrites à partir du chapitre suivant. De ce fait, ils sont diffusés dans des paquets séparés.

  • apertium-mediawiki est un paquet développé en C++ qui gère le format des documents wikimedia avec un meilleur support des liens.
  • apertium-c-formatters est un paquet développé en C qui gère les format des :

Spécification de format[edit]

Ce paragraphe et les suivants concernent uniquement les formats officiellement supportés par Apertium.

Cette section décrit comment le dé-formateur et le re-formateur sont générés depuis la spécification du format en XML. Les règles pour le format, comme les données linguistiques, sont spécifiées en XML, et elles contiennent des expressions régulières avec la syntaxe flex. La spécification est divisée en trois parties (voir sa DTD dans l'Appendice A.6):

  • Options de configuration. Ici on spécifie la valeur pour la longueur maximale d'un superblanc non-extensif, les encodages d'entrée et sortie, si on doit prendre considération la casse des caractères, et les expressions régulières pour les caractères d'échappements et les espaces.
  • Règles de format. Décrit l'ensemble de balises appartenant à un format spécifique qui doit être inclus dans un bloc de format par le dé-formateur. Ces balises peuvent, optionellement, indiquer une fin de phrase, auquel cas le dé-formateur ajoutera une marque de ponctuation artificielle (suivie d'un bloc de format vide, comme expliqué dans la section précédente). On doit spécifier la priorité d'application de ces règles, toutefois, quand ce n'est pas pertinent, il est possible de donner la même priorité à toutes les règles en leur assignant la même valeur (n'importe quel nombre). Tout ce qui n'est pas spécifié comme format sera laissé sans encapsulation et, par conséquent, sera considéré comme du texte traduisible.
  • Règles de remplacement. Permet de remplacer les caractères spéciaux dans le texte. Une expression régulière va reconnaître un ensemble de caractères spéciaux, et va le remplacer par les caractères spécifiés. Par exemple, en HTML, les caractères exprimés en hexadécimal doivent être replacés par l'entité correspondante ou le caractère ASCII. Par exemple, carr&eacute;s correspond à carrés.

Racine du fichier de spécification[edit]

L'attribut name contient le nom du format.

<?xml version="1.0" encoding="UTF-8"?>
<format name="html">
  <options>
    ...
  </options>
  <rules>
    ...
  </rules>
</format>

Il doit comprendre les options et les règles, un exemple est présenté plus loin.

Options[edit]

L'élément <largeblocks> spécifie la longueur maximale d'un superblanc non-extensif, par la valeur de l'attribut size. Les éléments <input> et <output> spécifient les encodages d'entrée et sortie du texte, à travers l'attribut encoding. L'élément escape-chars spécifie, au moyen d'une expression régulière déclarée dans la valeur de l'attribut regexp, quels caractères doivent être échappés avec un backslash. L'élément <space-chars> spécifie l'ensemble des caractères qui doivent être considérés comme des blancs. Finalement, l'élément case-sensitive spécifie si la casse des caractères est significative dans les spécifications des attributs de format dans lesquels figurent des expression régulières.

Exemple
  <options>
    <largeblocks size="8192"/>
    <input encoding="UTF-8"/>
    <output encoding="UTF-8"/>
    <escape-chars regexp=’[\[\]ˆ$\\]’/>
    <space-chars regexp=’[ \n\t\r]’/>
    <case-sensitive value="no"/>
  </options>

Règles[edit]

Il y a des règles de format et des règles de remplacement.

  <rules>
    <format-rule ... >
      ...
    </format-rule>
      ... 
    <replacement-rule>
      ...
    </replacement-rule>
      ...
    </rules>

Les deux types sont décrits dans les points suivants.

Règles de format[edit]

Le dé-formateur va encapsuler dans des blocs de format les balises indiquées par ces règles dans le champ regexp. S'il y a des balises de début et de fin, et que tout ce qui est délimité par elles est un format, il faut spécifier une valeur regexp à la fois pour le début et la fin :

  <format-rule eos="no" priority="1">
    <begin regexp=’"\<!--"’/>
    <end regexp=’"--\>"’/>
  </format-rule>

Dans le cas contraire seulement un élément begin-end est utilisé :

  <format-rule eos="yes" priority="3">
    <begin-end regexp=’"<"[/]?"li"[ˆ>]*">"’/>
  </format-rule>

En plus, en priorité vous devez spécifier une priorité pour dire au système dans quel ordre les règles de format doivent être appliquées (la valeur absolue n'est pas significative, seulement l'ordre résultant de ces valeurs). Dans eos vous indiquerez, avec "yes" ou "no", si le bloc de format qui contient l'expression détectée doit être précédé ou non par une marque de ponctuation artificielle.[1]

Règles de remplacement[edit]

Les règles de remplacement sont utilisées pour remplacer les caractères spéciaux dans le texte. L'expression régulière dans l'attribut regexp va reconnaître un ensemble de caractères spéciaux et les replacer par les caractères spécifiés dans le texte à traduire. La correspondance entre les caractères originaux et de remplacement est précisée dans les attribut source et target des éléments à remplacer, qui peuvent être multiples :

  <replacement-ruleregexp='"&"[ˆ;]+;'>
    <replace source="À"target="À"/>
    <replace source="À"target="À"/>
    <replace source="À"target="À"/>
    <replace source="À"target="À"/>
    <replace source="Á"target="Á"/>
    <replace source="Á"target="Á"/>
    <replace source="Á"target="Á"/>
    <replace source="Á"target="Á"/>
    ...
  </replacement-rule>

Expression régulières des attributs regexp[edit]

Elles ont la syntaxe utilisée par flex. Comme exemple de spécification de format, nous donnerons celui pour HTML. L'explication donnée dans les paragraphes suivants peut être suivie en regardant la Figure 3.49. En première position, nous trouvons la règle de format qui spécifie de manière générale toutes les balises HTML : elle considère comme balise HTML tout ce qui commence par le signe < et finir par le signe >.

Ces règles ont la priorité 4, qui est la plus basse priorité afin que des règles plus spécifiques soient appliquées de manière préférentielle. Mais avant de considérer une balise de manière générale en appliquant cette règle, quelques règles de priorité supérieure seront appliquées.

Dans le cas du HTML,

  • Priorité 1: La plus grande priorité est pour les commentaires <!-- ... -->
  • Priorité 2: Les marques for pour le début et la fin <script> </script> et <style> </style>, où tout ce qui est inclus entre ces balises est considéré comme du format.
  • Priorité 3: C'est pour les balises qui indiquent la fin d'une phrase (ponctuation artificielle), qui sont <br/>, ,

    , etc.
  • Priorité 4: Les dernières sont les règles de remplacement, qui remplace tous les codes qui commencent par &, comme spécifié dans l'expression régulière. Ainsi, chaque remplacement est défini : &Agrave;, aussi bien que &#192;, &#xC0; et &#xc0; sont remplacé par À. Les caractères spéciaux restant sont déclarés de la même manière.
Exemple
 <?xml version="1.0" encoding="UTF-8"?>
 <format name="html">
   <options>
     <largeblocks size="8192"/>
     <input encoding="UTF-8"/>
     <output encoding="UTF-8"/>
     <escape-chars regexp='[\[\]ˆ$\\]'/>
     <space-chars regexp='[ \ n\ t\ r]'/>
     <case-sensitive value="no"/>
   </options>
   <rules>
    <format-rule eos="no" priority="1">
       <begin regexp='"<!--"'/>
      <end regexp='"-->"'/>
    </format-rule>
    <format-rule eos="no" priority="2">
      <begin regexp='"<script"[ˆ>]*">"'/>
      <end regexp='"</script"[ˆ>]*">"'/>
    </format-rule>
    <format-rule eos="no" priority="2">
      <begin regexp='"<style"[ˆ>]*">"'/>
      <end regexp='"</style"[ˆ>]*">"'/>
    </format-rule>
    <format-rule eos="yes" priority="3">
      <begin-end regexp='"<"[/]?"br"[ˆ>]*">"'/>
    </format-rule>
    <!-- Ici on trouve d'autres déclarations de format-rule eos="yes"-->
    <!-- ...                                                -->
    <format-rule eos="no" priority="4">
      <begin-end regexp='"<"[a-zA-Z][ˆ>]*">"'/>
    </format-rule>
    <replacement-rule regexp=’"&"[ˆ;]+;’>
      <replace source="&Agrave;" target="À"/>
      <replace source="&#192;" target="À"/>
      <replace source="&#xC0;" target="À"/>
      <replace source="&#xc0;" target="À"/>
      <!-- Ici on trouve d'autres éléments à remplacer      -->
      <!-- --                                               -->
    </replacement-rule>
  </rules>
</format>

Notes[edit]

  1. Dans tous ces cas, les entités typiques &lt; et &gt; sont utilisées pour représenter les caractères < et > respectivement.

Voir aussi[edit]