Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/09/2007, à 00:39

Sorbus

[Résolu] Transposer un fichier .wb en texte (dictionnaire)

Bonjour,

Je viens chercher de l'aide dans ce forum, pour donner suite à la discussion entamée ici : http://forum.ubuntu-fr.org/viewtopic.php?id=124192&p=1

Nous voudrions pouvoir utiliser sous Linux (avec par exemple stardict) des dictionnaires qui sont lisibles actuellement uniquement via le logiciel Freelang (logiciel gratuit mais non libre - et n'ayant à ce jour assuré le développement que pour Windows).

Sous réserve d'avoir l'autorisation des auteurs des dictionnaires en questions ceci devrait être possible.

Il nous faut commencer par déchiffrer les fichiers .wb utilisés par Freelang.

Pour l'instant, nous en sommes là : http://forum.ubuntu-fr.org/viewtopic.ph … 3#p1144953
(voir aussi les deux messages suivants).

On cherche de l'aide pour écrire un script permettant de réaliser ceci :

A partir d'un fichier .wb ouvert avec OOo writer :
              - insérer un séparateur (de type saut de ligne) tous les 84 signes
              - puis insérer un séparateur (de type tabulation) après le 31ème signe de chaque ligne
                (pour distinguer un premier champ de 31 signes et un second de 53 signes)
              - puis supprimer tous les « # » qui sont à la fin de chacun des deux champs
                (pour certains dictionnaires, il faudrait supprimer tous ce qui est à la fin des deux champs à partir du premier signe "#")

Voici un exemple avec le dictionnaire Corse-Français, pour lequel nous avons l'autorisation de l'auteur :

1°) Ce qu'on obtient assez facilement avec OOo writer :

a ti passi?####################tu vas bien?#########################################à u frescu#####################on prend le frais?###################################à u volu#######################comprendre a demi-mot################################a vi discurrite?###############vous discutez?#######################################abambana#######################étourdir#############################################abarbanta######################assaillir############################################abbachjà#######################aboyer#e vertige#####################################abbacinà#######################avoir le vertige#####################################abbaghjà#à#####################aboyer#e vertige#####################################abbaglianà#####################avoir le vertige#####################################abbalanà#######################avoir le regard troublé##############################abbambacinà####################avoir le vertige#####################################abbambanà######################avoir le vertige#####################################abbandonu######################abandon#r############################################abbisugnà######################avoir besoin#########################################abbità#i#######################habiter#r############################################abbiucci#######################au revoir############################################abbrunà#a######################Assombrir############################################abbrunzà#######################Bronzer#r############################################abbrustulita###################grillade######################################

2°) Ce que donne un saut de ligne tous les 84 signes :

a ti passi?####################tu vas bien?#########################################
à u frescu#####################on prend le frais?###################################
à u volu#######################comprendre a demi-mot################################
a vi discurrite?###############vous discutez?#######################################
abambana#######################étourdir#############################################
abarbanta######################assaillir############################################
abbachjà#######################aboyer#e vertige#####################################
abbacinà#######################avoir le vertige#####################################
abbaghjà#à#####################aboyer#e vertige#####################################
abbaglianà#####################avoir le vertige#####################################
abbalanà#######################avoir le regard troublé##############################
abbambacinà####################avoir le vertige#####################################
abbambanà######################avoir le vertige#####################################
abbandonu######################abandon#r############################################
abbisugnà######################avoir besoin#########################################
abbità#i#######################habiter#r############################################
abbiucci#######################au revoir############################################
abbrunà#a######################Assombrir############################################
abbrunzà#######################Bronzer#r############################################
abbrustulita###################grillade######################################

3°) Ce que donne l'insertion d'une tabulation après le 31ème signe de chaque ligne :

