tafed

alain Adelmar
aadelmar@numericable.fr beuuh c est quoi ca

Ce petit script Perl permet depuis n'importe quel shell (interpréteur de commande Linux) d'ouvrir un petit dictionnaire de traduction Anglais-Francais Français-Anglais.   En effet il permet de créer et de se servir d'un fichier dicop_uk-fr (qui maintenant est très bien fournit), ayant un format de type:
mot_anglais,eqivalant_francais,equivalant_français|exemple_anglais=exemple_français
et qui vous donnera lorsque vous demander un réponse du style:
>cover    = couvrir
                  = bâche, housse, couverture
Il passera le dictionnaire en revu lorsque vous essaierai de l'étoffer pour voir si le mot ajouter n'existe pas déjà, en anglais comme en français.
Il vous préviendra en vous donnant se qui lui parait être similaire et vous demandera de confirmé le cas échéant.
C'est un petit script tous bête mais vachement pratique, lorsque vous entré juste une ou deux lettre il vous met toutes les correspondances.    alain



Pour faire fonctionner ce script créer d'abord un fichier vide appelé dicop_uk-fr ou avec quelques traduction telle que:

according,selon,concorder
although,quoique
big,grand,gros
parse,analyser

etc... en réspéctant la construction suivante: mot_anglais,mot_français1,mot_français2 (sans espace entre)
puis copier ce script et le coller dans un éditeur, sauvegarder ce fichier sous alEd.pl puis rendez le exécutable en tapant:

chmod +x tafed.pl

Voila, pour l'appeler et vous en servir taper juste:

./tafed.pl

====================================== taf.pl =======================

#!/usr/bin/perl
# ************************************************************************
# for Linux and UNIX-Like | made by alain Adelmar *
# remd: petit logiciel de traduction de mot simple anglais->français *
# et vice verca ainsi qu'une option edit pour etoffer le dico. *
# Cette version peut aussi traduit un mot (anglais) en tant qu'argument *
# et repond sur une ligne. expl: taf append => continuer *
# son fichier resource : dicop_uk-fr (dico perso de quelques kilos) *
# Ce script tourne trop bien. Pour updater les dicop_uk-fr => updico.pl *
# Ce script tourne sur tout environement (Linux - Windows - etc) à la *
# condition que dicop_uk-fr soit installé dans (le répértoire courant) ou *
# les paths suivants: /home/common/bin ou ./bin pour Linux *
# ou définissez votre propre path ligne 38 *
# Requis le module Datefr.pm sinon mettre lignes 20 et 21 en commentaires*
# alain adelmar 06/Juillet/2002~09/Mai/2006. version: 2.04 *
#*************************************************************************
#system("clear");


#use Datefr;
#our $opt = 3;
#our $mod_affichage = 5;
#our $fd = maintenant($mod_affichage);



use Cwd;
my $dir = getcwd;

if ($ENV{"MACHTYPE"}=~ /[msys|cygwin|gnu]$/) {
$gnus++;
print "this is a real gnu OS, congratulation\n";
}
elsif ($ENV{"PATH"}=~ /^\//) {
$gnus++;
print "this is a real gnu OS, congratulation\n";
}

@gnul = ("\\", "\/");

# @ds = split(/$gnul[$gnus]/, $d);
# $ds = pop @ds;
$pref = '/home/common/bin/dicop_uk-fr';
if(-e $pref) {
$dico = $pref;
}
else {
$pref = "$dir" . "$gnul[gnus]" . "dicop_uk-fr";
if (-e $pref) {
$dico = $pref;
}
else {
die "erreur de path, il est impossible a taf de trouver dicop_uk-fr\nsolution: modifier la ligne 53 de taf ou\ntrouver le et copier le au bon endroit $!";
}
}
# donc entrer ici la valeur de $dico (expl: $dico = "\.\/dicop_uk-fr";)
# sinon placer le ou vous voulez en definissant un path correct dans la ligne suivante
# $dico = "remplacer_cette_phrase_par_un_path";
$x = "x*" x 28;
$donc = "\n\tdonc\n";

