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.

#26 Le 05/09/2007, à 21:44

Sorbus

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

Non, excuse, j'ai pas été clair :

Dans le fichier ouvert avec OOo, ça apparait comme une marque de paragraphe.

Dans le fichier texte (celui qui est le fichier-source utilisé pour la conversion), ça apparait simplement comme un passage à la ligne, rien de plus, sans aucun caractère visible... comme ça :

barmattonniattu
 [adj]##########tondu, chauve, glabre################################

Je remarquais simplement, comme un indice complémentaire, que si je sélectionne avec la souris ce passage à la ligne, et que j'utilise l'onglet rechercher, dans la fenêtre "rechercher", apparait \r\n, comme ça :
12064490520070905221736.png

La question est donc, comment supprimer tous les sauts à la ligne du fichier texte, avant de lancer la suite du script. Cette opération préalable est nécessaire aussi avant de lancer le script proposé par Yannick.

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

Hors ligne

#27 Le 05/09/2007, à 22:06

Sorbus

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

J'ai trouvé cet info complémentaire :

\n, c'est le saut de ligne unix, \r, c'est le saut de ligne mac, et \r\n, c'est le saut de ligne windows

Ce n'est pas une surprise, ces fichiers ont certainement été créés sous Windows à l'origine.

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

Hors ligne

#28 Le 05/09/2007, à 22:40

Sorbus

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

Cette fois, ça a l'air d'être bon comme ça :

#!/bin/bash
TEMP=`mktemp`
> $2
cat $1 | sed 'N;s/\r\n //g;P;D;' > $2
mv $2 $1
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

Hors ligne

#29 Le 06/09/2007, à 00:04

Link31

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

En effet, c'est bien \r\n pour remplacer les caractères \r et \n, sans les échapper avec \.

Hors ligne

#30 Le 06/09/2007, à 09:06

Sorbus

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

Une bricole encore...
... le script dernière mouture n'enlève qu'un \r\n sur deux.
Un fichier qui a 14 \r\n au départ en a 7 après "traitement",
un fichier qui en a 7 au départ en a 3 après,
un fichier qui en a 3 au départ en a 1 après...
un fichier qui en a 1 au départ n'en a plus après.

D'où ça vient ? On peut bien sûr répéter les lignes

cat $1 | sed 'N;s/\r\n //g;P;D;' > $2
mv $2 $1

10 fois dans le script... mais ce n'est pas propre, et probablement à la fois source d'erreurs et insuffisant pour des fichiers longs.

Hors ligne

#31 Le 06/09/2007, à 14:14

Link31

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

Sais-tu au moins ce que signifie N;, P; et D; ? Parce qu'un simple sed 's/\r\n//g' serait suffisant, il me semble...

Hors ligne

#32 Le 06/09/2007, à 17:59

Sorbus

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

@Link31,
J'avais essayé le sed 's/\r\n//g', mais cela n'avait aucun effet.
J'ai donc cherché sur Internet, à comprendre ce qu'était ce "\r\n" (cf. mon post 27), puis à trouver un autre moyen de supprimer ce saut de ligne.

J'ai d'ailleurs un peu modifié la ligne indiquée dans mon post 30
en remplaçant ceci :

cat $1 | sed 'N;s/\r\n //g;P;D;' > $2

par cela :

cat $1 | sed 'N;s/\r\n / /g;P;D;' > $2

car je me suis rendu compte qu'un espace était supprimé en plus du /r/n

La première ligne remplace le saut de ligne (\r\n) suivi d'un espace au début de la ligne suivante par rien du tout.

La ligne modifiée remplace le saut de ligne (\r\n) suivi d'un espace au début de la ligne suivante par un espace... ce qui revient à ne supprimer que le saut de ligne.

Normalement, en effet, la ligne avec simplement 's/\r\n//g' aurait du marcher pour supprimer les seuls sauts de lignes... mais non.

Pour le détail de la commande utilisée, j'ai trouvé ma vie dans un exemple donnée dans l'article sur sed sur wikipedia.

Je cite :

N;s/\n / /g;P;D;