a ti passi?####################	tu vas bien?#########################################
à u frescu#####################	on prend le frais?###################################
à u volu#######################	comprendre a demi-mot################################
a vi discurrite?###############	vous discutez?#######################################
abambana#######################	étourdir#############################################
abarbanta######################	assaillir############################################
abbachjà#######################	aboyer#e vertige#####################################
abbacinà#######################	avoir le vertige#####################################
abbaghjà#à#####################	aboyer#e vertige#####################################
abbaglianà#####################	avoir le vertige#####################################
abbalanà#######################	avoir le regard troublé##############################
abbambacinà####################	avoir le vertige#####################################
abbambanà######################	avoir le vertige#####################################
abbandonu######################	abandon#r############################################
abbisugnà######################	avoir besoin#########################################
abbità#i#######################	habiter#r############################################
abbiucci#######################	au revoir############################################
abbrunà#a######################	Assombrir############################################
abbrunzà#######################	Bronzer#r############################################
abbrustulita###################	grillade######################################

4°) Ce que donne la suppression de la fin de chaque champ à partir du 1er signe "#" :

a ti passi?        tu vas bien?
à u frescu        on prend le frais?
à u volu        comprendre a demi-mot
a vi discurrite?    vous discutez?
abambana        étourdir
abarbanta        assaillir
abbachjà        aboyer
abbacinà        avoir le vertige
abbaghjà        aboyer
abbaglianà        avoir le vertige
abbalanà        avoir le regard troublé
abbambacinà        avoir le vertige
abbambanà        avoir le vertige
abbandonu        abandon
abbisugnà        avoir besoin
abbità            habiter
abbiucci        au revoir
abbrunà            Assombrir
abbrunzà        Bronzer
abbrustulita        grillade

Comment automatiser cela avec un script pour traiter les 38 pages (sous OOo writer) de ce dictionnaire... (et les centaines de pages de certains autres dictionnaires .wb) ?

Merci à ceux qui pourront nous aider !

Dernière modification par Sorbus (Le 23/09/2007, à 19:24)

Hors ligne

#2 Le 02/09/2007, à 01:28

Link31

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

convert.sh

#!/bin/bash
TEMP=`mktemp`
> $2
cat $1 | sed 's/#\{2,\}/\n/g' | cut -d\# -f1 > $TEMP
export COUNT=$(cat $TEMP | wc -l)
# remplacer "\t" par le(s) séparateur(s) désiré(s)
for ((i=1; i<=$COUNT; i+=2)); do echo -n $(cat $TEMP|head -n $i|tail -n 1) >> $2; echo -ne "\t" >> $2; cat $TEMP|head -n $(($i+1))|tail -n 1 >> $2; done
rm $TEMP
chmod +x convert.sh
./convert.sh fichier_source fichier_cible

fichier_source:

a ti passi?####################tu vas bien?#########################################à u frescu#####################on prend le frais?###################################à u volu#######################comprendre a demi-mot################################a vi discurrite?###############vous discutez?#######################################abambana#######################étourdir#############################################abarbanta######################assaillir############################################abbachjà#######################aboyer#e vertige#####################################abbacinà#######################avoir le vertige#####################################abbaghjà#à#####################aboyer#e vertige#####################################abbaglianà#####################avoir le vertige#####################################abbalanà#######################avoir le regard troublé##############################abbambacinà####################avoir le vertige#####################################abbambanà######################avoir le vertige#####################################abbandonu######################abandon#r############################################abbisugnà######################avoir besoin#########################################abbità#i#######################habiter#r############################################abbiucci#######################au revoir############################################abbrunà#a######################Assombrir############################################abbrunzà#######################Bronzer#r############################################abbrustulita###################grillade######################################

fichier_cible:

a ti passi?     tu vas bien?
à u frescu      on prend le frais?
à u volu        comprendre a demi-mot
a vi discurrite?        vous discutez?
abambana        étourdir
abarbanta       assaillir
abbachjà        aboyer
abbacinà        avoir le vertige
abbaghjà        aboyer
abbaglianà      avoir le vertige
abbalanà        avoir le regard troublé
abbambacinà     avoir le vertige
abbambanà       avoir le vertige
abbandonu       abandon
abbisugnà       avoir besoin
abbità  habiter
abbiucci        au revoir
abbrunà Assombrir
abbrunzà        Bronzer
abbrustulita    grillade

Dernière modification par Link31 (Le 02/09/2007, à 04:00)

Hors ligne

#3 Le 02/09/2007, à 07:53

Sorbus

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Grand merci Link31,

C'est presque bon. Peut-être encore quelques petits réglages à faire. Lorsqu'il y a deux ou plusieurs "#" à la suite avant des  "lettres parasites"... ces dernières sont conservées comme un mot par convert.sh.