# 1er partie avec argument qui ne traite qu'un seul mot sur une ligne.
if($ARGV[0] ne "") {
if ($ARGV[0] eq "-v") {
print "\ntaf vers: 1.05\n";
exec 'quoi taf';
die "$x\n";
}
elsif ($ARGV[0] =~ /^\"|\"$/) {
s/^\"()\"$/$1/;
$mota = $1;
}
else {
$mota = $ARGV[0];
}
$argv = 1;
&lire_dico;
&anglais_francais;
}
else {
print "\n$x\nVersion longue de taf (sans argument = accés au menu) *\nA noter: Vous auriez pu entrer un mot a traduire en *\nguise d'argument, pensez y la prochaine fois. *\n _ alain Adelmar _ *\n$x\n";
$argv = 0;
}
# 2eme partie la commande sans argument qui ouvre le menu.

print "Bienvenu sur le petit traducteur taf *\n aadelmar\@free.fr *\n$x\n";
MENU:
print " _ Anglais-francais(1)\n _ Francais-anlais(2)\n _ Ajouter quelques lignes au dico(3) \.\.\. reponse: ";
$trad = ;
chomp $trad;

&lire_dico;

#menu possible de l'application**************************
if ($trad <= 1) {
print "$donc---- Anglais-francais ----\n\n";
$trad = "af";
&le_mot($mota);
&anglais_francais;
}
elsif ($trad == 2) {
print "$donc---- Francais-anglais ----\n";
$trad = "fa";
&le_mot($mota);
&francais_anglais($trad);
}
elsif ($trad >= 3) {
print "$donc---- Ajout au Dico perso ----\n";
print "Les lignes que vous ajoutez à votre dico personnel\ndoivent être écritent:\nmot_anglais,mot_français1,mot_francais2,mot_français3|exemple_angl = en_francais\n";
print "(ne laisser pas d'espace entre les mots, juste une virgule)\n";
print "on y va? (o/n)\t";
$trad = "ed";
chomp ($repon = );
&oui_non($repon);
&edition;
}

print "\n$x\n";
print "tchao !!!\n$x\n";


sub anglais_francais {
while ($mota ne "quitte"){
foreach $ligne(@traduction) {
chomp($ligne);
# laisser comme ca car plus complet
if ($ligne =~ /^$mota/) {
($line, $exemple)= split(/\|/, $ligne);
($angl, $fr, $fr1, $fr2, $fr3) =split(/,/, $line);
print "$angl = $fr\t$fr1\n";
if ($fr2 ne "") {
print "$angl = $fr2\t$fr3\n";
}
if ($exemple ne "") {
print "exemple: $exemple\n";
}
}
}
if ($argv == 0) {
&choix;
}
else { die "$x\n(Pas d'autre mot pour $mota) $!"}
}
# print "tchao !!!\n";
}

sub francais_anglais($trad) {
while ($mota ne "quitte"){
foreach $ligne(@traduction) {
($line, $exemple)= split(/\|/, $ligne);
($angl, $fr, $fr1, $fr2, $fr3) =split(/,/, $line);
if ($fr =~ /^$mota/) {
print "$fr = $angl\n";
}
if ($fr1 =~ /^$mota/) {
print "$fr1 = $angl\n";
}
if ($fr2 =~ /^$mota/) {
print "$fr2 = $angl\n";
}
if ($fr3 =~ /^$mota/) {
print "$fr3 = $angl\n";
}
}
&choix;
}
# print "tchao !!!\n$x\n";
}

sub edition {
while(! oui_non($repon)) {
LABEL:print "\nEntrez votre ligne\n";
chomp ($ligne_in = );
($linei, $exemplei)= split(/\|/, $ligne_in);
($angli, $fri, $fr1i, $fr2i, $fr3i) =split(/,/, $linei);
foreach $ligne(@traduction) {
($line, $exemple)= split(/\|/, $ligne);
($angl, $fr, $fr1, $fr2, $fr3) =split(/,/, $line);
if ($angl eq $angli|| $fr eq $fri ) {
print "cette ligne présente des similitudes avec la ligne:\n";
print "$angl = $fr\t$fr1\t$fr2\t$fr3\t$exemple\n";
print "voulez vous quand même entrer votre ligne dans le dico?\n";
$resp = ;
chomp $resp;
if ($resp =~ /^n/i) {
print "elle ne sera donc pas intégré à votre dico\n";
goto LABELMENU;
}
}
}
$ligne_in = "$ligne_in" . "\n";
push @traduction, $ligne_in;
print "on continu? (o/n):\t";
chomp($repon = );
}
open(D, ">$dico") or die "Ouverture de dico impossible $!";
print D @traduction;
close D or die "fermeture impossible $!";
print "Vos lignes ont été rajouté au dictionnaire de traduction $dico\n";
&choix;
}