N                  lit (aussi) la ligne suivante
  s/\n / /g         effectue la substitution...
   /\n /               ... d'un saut de ligne suivi d'un espace...
       / /              ... par un simple espace...
         g             ... pour toutes les occurrences
           P       retourne le résultat du traitement
             D     efface ce qui reste afin de ne pas afficher
                       la ligne suivante deux fois

J'ai simplement remplacé \n par \r\n, puisqu'il s'agit dans ces fichiers de sauts de lignes Windows.

Pour le reste, je suis un apprenti, et je ne maîtrise pas toutes les options utilisées.

Pour l'instant, 6 ou 7 traitements successifs d'un fichier avec la commande utilisée enlèvent tous les sauts de lignes. Mais il y a certainement une bricole à modifier pour les supprimer tous d'un coup.

Voilà où j'en suis.

Dernière modification par Sorbus (Le 06/09/2007, à 18:01)

Hors ligne

#33 Le 10/09/2007, à 01:34

hector

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

Bonjour,
Nous avons l'autorisation pour le dictionnaire breton smile . Malheureusement le convert.sh ci-dessus ne marche pas,je n'ai pas eu le temps de voir pourquoi. Et je n'ai pas essayé le script de yannick.
Si quelqu'un veut essayer...
Merci

Hors ligne

#34 Le 14/09/2007, à 19:12

kaworu

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

salut !
j'ai pas eu le temps de tout regarder, mais perso ce genre de script j'utiliserai bien du pur awk, ou encore (en cas d'extrême urgence et toussa) du Perl.

M'en vais essayer en Ruby tient smile


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#35 Le 15/09/2007, à 01:22

hector

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

Merci pour ton aide!
tu essaies bien avec le dico breton, hein?
(parce que le corse, c'est ok)
à mon avis la difficulté vient plus de l'encodage et de la structure du fichier binaire, après bash ou un autre... tu fais comme tu le sens! wink

Hors ligne

#36 Le 15/09/2007, à 10:05

kaworu

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

Salut !
donne voir quelques exemples du dico bretons stp (ce n'est pas la même structure ?)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#37 Le 15/09/2007, à 11:51

hector

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

pour la structure je ne peux pas trop te dire , c'est bizarre mais le script qui marchait  pour le corse ne marche plus pour le breton.
je t'ai envoyé un courriel wink

Hors ligne

#38 Le 15/09/2007, à 13:30

kaworu

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

Salut !
ok je vais regarder. Essaye ce script, il fonctionne pour le corse en tout cas (de ce que j'ai pu tester) :

#!/usr/bin/ruby


require "jcode"
$KCODE = "utf8"

(text ||= String.new) << $_ while gets

text.scan(/.{84}/).each do |line|
        puts line if $DEBUG
        word = line.scan(/.{31}/).first
        translation = line.sub(word, '')
        word.sub!(/#.*$/, '')
        translation.sub!(/#.*$/, '')
        puts "#{word}   #{translation}"
end

c'est un poil décevant niveau lisibilité pour du Ruby, mais Ruby 2.0 améliorera ça avec la gestion native de l'utf-8.
(il faut biensûr installer Ruby, le plus sympathique des langage de prog et (blablalba)) smile

Dernière modification par kaworu (Le 15/09/2007, à 13:31)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#39 Le 16/09/2007, à 08:47

Sorbus

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

@hector,

Le script "convert.sh" n'est pas au point en l'état (cf. message 3 de ce fil).

Sa variante "converb.sh" est fonctionnelle, après avoir pris soin d'éliminer tout saut de ligne du fichier d'origine, mais ne peut être utilisée que sur les fichiers ne comportant pas de lettre ou de mot parasite :

#!/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

Si le fichier breton comporte des lettres ou mots parasites, seul le script de Yannick "converm.sh" (messages 6 et 11 de ce fil) peut fonctionner. A condition de partir d'un fichier en iso-8859-1 et non en utf-8 (et aussi après avoir pris soin d'éliminer tout saut de ligne dans le fichier source)

Il reste à voir si la proposition de kaworu peut fonctionner.

Pour tester, quel que soit le script utilisé, il vaut mieux copier-coller le début du fichier à traiter dans un petit fichier de test... ça peut-permettre de voir d'où viennent les éventuelles erreurs.

Bon courage.
@+

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

Hors ligne

#40 Le 16/09/2007, à 12:07

hector

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

je teste les scripts sur un extrait du dico breton-français:

1/ converb.sh (link31+sorbus)
comme précisé par sorbus, du fait qu'il y ait des caractères parasites, ça ne marche pas

'ta	t
ioù)	tion a.)
donc	là-bas
le verbale)	'vat
ioù)	tion a.)
mais, cependant	erbale)