Exemple :

abità##ta######################habiter##############################################abitaculu######################habitation###########################################abitazione#####################habitation###########################################abitua#ta######################habituer#############################################aborigenu#ne###################aborigène#n##########################################abuminazione###################abomination##########################################accasà##ione###################loger#r##on##########################################accede##ione###################accéder##on##########################################accelerazione##################accéleration#########################################accessibilità##################accessibilité########################################accessu#ione###################accés#te#on##########################################accètta#ione###################hachette#on##########################################acchiucchiassi#################boir au robinet######################################accia#a#ione###################écheveau#on##########################################acciacculatu###################fatigué##on##########################################accidente#ne###################accident#on##########################################acellu##ione###################oiseau#u#on##########################################acetosità#si###################aigreur#goulot#######################################achjerchjà#i###################cercler un tonneau###################################achjerchjata###################cerclage#oulot#######################################achjuchjassi###################boir au goulot#######################################aciaghju#one###################acier##u#on##########################################acidita##one###################acidité##on##########################################aciditu##one###################acidifié#on##########################################acidulu##one###################acidulé##on##########################################acina#a##one###################grain de raisin######################################acinu#a##one###################grain de raisin######################################acqua#a##one###################eau#e#é##on##########################################acquaghju#ne###################évier#é##on##########################################acru#ta##one###################aigre#é##on##########################################acu##ta##one###################aiguille#on##########################################adattà###one###################adapter#r#n##########################################addicciatu#e###################chanceux#eil#########################################addimandà#ne###################demander#eil#########################################addumandà#ne###################demander#eil#########################################adorà#à##one###################adorer#'oeil#########################################Adriaticu#ne###################Adriatique#l#########################################aduà#jà##one###################adorer#'oeil#########################################aduchjà##one###################avoir l'oeil, avoir a

Le saut de ligne tous les 84 signes donnerait ceci :

abità##ta######################habiter##############################################
abitaculu######################habitation###########################################
abitazione#####################habitation###########################################
abitua#ta######################habituer#############################################
aborigenu#ne###################aborigène#n##########################################
abuminazione###################abomination##########################################
accasà##ione###################loger#r##on##########################################
accede##ione###################accéder##on##########################################
accelerazione##################accéleration#########################################
accessibilità##################accessibilité########################################
accessu#ione###################accés#te#on##########################################
accètta#ione###################hachette#on##########################################
acchiucchiassi#################boir au robinet######################################
accia#a#ione###################écheveau#on##########################################
acciacculatu###################fatigué##on##########################################
accidente#ne###################accident#on##########################################
acellu##ione###################oiseau#u#on##########################################
acetosità#si###################aigreur#goulot#######################################
achjerchjà#i###################cercler un tonneau###################################
achjerchjata###################cerclage#oulot#######################################
achjuchjassi###################boir au goulot#######################################
aciaghju#one###################acier##u#on##########################################
acidita##one###################acidité##on##########################################
aciditu##one###################acidifié#on##########################################
acidulu##one###################acidulé##on##########################################
acina#a##one###################grain de raisin######################################
acinu#a##one###################grain de raisin######################################
acqua#a##one###################eau#e#é##on##########################################
acquaghju#ne###################évier#é##on##########################################
acru#ta##one###################aigre#é##on##########################################
acu##ta##one###################aiguille#on##########################################
adattà###one###################adapter#r#n##########################################
addicciatu#e###################chanceux#eil#########################################
addimandà#ne###################demander#eil#########################################
addumandà#ne###################demander#eil#########################################
adorà#à##one###################adorer#'oeil#########################################
Adriaticu#ne###################Adriatique#l#########################################
aduà#jà##one###################adorer#'oeil#########################################

Le "##ta" après "abità",
le "##ione" après "accasà",
le "##on" après "loger",
sont des lettres "parasites", qu'il faudrait pouvoir supprimer dans le résultat final.

Mais le résultat de convert.sh donne pour l'instant cela :