sub choix {
print "---------- (quitte) quitte, (menu) menu ou un autre mot:\n";
$mota= ;
chomp $mota;
if ($mota eq "menu") {
goto MENU;
}
}

sub le_mot($mota) {
print "entrer votre mot pour le traduire ou (menu) menu ou (quitte) quitter)\n";
chomp ($mota = );
}

sub oui_non($repon) {
my ($repon) = @_;
$repon =~ tr/A-Z/a-z/;
if ($repon =~ /^o|y/) {
return 0;
}
elsif ($repon =~ /^n/) {
return 1;
}
else {
print "\a";
print "Veuillez repondre par Oui ou par non\n";
chomp ($repon = );
&oui_non($repon);
}
}

sub lire_dico {
#lecture du dico******************************************
open DATA, "$dico" or die "Ouverture de dico impossible $!";
@traduction = ;
close DATA || die "fermeture impossible $!";
}

END;

et ici une version couleur mais est elle bonne?


#!/usr/bin/perl
# ******************************************************************
#      for Linux and UNIX-Like |   made by alain Adelmar                      *
# remd: petit logiciel de traduction de mot simple anglais->français        *
# et vice verca ainsi qu'une option edit pour etoffer le dico.                  *
# Cette version peut aussi traduit un mot (anglais) en tant qu'argument   *
# et repond sur une ligne. expl: taf append => continuer                          *
# son fichier resource : dicop_uk-fr (dico perso de quelques kilos)            *
# Ce script fonctionne bien. Pour updater les dicop_uk-fr => updico.pl        *
# alain adelmar 06/Juillet/2002~11/Novembre/2002.version 1.04            *
#********************************************************************

$dico = "./dicop_uk-fr" ;
# $kk = 0;
$x = "x*" x 25;
$donc = "\n\tdonc\n" ;

# 1er partie avec argument qui ne traite qu'un seul mot sur une ligne.
if ( $ARGV[0 ] ne "") {
  if ($ARGV [0] =~ /^\"|\"$/) {
    s/^\"()\"$/$1/ ;
    $mota = $1;
  }
  else {
    $mota = $ARGV[0 ];
  }
  $argv = 1;
  & lire_dico;
  & anglais_francais;
}
else {
  print "\nVous auriez pu entrer un mot a traduire en guise d'argument,\npensez y la prochaine fois.\n" ;
  $argv = 0;
}
# 2eme partie la commande sans argument qui ouvre le menu.

print "\n\n\n";
print "$x\n";
MENU: print "\nBienvenu sur le petit traducteur taf\noffert par a_l_a_i_n \/\/ a_d_e_l_m_a_r aadelmar\@free.fr\n";
print "Anglais-français(1)\nFrançais-anlais(2)\nAjouter quelques lignes au dico(3)\t\t\treponse: ";   
$trad = < STDIN>;
chomp $trad;

&lire_dico ;

#menu possible de l'application**************************
if ($trad <= 1 ) {
  print "$donc---- Anglais-français ----\n\n";
  $trad = "af";
  & le_mot($mota );
  & anglais_francais;
}
elsif ($trad == 2 ) {
  print "$donc---- Français-anglais ----\n";
  $trad = "fa";
  & le_mot($mota );
  & francais_anglais( $trad);
}
elsif ($trad >= 3 ) {
  print "$donc---- Ajout au Dico perso ----\n";
  print "Les lignes que vous ajoutez à votre dico personnel\ndoivent être écritent:\nmot_anglais,mot_français1,mot_francais2,mot_français3|exemple_angl = en_français\n";
  print "(ne laisser pas d'espace entre les mots, juste une virgule)\n";
  print "on y va? (o/n)\t" ;
  $trad = "ed";
  chomp ($repon = <STDIN>);
  & oui_non($repon );
  & edition($trad );
}
  
print "\n$x\n";
print "tchao !!!\n$x\n";