2/ converm.sh, de yannickLM
résultat intéressant...

a-benn e (mont a.)	percuter, dans (rentrer d.)
a-benn nebeut	d'ici peu
a-benn neuze	pour alors, à ce moment-là (dans ce cas)
a-benn neuze	à ce stade(-là)
a-benn...	d'ici...
a-bep-eil	alternativement, successivement
a-bep (seurt/lec'h...)	de tous (sortes/lieux...)

ça m'a l'air très bien,j'essaie la conversion stardict dessus ...

3/ converk.ru de kaworu
peux-tu expliquer un peu?
je lance ton programme (./converk.ru fichiersource fichiersortie) mais la sortie se fait dans le terminal ...

Dernière modification par hector (Le 16/09/2007, à 12:27)

Hors ligne

#41 Le 16/09/2007, à 13:06

kaworu

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

Salut !
les fichiers sources ruby ont l'extension .rb

Le programme est "grep like". c'est à dire que tu lui donne juste le fichier wb (voir plusieurs) en paramètre ou sur stdin et la sortie est sur stdout. exemples d'utilisations :

convert.rb fichier.wb > result.txt
cat fichier.wb | convert.rb > result.txt

'fin, comme grep quoi ! smile

Sinon je regarderai de plus près le dico que tu m'a envoyé par mail quand je rentrerais chez moi (mardi). Les scripts shell sont malheureusement peu lisibles.

Dernière modification par kaworu (Le 16/09/2007, à 13:08)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#42 Le 16/09/2007, à 14:57

hector

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

salut,
alors
pour le script de yannick (je le redonne avec les petites modif citées plus haut):

#!/bin/bash

DICO="$1"
>"$2"


# Affiche la ième ligne du fichier a transformer :
function affiche {
i=$1
cat $DICO | 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.txt
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.txt

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


rm -f dico.iso
rm -f work.txt

ok sauf les sauts de ligne  (\n, 180 environ ) signalés par sorbus, on est plus très loin... un script de sorbus enlève ces \n, enfin 1 sur 2, je vais essayer ça en attendant mieux...

pour kaworu: ok, désolé le ruby est tout nouveau pour moi...
j'ai essayé ton script

converk.rb fichier.wb > result.txt

sur le dico breton
partant du binaire (wb) comme tu l'as précisé
1er problème: du coup j'obtiens un nouveau binaire (inouvrable par gedit, seulement par ooo)
2nd problème:
sous ooo, j'ai ...

'ta#t####ioù)##tion a.)########donc   #là-bas#le verbale)##############################'vat##
###ioù)##tion a.)########mais, cepe   ndant#erbale)##############################-a# (-idi)
#ù)##tion a.)########suff. (verbe :    ramasser des)#########################-a# (-idi)#ù)##tio

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

Hors ligne

#43 Le 16/09/2007, à 20:21

alexduf

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

est-ce qu'un simple

dos2unix

ne suffirait pas?

Edit : autant pour moi j'ai "juste" raté une page de posts !    ><

Dernière modification par alexduf (Le 17/09/2007, à 09:28)

Hors ligne

#44 Le 16/09/2007, à 22:40

Sorbus

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

La commande dos2unix n'est-elle pas plutôt faite pour convertir un fichier texte sous ms-dos au format unix ?
Là... nous partons d'un fichier binaire qui semble plus ou moins crypté (lettres/mots parasites), et non d'un simple fichier texte.
dos2unix pourrait peut-être transposer le fichier d'origine en fichier texte, pouvant être ouvert et traité... comme celui que nous obtenons en utilisant OOo...

... les scripts testés ci-dessus sont destinés à réaliser la suite de l'opération... c'est à dire transformer le fichier texte plein de "#" et de lettres/mots parasites en une liste de mots (sous forme de fichier texte tabulé) mise à la libre disposition de son auteur.

Mais dos2unix serait à tester pour cette première étape, pour voir si elle peut offrir une alternative intéressante à l'utilisation de OOo.

@hector, je pensais que les lettres/mots parasites étaient une originalité du fichier Corse... Si c'est vrai aussi du Breton, c'est que c'est peut-être assez général dans le sens "Autre langue"-->Français (c'est à dire le sens dans lequel est généralement réalisé le dictionnaire d'origine par les auteurs).

@+

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

Hors ligne

#45 Le 17/09/2007, à 01:23

hector

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

Bonsoir,
je pense qu'alexduf propose dos2unix pour supprimer les \n en fin de ligne. Je ne pense pas que je pourrai essayer avant quelques jours....Avis aux amateurs... finalement je n'ai pas eu le temps de les enlever ces fichus \n donc si quelqu'un veut essayer...

sorbus, effectivement je n'ai pas regardé dans l'autre sens si il existe ces parasites... Quoiqu'il en soit le script de yannickLM gère parfaitement cette difficulté...
Sinon j'avais plutôt l'impression que ces parasites (qui sont des rebuts de définition antérieurs) devait être dû au fait que quand une personne ajoute via le logiciel frelang une définition, il s'effectue un décalage sans effaçage des octets, juste une reécriture sur une précédente définition... je ne sais pas si je suis très clair...

kaworu: dans la précipitation je ne t'ai pas remecié de tes efforts!!! je pense que même si le script de yannick marche, il peut toujours être intéressant d'en avoir d' autres  ... une des grosses difficultés futures, ce sera quand on passera à des dictionnaires à 2 alphabets distincts...

Dernière modification par hector (Le 17/09/2007, à 01:31)

Hors ligne

#46 Le 17/09/2007, à 08:59

Sorbus

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

une des grosses difficultés futures, ce sera quand on passera à des dictionnaires à 2 alphabets distincts...

Où même avec trop de caractères spéciaux. Si on ne peut pas convertir un fichier en codage de caractère ISO-8859, on ne peut pas utiliser le script de Yannick.

cf. ce message obtenu avec gedit :

Impossible d'enregistrer le fichier (...).txt avec le codage des caractères Occidental (ISO-8859-1). Le document contient un ou plusieurs caractères qui ne peuvent pas être représentés en utilisant le codage des caractères indiqué.
Sélectionnez un codage des caractères différent dans le menu et réessayez.

Il faudrait que nous mettions au point un script fonctionnant en utf-8 (comme convert ou converb) et pouvant s'en sortir avec les lettres/mots parasites. Donc, toutes les pistes sont ouvertes...

Hors ligne

#47 Le 17/09/2007, à 10:35

hector

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

Pour info les dictionnaires corse-français et français-corse sont disponibles! big_smile
http://stardict.sourceforge.net/Dictionaries_misc.php
merci à tous pour vos contributions! (et à l'auteur)

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

Hors ligne

#48 Le 17/09/2007, à 13:06

hector

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

Pour ces histoires de \n en trop:
c'est openoffice qui les rajoute (il a un nombre maximal de caractère par ligne).

Hors ligne

#49 Le 17/09/2007, à 14:43

Sorbus

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

... C'est l'impression que j'ai eu en faisant quelques tests hier.
Du coup dos2unix pourrait rendre service.
J'ai fait un premier essai hier... ça produit bien un fichier texte qui ressemble à ce qu'on obtient avec OOo, mais impossible de l'ouvrir correctement avec gedit...
Avec des fichiers si volumineux, quel éditeur de texte - ne rajoutant pas de saut de ligne - pourrait être utilisé ?

Hors ligne

#50 Le 17/09/2007, à 14:59

hector

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

oui on se dirige en fait vers le problème: pourquoi gedit ne peut ouvrir un fichier wb, alors que même wordpad le peut (sous windows)?  hmm

Dernière modification par hector (Le 17/09/2007, à 22:11)

Hors ligne