Description, enrichissement et correction du système d'offset d'unitex

31 views
Skip to first unread message

Gilles Vollant

unread,
May 3, 2015, 3:34:44 PM5/3/15
to unitex-...@googlegroups.com

 

Bonjour,

J’ai déjà évoqué sur la liste les fonctionnalités offset d’Unitex.

(cf https://groups.google.com/forum/#!topic/unitex-gramlab/JqMteLhVYtA , mel du 4 février 2015 intitulé fonctionnalité offset d'Unitex )

 

Rappel : l’idée est de maintenir une table de correspondance des modifications d’offset, qui puisse passé d’outils en outils.

 

Unitex avait parfois des erreurs de calculs de correspondance d’offset, quand un outils prend en entrée des décalages existants produit par un outil précédent. J’ai introduit quelques modifications mineures dans la révision 3828

Dans la révision 3828, j’ai 3832, je pense avoir corrigé des problèmes de calculs de correspondance d’offset, quand un outils prend en entrée des décalages existants. J’ai également ajouté un outil DumpOffset, qui peut aider à analyser/comprendre (voire debugger) les problèmes d’offsets.

 

Ainsi,

UnitexToolLogger Unxmlize -t --output_offsets=offsets1 foo.html

UnitexToolLogger Normalize --output_offsets=offsets2alone foo.txt

UnitexToolLogger DumpOffsets --merge -o offsets1 offsets2alone -p offset2

 

Produit le même fichier offset2 que

 

UnitexToolLogger Unxmlize -t --output_offsets=offsets1 foo.html

UnitexToolLogger Normalize --input_offsets=offsets1 --output_offsets=offsets2 foo.txt

 

offsets1 contient la correspondant des offsets entre foo.html et foo.txt

offsets2alone contient la correspondant des offsets entre foo.txt et foo.snt

offsets2 contient la correspondant des offsets entre foo.html et foo.snt

 

enfin

UnitexToolLogger  DumpOffsets -o foo.html -n foo.snt offsets2 -p dump_offset2 --full

Fabrique un rapport dump_offset2 avec la liste des séquences et le texte correspondant (avec pour chaque ligne de offsets2, le texte correspondant dans l’ancien puis dans le nouveau fichier, et également le texte non modifié.

 

Ces informations ont sans doute leur place dans la documentation.

 

 

 

Concernant le format de ces fichiers d’offsets, Sebastien Paumier a décrit ce format :

 

 

« Les fichiers d'offsets sont constituées de lignes contenant 4 entiers A B C D. Chaque ligne correspond à une modification du texte, exprimée de la façon suivante:

 

l'intervalle [A;B[ du texte *** avant tout traitement *** correspond à l'intervalle [C;D[ après traitement, A, B, C et D étant des positions en caractères dans les fichiers textes.

 

Par exemple, si on applique le programme Normalize sur le texte "Hello world" (avec deux espaces entre les deux mots), on aura une ligne comme

ceci:

 

5 7 5 6

 

signifiant qu'une séquence de deux caractères (les 2 espaces) a été remplacée par une séquence d'un seul caractère.

 

Le principe est donc de produire un nouveau fichier d'offsets pour chaque application de programme modifiant le texte, en prenant en entrée le fichier d'offsets produit par le programme précédent. Ainsi, en regardant le dernier fichier d'offsets produit, on sait que pour chaque ligne A B C D, l'intervalle [C;D[ dans le fichier .snt correspond à l'intervalle [A;B[ dans le fichier .txt de départ. »

 

Rappel : les chiffres exprime la position du caractère, la numérotation commençant à zéro.

Le fichier offset standard correspondent au modification ; si on a

5 7 5 6

10 12 9 10

Cela signifie que la séquence [5;7[ a été remplacée par un autre texte à la position [5;6[ du nouveau texte.

Egalement, la séquence [10;12[ a été remplacée par un autre texte à la position [9;10[ du nouveau texte.

Par conséquent, la séquence [7;10[ de l’ancien texte est identique à la séquence [6;9[ du nouveau texte.

 

 

 

Il est possible de convertir de fichier en une liste des positions des textes identique

UnitexToolLogger DumpOffsets -v offsets2 -p offsets2common.txt --new_size 31

 

UnitexToolLogger DumpOffsets -v offsets2 -p offsets2common_.txt --old_size 63

Ainsi dans ce fichier la ligne

12 14 1 3

Signifie que la séquence [12;14[ de l’ancien texte est identique à la séquence [1;3[ du nouveau texte.

Il faut fournir la taille en caractère, soit du fichier de départ, soit de celui d’arrivée.

Pour un fichier encodé en UTF16BE_BOM, c’est la taille en octets, auquel on retranche 2 pour les 2 octets de signature BOM et que l’on divise ensuite par 2 car chaque caractère unicode prend 2 octets. En UTF8, la correspondance n’est pas immédiate.

 

 

 

 

 

En annexe le script de test sous Unix envoyé par Sébastien Paumier le 17 février 2015 pour démontrer la fonctionnalité

#!/bin/sh

export APPDIR=/home/paumier/Unitex3.1beta/App

 

echo "<html><body>Le <b>premier</b> ministre est ici.</body></html>" > foo.html

"$APPDIR/Unxmlize" -t --output_offsets=offsets1 foo.html

"$APPDIR/Normalize" --input_offsets=offsets1 --output_offsets=offsets2 foo.txt

rm -rf foo_snt

mkdir foo_snt

"$APPDIR/Tokenize" --input_offsets=offsets2 --output_offsets=offsets3 foo.snt

echo "le premier ministre" > regexp.txt

"$APPDIR/Reg2Grf" regexp.txt

"$APPDIR/Grf2Fst2" regexp.grf

"$APPDIR/Locate" -t foo.snt regexp.fst2

"$APPDIR/Concord" --uima=offsets3 foo_snt/concord.ind

 

# le résultat est un fichier foo_snt/concord.txt qui contient la ligne suivante:

#

# 12 26      Le premier ministre

#

# En effet, si l'on regarde le fichier foo.html, la séquence reconnue commence à la position 12 et mesure

# 26 caractères  

 

Ou sa conversion en .bat pour Windows :

echo ^<html^>^<body^>Le ^<b^>premier^</b^> ministre est ici.^</body^>^</html^> > foo.html

UnitexToolLogger Unxmlize -t --output_offsets=offsets1 foo.html

UnitexToolLogger Normalize --input_offsets=offsets1 --output_offsets=offsets2 foo.txt

rd/s/q foo_snt

mkdir foo_snt

UnitexToolLogger Tokenize --input_offsets=offsets2 --output_offsets=offsets3 foo.snt

echo le premier ministre> regexp.txt

UnitexToolLogger Reg2Grf regexp.txt

UnitexToolLogger Grf2Fst2 regexp.grf

UnitexToolLogger Locate -t foo.snt regexp.fst2

UnitexToolLogger Concord --uima=offsets3 foo_snt/concord.ind

 

 

le résultat est un fichier foo_snt/concord.txt qui contient la ligne suivante:

12 38  Le premier ministre

En effet, si l'on regarde le fichier foo.html, la séquence reconnue commence à la position 12 et s’arrête à la position 38 (en nombre de caractères). Le 12 est inclus, le 38 ne l’est pas, et la numérotation comment à zéro.

 

Reply all
Reply to author
Forward
0 new messages