sub anglais_francais {
  while ($mota ne "q"){
    foreach $ligne( @traduction) {
       chomp($ligne );
       # laisser comme ça car plus complet
       if ( $ligne =~ /^$mota/) {
         ($line, $exemple)= split( /\|/, $ligne);
         ($angl, $fr, $fr1, $fr2, $fr3) =split (/,/, $line);
         print "$angl = $fr\t$fr1\n";
         if ( $fr2 ne "") {
           print "$angl = $fr2\t$fr3\n";
         }
         if ( $exemple ne "") {
           print "exemple: $exemple\n";
         }
       }
    }
    if ($argv == 0) {
       &choix;
    }
    else { die "Pas d'autre mot pour $mota $!" }
  }
  # print "tchao !!!\n";
}

sub francais_anglais( $trad) {
  while ($mota ne "q"){
    foreach $ligne( @traduction) {
       ($line, $exemple)= split( /\|/, $ligne);
       ($angl, $fr, $fr1, $fr2, $fr3) =split (/,/, $line);
       if ( $fr =~ /^$mota/) {
         print "$fr = $angl\n";
       }
       if ( $fr1 =~ /^$mota/) {
         print "$fr1 = $angl\n";
       }
       if ( $fr2 =~ /^$mota/) {
         print "$fr2 = $angl\n";
       }
       if ( $fr3 =~ /^$mota/) {
         print "$fr3 = $angl\n";
       }
    }
    & choix;
  }
  # print "tchao !!!\n$x\n";
}

sub edition($trad ) {
  while (! oui_non ($repon)) {
  LABEL :print "\nEntrez votre ligne\n";
    chomp ($ligne_in = <STDIN>);
    ( $linei, $exemplei)= split( /\|/, $ligne_in);
    ( $angli, $fri, $fr1i, $fr2i, $fr3i) =split( /,/, $linei);
    foreach $ligne( @traduction) {
       ($line, $exemple)= split( /\|/, $ligne);
       ($angl, $fr, $fr1, $fr2, $fr3) =split (/,/, $line);
       if ( $angl eq $angli|| $fr eq $fri ) {
         print "cette ligne présente des similitudes avec la ligne:\n" ;
         print "$angl = $fr\t$fr1\t$fr2\t$fr3\t$exemple\n";
         print "voulez vous quand même entrer votre ligne dans le dico?\n" ;
         $resp = <STDIN >;
         chomp $resp ;
         if ( $resp =~ /^n/i) {
           print "elle ne sera donc pas intégré à votre dico\n" ;
           goto LABEL ;
         }
       }
    }
    $ligne_in = "$ligne_in" . "\n" ;
    push @traduction , $ligne_in ;
    print "on continu? (o/n):\t" ;
    chomp ($repon = < STDIN>);   
  }
  open (D, ">$dico" ) or die "Ouverture de dico impossible $!";
  print D @traduction;
  close D or die "fermeture impossible $!" ;
  print "Vos lignes ont été rajouté au dictionnaire de traduction $dico\n" ;
  & choix;
}        

sub choix {
  print "---------- (q) quitte, (m) menu ou un autre mot:\n";
   $mota = < STDIN>;
   chomp $mota;
   if ($mota eq "m") {
       goto MENU ;
    }
}

sub le_mot($mota ) {
  print "entrer votre mot pour le traduire ou (m) menu ou (q) quitter)\n";
  chomp ($mota = <STDIN>);
}

sub oui_non($repon ) {
  my ($repon ) = @_;
  $repon =~ tr/A-Z/a-z/;
  if ($repon =~ /^o|y/) {
    return 0;
  }
  elsif   ( $repon =~ /^n/) {
    return 1;
  }
  else {
    print "\a";
    print "Veuillez repondre par Oui ou par non\n";
    chomp ($repon = <STDIN>);
    & oui_non($repon );
  }
}

sub lire_dico {
  #lecture du dico******************************************
  open DATA, "$dico" or die "Ouverture de dico impossible $!" ;
  @traduction = <DATA>;
  close DATA || die "fermeture impossible $!" ;
}

END;


On bute souvent sur les mêmes mots, je m'en suis rendu compte en me servant de ce script qui une fois nantis d'une centaine de mots et de leur traduction me dépanne souvent dans la compréhension de doc Anglaise. Mais rien ne vous empéche de recopier un des nombreux dicos mit à votre disposition dans les distributions Linux. Ce dico est plus pratique pour quelques centaines de mots. De plus il reconnait un mot anglais passé en argument et vous renvoi la traduction sur la même ligne. expl taf allways => toujours Il n'ouvre le script avec le menu que dans le cas ou vous taper taf (tout seul) En espérant qu'il vous sérivira autant qu'il me sert. alain retour en haut