abità	ta
habiter	abitaculu
habitation	abitazione
habitation	abitua
habituer	aborigenu
aborigène	abuminazione
abomination	accasà
ione	loger
on	accede
ione	accéder
on	accelerazione
accéleration	accessibilità
accessibilité	accessu
accés	accètta
hachette	acchiucchiassi
boir au robinet	accia
écheveau	acciacculatu
fatigué	on
accidente	accident
acellu	ione
oiseau	acetosità
aigreur	achjerchjà
cercler un tonneau	achjerchjata
cerclage	achjuchjassi
boir au goulot	aciaghju
acier	u
acidita	one
acidité	on
aciditu	one
acidifié	acidulu
one	acidulé
on	acina
one	grain de raisin
acinu	one
grain de raisin	acqua
one	eau
on	acquaghju
évier	on
acru	one
aigre	on
acu	ta
one	aiguille
adattà	one
adapter	addicciatu
chanceux	addimandà
demander	addumandà
demander	adorà
one	adorer
Adriaticu	Adriatique
aduà	one

Autre exemple :

zappa#####u####################houe#t##te funèbre# d'une clôture#s#ordre# le sol####
zappunata#u####################coup de pioche rapide#une clôture#s#ordre# le sol

donne pour l'instant ceci avec convert.sh :

zappa
u	houe
te funèbre	zappunata
coup de pioche rapide

Il faudrait que ça donne ça :

zappa             houe
zappunata         coup de pioche rapide

C'est la même question : il faudrait que les mots et lettres parasites soient supprimées, même si'l ne sont pas précédés d'un seul "#", mais de deux "##", ou de plus (comme le "u", précédé de "#####").

S'il est possible de résoudre ça, je crois que ce sera tout bon.

@+

Je m'aperçois aussi que lorsque le second "champ" (celui de 53 signes, c'est à dire celui donnant la définition/traduction du mot) n'est précédé que d'un seul "#" (comme 31ème et dernier signe du premier champ), la traduction est considérée comme un parasite, et supprimée.

Exemple dans un autre dictionnaire (fictif) :

brezto-/brezt-_(>crezt)[prf-G]#garde################################################

donne en séparant les deux champs après le 31ème caractère :

brezto-/brezt-_(>crezt)[prf-G]#        garde################################################

