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