... mais le mot "garde" (qui n'est pas un parasite, mais la traduction) disparaît après conversion par convert.sh

Du coup, la piste suivie pour l'instant par convert risque d'être difficile à régler sans distinguer préalablement  les deux champs...

Dernière modification par Sorbus (Le 02/09/2007, à 10:54)

Hors ligne

#4 Le 03/09/2007, à 09:44

Sorbus

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

@Link31,

J'essaye de comprendre ton script... mais j'en suis loin.

Pour l'instant, je crois le comprendre jusque là :

#!/bin/bash
TEMP=`mktemp`
> $2
cat $1

... mais pour la suite, je cherche hmm
je suis donc loin du compte...
... et j'appelle à nouveau à l'aide pour tenter de finaliser le script

@+

Hors ligne

#5 Le 03/09/2007, à 13:32

hector

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

salut,
j'espère que link31 ne va pas nous laisser tomber si près du but wink
Pour comprendre la ligne suivante faudrait se plonger dans un tuto de "sed" comme:  http://doc.ubuntu-fr.org/sed
Je vais essayer si j'ai un peu de temps ...

Dernière modification par hector (Le 03/09/2007, à 13:34)

Hors ligne

#6 Le 03/09/2007, à 16:22

Yannick_LM

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

#!/bin/bash

DICO="$1"
>"$2"


# Transformation en iso (pour pouvroir être sûr d'avoir 1 caractère = 1 octet,
# vu que head et tail ne gère que les octets :

iconv -f UTF-8 -t ISO-8859-1 dico.wb > dico.new.wb

# Affiche la ième ligne du fichier a transformer :
function affiche {
i=$1
cat dico.new.wb | head -c $(( $i * 84 )) | tail -c 84
echo
}

 
# Nombre de lignes du nouveau fichier :
let " max = `wc -c $DICO | awk '{print $1}'` / 84 "

for i in `seq 1 $max` ; do
    affiche $i >> work
done;


# Découpe suivant le nombre de caractères, et re-découpe avec cut.
while read ligne
do
  echo -ne `echo $ligne | head -c 31 | cut -d\# -f1`  >> dico.iso
  echo -ne "\t" >> dico.iso
  echo $ligne | tail -c 54 | cut -d\# -f1 >> dico.iso
done < work

iconv -f ISO-8859-1 -t UTF-8 dico.iso > "$2"

rm -f work
rm -f dico.new.wb
rm -f dico.iso

A tester ...

Dernière modification par Yannick_LM (Le 03/09/2007, à 18:13)


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#7 Le 03/09/2007, à 17:09

Yannick_LM

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Désolé pour le double post...

Il se trouve qu'il y a des erreurs dans le fichier source...
(boir  au lieu de boire), par exemple.

Je me demande si ça vaudrait pas le coup de travailler directement avec le fichier .wb original, plutôt que de passer par open office, qui est peut-être à l'origine desdites erreurs.

Dernière modification par Yannick_LM (Le 03/09/2007, à 18:17)


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#8 Le 03/09/2007, à 20:38

Sorbus

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Il se trouve qu'il y a des erreurs dans le fichier source...
(boir  au lieu de boire), par exemple
(...) travailler directement avec le fichier .wb original, plutôt que de passer par
open office, qui est peut-être à l'origine desdites erreurs.

Il y a en effet quelques erreurs ou fautes dans ce dictionnaire. Mais ces erreurs sont dans le fichier .wb original (je l'ai vérifié en l'ouvrant par Freelang).

Le plus simple pour corriger ces fautes serait de relire la liste de mots une fois qu'elle sera correctement extraite.

Par contre... indépendamment de ces fautes, oui, il y a peut-être moyen de travailler autrement à partir du ficher .wb. Mais pour l'instant, dans le fil de discussion connexe (http://forum.ubuntu-fr.org/viewtopic.php?id=124192), nous n'avons pas trouvé comment.

Je teste ta proposition ce soir, et je donne des nouvelles.
@+

Hors ligne

#9 Le 03/09/2007, à 21:03

Sorbus

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

iconv: Ne peut ouvrir le fichier d'entrée « dico.wb »: Aucun fichier ou répertoire de ce type

?

Du coup, j'ai remplacé dans le script "dico.wb" par le chemin complet du fichier source.

1er test avec comme fichier source le fichier .wb original.
Résultat :
--> dans le terminal, ce message :

iconv: Séquence d'échappement illégale à la position 84

--> et un fichier destination comportant 4139 lignes identiques :
a ti passi?    a ti passi?

2ème test avec comme fichier source le fichier lu par OOo writer.
--> dans le terminal, le même message :

iconv: Séquence d'échappement illégale à la position 84

--> et un fichier destination comportant 1963 lignes identiques :
a ti passi?    tu vas bien?

Remarques :
"a ti pasi?" est la première entrée (1er champ de la 1ère ligne) du dictionnaire.
"a ti passi?    tu vas bien?" = les deux champs (mot + traduction) de la première ligne du dictionnaire.

C'est un peu mieux à partir du fichier lu par OOo...
... mais il reste un problème à résoudre pour passer aux lignes suivantes.

Note importante : le dictionnaire Corse --> français comporte effectivement 1963 mots.

Le script exécuté avec comme source le fichier lu par OOo a bien mis le nombre de lignes correspondant au nombre de mots...

Dernière modification par Sorbus (Le 03/09/2007, à 21:44)

Hors ligne

#10 Le 03/09/2007, à 21:19

cep

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

On trouve sur cette page :
http://www.student.northpark.edu/pemente/sed/sed1line.txt

des exemples de lignes de commandes sed dans ce sens.

Hors ligne

#11 Le 03/09/2007, à 22:08

Sorbus

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Yannick,

J'ai neutralisé cette ligne de ton script :

# iconv -f UTF-8 -t ISO-8859-1 dico.wb > dico.new.wb

car j'avais justement utilisé l'ISO-8859-1 pour enregistrer le fichier lu par OOo writer.
... et dans cette ligne :

cat dico.new.wb | head -c $(( $i * 84 )) | tail -c 84

j'ai remplacé "dico.new.wb" par le chemin du fichier source.

Premier résultat intéressant : les 118 premières entrées du dictionnaire ont été parfaitement converties en fichier texte.

Ensuite, il y a deux lignes de plus... avec erreurs... puis plus rien.

Je regarde dans le fichier source (lu par OOo) à quoi correspondent ces erreurs des lignes 119 et 120.

Hors ligne

#12 Le 03/09/2007, à 22:34

Sorbus

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

C'est OK smile

J'ai repéré dans le fichier lu par OOo le problème situé au niveau des lignes 119/120 : je ne sais pas exactement ce que c'était... mais ça se manifestait pas un espace au début de la ligne du fichier OOo (différent bien sûr d'un début de ligne du dictionnaire...)

Il fallait un appui sur "del" pour supprimer l'espace et un autre pour que la ligne soit normale... (repéré en copiant/collant les lignes correspondantes dans un fichier gedit).

[Edit : il est possible avec gedit de remplacer automatiquement l'ensemble de ces "choses" gênantes pour la conversion du fichier en utilisant remplacer... il s'agit de remplacer \r\n par rien...]

J'ai rapidement vérifié l'ensemble du fichier OOo pour corriger les autres erreurs similaires (très facile a voir : espace en début de ligne)... J'en ai corrigé une petite vingtaine.

J'ai ensuite relancé le script : les 1963 lignes du dico ont été correctement converties en fichier texte (en moins de 2 minutes).

Merci Yannick !

Dernière modification par Sorbus (Le 04/09/2007, à 14:16)

Hors ligne

#13 Le 03/09/2007, à 22:38

Yannick_LM

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Oups ... my mistake.
C'est vrai que je n'ai pas pensé que le fichier pouvait ne pas être en UTF.
Et j'ai laissé des noms de fichiers en dur, c'est pas bien...
Désolé.
@ cep ; Merci !


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#14 Le 03/09/2007, à 22:46

Sorbus

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Comment faire pour ne pas avoir à  modifier le script si on veut l'utiliser pour d'autres dictionnaires pour lesquels les auteurs nous donneraient les autorisations nécessaires ?

A cette ligne du script :

cat ............ | head -c $(( $i * 84 )) | tail -c 84

il faut pour l'instant ajouter après "cat" le nom du fichier source...
... il doit y avoir moyen de modifier un peu ça pour ne plus avoir à  éditer le script ?

Dernière modification par Sorbus (Le 16/01/2008, à 11:18)

Hors ligne

#15 Le 03/09/2007, à 23:36

hector

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Bravo et merci:
petite question/remarque , qu'en est il de cette histoire d'utf8 et iso?
Car il se trouve que justement beaucoup de dictionnaires utiliseront différents alphabets , d'où l'importance de l'utf8!

nb: réponse d'un nul à la question de sorbus...

cat $DICO

???

Dernière modification par hector (Le 03/09/2007, à 23:41)

Hors ligne

#16 Le 04/09/2007, à 00:28

Yannick_LM

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Euh, oui ; c'est ça. Je n'ai pas édité le premier script pour qu'on comprenne ce qui se passe après...

Mais effectivement, c'est la correction qu'il faut apporter.
@hector :
Tu as parfaitement raison ! Et mon script, en plus, ne fonctionne pas en UTF-8...

Je pense vraiment qu'il faut se tourner vers l'examen du fichier .wb original ; parce que pour l'instant, c'est vraiment mal barré.


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#17 Le 04/09/2007, à 10:04

hector

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Salut,
dans l'autre fil http://forum.ubuntu-fr.org/viewtopic.ph … 92&p=1, je montre le résutat que me donne beam pour le fichier wb... si tu veux je ter un coup d'oeil.... wink

Hors ligne

#18 Le 04/09/2007, à 11:00

Sorbus

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Le résultat que donne beam pour un fichier wb, c'est là  wink :
http://forum.ubuntu-fr.org/viewtopic.ph … 1#p1145121

Pour l'instant, je n'ai essayé d'ouvrir qu'avec gedit (ouverture impossible) et avec OOo (ouverture possible, et résultats différents selon le jeu de caractères utilisé). J'ai obtenu les meilleurs résultats pour la lecture des accents et caractères spéciaux en utilisant les jeux ISO-8859-1 ou ISO-8859-14. Si j'essaye d'ouvrir en UTF, aucun accent ou caractère spécial n'est reconnu.

Je remarque ensuite que OOo, lorsque je fais "enregistrer sous", propose l'enregistrement par défaut au format "texte codé (.txt)". C'est sur le fichier ouvert par OOo en ISO-8859-1 et enregistré par OOo en "texte codé (.txt)" que le script a parfaitement fonctionné.

Pour les dicos Corse-->Français et Français-->Corse,
les seuls caractères non reconnus par OOo en ISO-8859-1 étaient certaines apostrophes (trois sur l'ensemble du fichier)... mais d'autres apostrophes étaient reconnues. Je suppose que cela tient à la façon dont a été constitué le fichier d'origine.

Dernière remarque : la liste de mot Français-->Corse a été obtenue facilement aussi, et j'ai essayé sur celle-ci les deux scripts :
- celui de Link31
- celui de Yannick

Les deux ont donné un résultat impeccable.
Cette liste ne comportait pas de lettres ou de mots parasites.

@+

Dernière modification par Sorbus (Le 04/09/2007, à 23:00)

Hors ligne

#19 Le 04/09/2007, à 19:43

hector

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

grospoisson a écrit :

Je pense vraiment qu'il faut se tourner vers l'examen du fichier .wb original ; parce que pour l'instant, c'est vraiment mal barré.

j'ai un peu réfléchi (dans la limite de mes moyens! tongue ) au résultat que donne beav (cf autre post)
peut-être que c'était évident pour vous mais je vous donne quand même ma conclusion:

le fichier originel était codé en ISO machin, donc chaque caractère codé sur 1 octet (256 caractères possibles , qui peuvent être représentés par 2 chiffres hexadécimaux: 16²=256)

c'est ce qu'on a ici:

 0: 61 62 61 6D 62 61 6E 61  00 00 00 00 00 00 00 00  abambana........
10: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 E9  ................
20: 74 6F 75 72 64 69 72 00  00 00 00 00 00 00 00 00  tourdir.........

"0:" , "10:"=> comptage du nombre d'octets 0hex=0déc, 10hex=16déc, 20hex=32déc ...
61 => a
62 => b
6D => m
etc...
00 => caractère nul
"abambana........" => représentation de "61 62 61 6D 62 61 6E 61  00 00 00 00 00 00 00 00" en utilisant l'encodage par défaut du terminal , utf8 ici

3 petits trucs:
1/ J'espérais que on aurait des caractères correspondant à des retours chariots, qui n'auraient pas été pris en compte par openoffice: il n'y en n'a pas...

2/ Les accents ne sont pas représentés , il faudrait changer l'encodage par défaut du terminal, je ne sais pas comment faire ...Par exemple E9 correspond à "é", mais est représenté par un "."

3/ les aberrations qu'a sorbus dans son fichier openoffice (apparitions de lettres) sont aussi présentes dans le binaire...

Conclusion: tout ça pour dire que je n'ai pas l'impression que le binaire puisse apporter un plus par rapport au fichier oOo.

Dernière modification par hector (Le 04/09/2007, à 19:53)

Hors ligne

#20 Le 04/09/2007, à 23:27

Sorbus

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

@Link31
Ton script pourrait être utilisé pour des dictionnaires ne comportant pas de mot ou de lettre parasite (je pense que le fichier Corse-->Français est une exception) - un peu simplifié (car il suffit alors de supprimer les "#" sans supprimer les lettres ou mots qui suivent... ce qui devrait du coup résoudre le problème suivant :

Lorsque le second "champ" (celui de 53 signes, c'est à dire celui donnant la définition/traduction du mot) n'est précédé que d'un seul "#" (comme 31ème et dernier signe du premier champ), la traduction est considérée comme un parasite, et supprimée.

Exemple dans un autre dictionnaire (fictif) :

brezto-/brezt-_(>crezt)[prf-G]#garde################################################

donne en séparant les deux champs après le 31ème caractère :

brezto-/brezt-_(>crezt)[prf-G]#        garde################################################

... mais le mot "garde" (qui n'est pas un parasite, mais la traduction) disparaît après conversion par convert.sh

Comment modifier ton script en ce sens ?

Hors ligne

#21 Le 05/09/2007, à 14:56

Link31

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Je n'en sais rien, demande à un expert en script shell, et donne-lui des exemples pertinents. Le script que j'ai proposé était déjà à la limite de ce que je sais faire, j'ai dû chercher un certain temps pour trouver une ligne sed qui fonctionne, alors si chaque dictionnaire est différent je ne risque pas d'y arriver... hmm

Hors ligne

#22 Le 05/09/2007, à 15:46

Sorbus

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Link31, merci déjà de ce que tu as fait wink

Je me disais que ton script pouvait peut-être fonctionner en UTF-8 et être utilisé en complément de celui de Yannick pour des fichiers-dicos ayant d'autres caractères...

Mon exemple du message précédent est pertinent je crois... Il n'y a pas d'autre problème à résoudre que celui-ci.

Je pensais que - vu ce que tu as déjà fait pour ce script - tu avais la possibilité de réaliser la modification pour la conversion de fichiers a priori plus simples (sans lettre parasite). Il y a un truc dans ton script où tu effaces les lettres situées après un "#". Il suffirait d'enlever ce truc... pour ne supprimer que les "#".
Je n'ai pas repéré comment tu as fais cela, ni comment tu as réussi à distinguer les 2 champs "mot"... et "traduction du mot", c'est pour cela que je te refaisais appel pour cette modification.

Voilà... Mais en effet, si un autre expert en shell peut nous aider...
... et encore merci pour ce que tu as déjà réalisé.

@+

Hors ligne

#23 Le 05/09/2007, à 17:32

Link31

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Sorbus a écrit :

Je me disais que ton script pouvait peut-être fonctionner en UTF-8 et être utilisé en complément de celui de Yannick pour des fichiers-dicos ayant d'autres caractères...

Pour tous les problèmes d'encodage, il suffit d'utiliser iconv :
cat fichier | iconv -f [charset d'origine] -t [charset de destination]

Sorbus a écrit :

Il y a un truc dans ton script où tu effaces les lettres situées après un "#". Il suffirait d'enlever ce truc... pour ne supprimer que les "#".

Bon, c'est déjà plus clair comme ça. Il faut remplacer cut -d\# -f1 par sed 's/\#//'
Mais je te laisse tester, après tout c'est toi qui as les fichiers sous la main.

Dernière modification par Link31 (Le 05/09/2007, à 17:33)

Hors ligne

#24 Le 05/09/2007, à 21:16

Sorbus

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

J'ai essayé ta proposition... et ça m'a aidé à comprendre un peu mieux et à trouver.

Pour les fichiers-dicos simples, sans lettre/mot parasite, c'est bon comme suit :

#!/bin/bash
TEMP=`mktemp`
> $2
cat $1 | sed 's/#\{1,\}/\n/g' > $TEMP
export COUNT=$(cat $TEMP | wc -l)
# remplacer "\t" par le(s) séparateur(s) désiré(s)
for ((i=1; i<=$COUNT; i+=2)); do echo -n $(cat $TEMP|head -n $i|tail -n 1) >> $2; echo -ne "\t" >> $2; cat $TEMP|head -n $(($i+1))|tail -n 1 >> $2; done
rm $TEMP

Il me reste un truc à trouver pour éviter une opération que je fais "à la main".
J'avais parlé dans le message 12 de ce fil d'un problème particulier qui bloque le déroulement normal de la conversion au bout d'un certain nombre de lignes.

Il s'agit de quelques marques de paragraphe (vu dans un fichier OOo) qui sont dans le fichier-dico source. Dans un fichier texte ouvert avec gedit, si j'utilise "rechercher" en sélectionnant la zone correspondante, elles apparaissent dans la fenêtre "rechercher" sous la forme \r\n.
Comment peut-on, avant d'effectuer la suite du script (donc en début de scipt), commander la suppression de ces marques de paragraphe (ou sauts à la ligne) ?

Dernière modification par Sorbus (Le 05/09/2007, à 21:17)

Hors ligne

#25 Le 05/09/2007, à 21:29

Link31

Re : [Résolu] Transposer un fichier .wb en texte (dictionnaire)

Si j'ai bien compris, \r\n est en toutes lettres... Donc c'est :

cat fichier | sed 's/\\r\\n//g' > fichier2
mv fichier2 fichier

Hors ligne