#1 Le 30/01/2013, à 00:12
- Ph3nix_
[script/bash] Synonyme/Traduction d'un mot en une commande.
bonsoir,
[1] - Script pour traduire un mot/phrase dans n'importe quelle langue: (grâce à google traduction)
1.a. Installation:
Pour les néophytes, voici la démarche à suivre:
- Créez un fichier vide avec la commande:
gedit /chemin/vers/le/fichier/nom-du-fichier.sh
- Copiez le script bash ci dessous dans le fichier vierge
- Rendez le exécutable avec la commande:
chmod u+x /chemin/vers/le/fichier/nom-du-fichier.sh
1.b. Script bash
Réalisé par Hizoka, merci à lui
# Variables pour les couleurs
FUSHIA="\033[1;35m"
RAZ="\e[m"
BLEUFONCE="\033[1;34m"
ROUGE="\033[1;31m"
# Si pas de mot a traduire on arrete la
[[ -z "${1}" ]] && { echo -e "${ROUGE}Aucun mot à traduire d'indiqué.${RAZ}"; return; }
# Récupération de la page de traduction
html=$(wget -U "Mozilla/5.0" -qO - "http://translate.google.fr/translate_a/t?client=t&text=${1// /%20}&sl=${2:-"en"}&tl=${3:-"fr"}")
page=$(echo $html | sed "s/\],\[*\"/\n/g ; s/\]\],\[\[/\n/g ; s/\"//g")
liste_type=$(egrep "nom|^verbe|^adverbe|^adjectif|^interjection|^préposition|^pronom|^article|^conjonction|^," <<< "${page}")
# Si la recherche renvoie des explications
if [[ ${liste_type} ]]
then
# s/\[[[:digit:]]*\]// : il y a des fois des [0-9] qui font chier
# /[[:alpha:]]*,\[[[:alpha:]].*[[:digit:]]/ : recherche les lignes ayant les propositions
# s/\].*// : suppression de tout à partir de ]
# s/,/, /g : ajout d'un espace apres les virgules
# s/, \[/ : /p : afficher les lignes des propositions en remplacant la 1ere virgule par :
printf "$ROUGE%-12s$RAZ ${FUSHIA}$(echo $html | sed 's/\[\[\[\"//' | cut -d \" -f 1)$RAZ\n" "traduction"
while read proposition
do
# Type de mot
unset type
# Récupération du type de mot
type=$(egrep -m 1 "[[,]${proposition%% :*}$|[[,]${proposition%% :*}," <<< "${liste_type}" | sed "s/[[,]${proposition%% :*}// ; s/,.*//")
# Suppression du mot dans la liste car un meme mot peut etre de plusieurs types
liste_type="${liste_type/[[,]${proposition%% :*}}"
# Change la couleur des virgules
proposition="${proposition//,/${RAZ},${BLEUFONCE}}"
# Pour l'affichahe
lineToPrint="${FUSHIA}${proposition%% :*}${RAZ} : ${BLEUFONCE}${proposition#*: }${RAZ}."
[ "$currentType" != "$type" ] && currentType=$type && printf "\n$ROUGE%-12s$RAZ $lineToPrint\n" "$type" || printf "$ROUGE%-12s$RAZ $lineToPrint\n" ""
done < <(sed -n "s/\[[[:digit:]]*\]// ; /[[:alpha:][:space:]]*,\[[[:alpha:][:space:]].*[[:digit:]]/{s/\].*// ;s/,/, /g; s/, \[/ : /p}" <<< "${page}")
# En cas de phrase
elif [[ "${1}" =~ " " ]]
then
proposition=$(sed -n "/^\[.*${1}/{s/\[//g ; s/,.*//p}" <<< "${page}")
echo -e "${RAZ}Proposition de traduction de ${FUSHIA}${1}${RAZ} : ${BLEUFONCE}${proposition}${RAZ}."
# En cas de mot sans description
else
# Récupération des propositions
proposition=$(sed -n "/^[[:alpha:][:space:]]*,/{s/.*\[// ; s/,.*//p}" <<< "${page}" | sed ':z;N;s/\n/, /;bz')
# Change la couleur des virgules
proposition="${proposition//,/${RAZ},${BLEUFONCE}}"
echo -e "${RAZ}Proposition de traduction du mot ${FUSHIA}${1}${RAZ} : ${BLEUFONCE}${proposition}${RAZ}."
fi
1.c. Utilisation: (vous devez être connecté à internet)
Syntaxe: translate.sh "phrase" [langue-IN] [langue-OUT]
langue-IN correspond à la langue dans laquelle la phrase est écrite et langue-OUT est la langue dans laquelle la phrase va être traduite. Il faut utiliser les codes pays pour identifier les langues (en, fr, de, es ...). Si l’expression contient des espaces, les guillemets sont obligatoire. ( Si langue-IN et langue-OUT sont omis alors langue-IN sera fr et langue-OUT sera en: traduction français vers l'anglais).
Démo >>> http://ascii.io/a/3023 <<<
[2] - Script pour lister les synonymes d'un mot: (grâce au site web http://www.crisco.unicaen.fr/des/)
2.a. Installation:
Copiez le code ci-dessous dans le fichier ~/.scripts/synonym.awk que vous aurez crée :
#!/usr/bin/awk -f
#head
BEGIN {
#print toColoredStr(5," -- Site: ")"\033[4mhttp://www.crisco.unicaen.fr/des/synonymes\033[00m\n"
}
#body
{
#Lecture id="synonymes"
if( match($0,"id=\"synonymes\"")>0 && antonymR!=1 ) { readTitre=1 }
if( readTitre==1 && match($0,"class='titre'")>0 ) {
match($0,">[0-9]* ")
print toColoredStr(5," -- synonyme ("substr($0,RSTART+1,RLENGTH-2)") :")
readSynonym=1
readTitre=0
}
if(readSynonym>0) readSynonym+=1
if(readSynonym==3) {
gsub("<[^>]+>","")
gsub("^\t*","")
print toColoredStr(3,$0)
}
if(readSynonym==12) {
print toColoredStr(5,"\n -- Classement synonyme :")
gsub("<[^>]+>","")
gsub("^\t*( )+","")
gsub("( )+",", ")
print toColoredStr(3,$0)
exit
}
}
# fonction
function toColoredStr(_color_,_str_) {
tabColor[0]="\033[00m" #DEFAULT
tabColor[1]="\033[30m" #BLACK
tabColor[2]="\033[31m" #RED
tabColor[3]="\033[32m" #GREEN
tabColor[4]="\033[33m" #ORANGE
tabColor[5]="\033[34m" #BLUE
tabColor[6]="\033[35m" #MAGENTA
tabColor[7]="\033[36m" #CYAN
tabColor[8]="\033[37m" #WHITE
return tabColor[_color_]""_str_""tabColor[0]
}
Ensuite ajoutez les lignes suivantes à la fin du fichier ~/.bashrc qui existe déjà:
synonym() {
curl "http://www.crisco.unicaen.fr/des/synonymes/$1" 2>/dev/null | ~/.scripts/synonym.awk
}
2.b. Utilisation: (Vous devez être connecté à internet pour utiliser ce script)
Syntaxe: synonym mot
Démo >>> http://ascii.io/a/3025 <<<
- Enjoy -
Dernière modification par Ph3nix_ (Le 29/04/2013, à 22:04)
Hiroshima 45 / Chernobyl 86 / Windows '95
Hors ligne
#2 Le 31/01/2013, à 17:24
- Arbiel
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
Bonjour
Un script qui appellerait firefox, ou le navigateur local, avec l'adresse de la page me semble rendre le même service.
Quels services ton script apporte-t-il par rapport à cette solution basique ?
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
En ligne
#3 Le 03/02/2013, à 00:38
- cracolinux
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
@Arbiel
Tu donnes toi même la réponse à la question que tu poses, son script évite justement d'utiliser un navigateur....
Et ça c'est très cool, alors un merci à lui
EDIT :
Je pense qu'un petit raccourci avec l'utilisation de xsel (comme sur ce script de sputnick → http://forum.ubuntu-fr.org/viewtopic.php?id=850151) et une sortie avec zenity...ça ferait bien.
Ça donnerait un beau couple
Dernière modification par cracolinux (Le 03/02/2013, à 00:49)
Hors ligne
#4 Le 23/02/2013, à 14:19
- Stuffboxinou
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
Très très bon script ! Si tu en as un similaire pour le dictionnaire et un dico traducteur, ce serait parfait...
Honnêtement, c'est exactement ce que je recherche ! Merci !
Hors ligne
#5 Le 04/03/2013, à 20:20
- joko
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
même demande que Stuffboxinou, script très sympa
Je suis un homme, quoi de plus naturel en somme ?
linux on the rocks
Hors ligne
#6 Le 07/03/2013, à 02:16
- Ph3nix_
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
hey, merci pour vos retours.
J'ai modifié mon premier post et ajouté le script pour traduire un mot que j'utilise. Pour le dictionnaire, si vous avez un site à me proposer, je peux faire un script
Hiroshima 45 / Chernobyl 86 / Windows '95
Hors ligne
#7 Le 07/03/2013, à 10:38
- miniSeb
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
Pour le dictionnaire :
http://fr.wiktionary.org/wiki/<MOT>
Mais il faudra faire du nettoyage parce qu'il y a quand même une masse d'information.
Hors ligne
#8 Le 18/03/2013, à 12:37
- Stuffboxinou
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
Super pour le traducteur ! Et les synonymes ! C'est vraiment un outil parfait ! Merci beaucoup !
Hors ligne
#9 Le 19/03/2013, à 23:21
- Hizoka
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
merci a toi
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#10 Le 26/03/2013, à 19:15
- joko
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
pour ce qui de la traduction, ne pourrait-on avoir toutes les traductions d'un mot ?
exemple translate voler fr en, donnerait ainsi to steal, to fly etc... en fait les mots dans la balise tbody
s'il était possible de récupérer ce bloc...
n'étant pas du tout pro de la prog. bash ni experimenté dans les sed etc... je me permets de demander...
ce serait tip top
ma question vient suite à une traduction qui m'a surpris
la traduction habituelle de heure en allemand est Uhr, mais le traducteur donne uniquement Zeit
merci à la bonne âme qui voudrait se pencher sur le problème :-)
Je suis un homme, quoi de plus naturel en somme ?
linux on the rocks
Hors ligne
#11 Le 28/03/2013, à 18:08
- Hizoka
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
Je vous poste ma version de traduction :
# Variables pour les couleurs
FUSHIA="\033[1;35m"
RAZ="\e[m"
BLEUFONCE="\033[1;34m"
ROUGE="\033[1;31m"
# Si pas de mot a traduire on arrete la => Mettre return pour les fonctions et exit pour un script
[[ -z ${1} ]] && { echo -e "${ROUGE}Aucun mot à traduire d'indiqué.${RAZ}"; return; }
# Récupération de la page de traduction
page=$(wget -U "Mozilla/5.0" -qO - "http://translate.google.com/translate_a/t?client=t&text=${1}&sl=${2:-"fr"}&tl=${3:-"en "}" | sed "s/\],\[*\"/\n/g ; s/\"//g")
# Récupération de la liste des traductions
liste_mot=($(sed -n "s/ /_/g ; s/,/ /g ; /^noun/ s/.*\[//p" <<< "${page}"))
# Si la liste est vide, c'est que le mot n'est pas connu
[[ -z ${liste_mot[@]} ]] && echo -e "${ROUGE}Aucune traduction pour le mot : ${FUSHIA}${multitxt[0]}${ROUGE}.${RAZ}"
# Boucle traitant les termes 1 par 1
for mot in "${liste_mot[@]//_/ }"
do
# Récupération de la description du terme
description=$(sed -n "/^${mot},/{s/${mot},\[// ; s/,/, /g ; s/\].*//p}" <<< "$page")
echo -e "${FUSHIA}${mot}${RAZ} : ${BLEUFONCE}${description}${RAZ}."
done
à utiliser comme fonction ou comme fichier à part.
voici un exemple de ce que ca donne en vrai : http://ascii.io/a/2627
Dernière modification par Hizoka (Le 28/03/2013, à 18:22)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#12 Le 28/03/2013, à 18:29
- joko
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
clap clap clap !!!
merci beaucoup !!!
un jour si on pouvait avoir pour toutes les langues ^^....
Je suis un homme, quoi de plus naturel en somme ?
linux on the rocks
Hors ligne
#13 Le 28/03/2013, à 19:05
- joko
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
un souci : ne fonctionne que pour les noms (ou considérés comme)
il faudrait identifier si le mot est verbe, un nom ,un adjectif ou un adverbe---facile à dire mais je sais pas faire....
on pourrait écrire
type_mot=blabla (chaine à extraire)
et on remplacerait
liste_mot=($(sed -n "s/ /_/g ; s/,/ /g ; /^noun/ s/.*\[//p" <<< "${page}"))
par
liste_mot=($(sed -n "s/ /_/g ; s/,/ /g ; /^$type_mot/ s/.*\[//p" <<< "${page}"))
je pense bien ?
Je suis un homme, quoi de plus naturel en somme ?
linux on the rocks
Hors ligne
#14 Le 29/03/2013, à 00:15
- Hizoka
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
un jour si on pouvait avoir pour toutes les langues
c'est deja possible comme l'a dit Ph3nix_ :
traduction mot languen_in langue_out
T'étais pas trop loin de l'idée mais si tu recherches belles par ex, le type du mot n'est pas signalé, donc il a fallut faire un peu plus :
Pour ameliorer le retour, il faudrait savoir ce que google renvoie d'autre que noun et verb et adverb.
la version sans couleur :
# Si pas de mot a traduire on arrete la
[[ -z "${1}" ]] && { echo "Aucun mot à traduire d'indiqué."; return; }
# Destruction de variables
unset page description
# Récupération de la page de traduction
page=$(wget -U "Mozilla/5.0" -qO - "http://translate.google.com/translate_a/t?client=t&text=${1}&sl=${2:-"fr"}&tl=${3:-"en"}" | sed "s/\],\[*\"/\n/g ; s/\]\],\[\[/\n/g ; s/\"//g")
# Si la recherche renvoie des explications
if [[ $(egrep "noun|^verb|^adverb|^adjective|^interjection|^preposition|^pronoun|^article|^conjunction" <<< "${page}") ]]
then
# s/\[[[:digit:]]*\]// : il y a des fois des [0-9] qui font chier
# /[[:alpha:]]*,\[[[:alpha:]].*[[:digit:]]/ : recherche les lignes ayant les propositions
# s/\].*// : suppression de tout à partir de ]
# s/,/, /g : ajout d'un espace apres les virgules
# s/, \[/ : /p : afficher les lignes des propositions en remplacant la 1ere virgule par :
sed -n "s/\[[[:digit:]]*\]// ; /[[:alpha:][:space:]]*,\[[[:alpha:][:space:]].*[[:digit:]]/{s/\].*// ;s/,/, /g; s/, \[/ : /p}" <<< "${page}"
# En cas de phrase
elif [[ "${1}" =~ " " ]]
then
sed -n "/^\[.*${1}/{s/\[//g ; s/,.*//p}" <<< "${page}"
# En cas de mot sans description
else
sed -n "/^[[:alpha:]]*,/{s/.*\[// ; s/,.*//p}" <<< "${page}" | sed ':z;N;s/\n/, /;bz'
fi
et la version plus colorée :
# Variables pour les couleurs
FUSHIA="\033[1;35m"
RAZ="\e[m"
BLEUFONCE="\033[1;34m"
ROUGE="\033[1;31m"
# Si pas de mot a traduire on arrete la
[[ -z "${1}" ]] && { echo -e "${ROUGE}Aucun mot à traduire d'indiqué.${RAZ}"; return; }
# Destruction de variables
unset page description
# Récupération de la page de traduction
page=$(wget -U "Mozilla/5.0" -qO - "http://translate.google.com/translate_a/t?client=t&text=${1}&sl=${2:-"fr"}&tl=${3:-"en"}" | sed "s/\],\[*\"/\n/g ; s/\]\],\[\[/\n/g ; s/\"//g")
# Si la recherche renvoie des explications
if [[ $(egrep "noun|^verb|^adverb|^adjective|^interjection|^preposition|^pronoun|^article|^conjunction" <<< "${page}") ]]
then
# s/\[[[:digit:]]*\]// : il y a des fois des [0-9] qui font chier
# /[[:alpha:]]*,\[[[:alpha:]].*[[:digit:]]/ : recherche les lignes ayant les propositions
# s/\].*// : suppression de tout à partir de ]
# s/,/, /g : ajout d'un espace apres les virgules
# s/, \[/ : /p : afficher les lignes des propositions en remplacant la 1ere virgule par :
while read proposition
do
# Type de mot
unset type
case $(egrep -m 1 ",.*${proposition%% :*}" <<< "${page}" | cut -d',' -f 1) in
noun) type="nom" ;;
verb) type="verbe" ;;
adverb) type="adverbe" ;;
adjective) type="adjectif" ;;
interjection) type="interjection" ;;
preposition) type="preposition" ;;
pronoun) type="pronom" ;;
article) type="article" ;;
conjunction) type="conjonction" ;;
esac
# Change la couleur des virgules
proposition="${proposition//,/${RAZ},${BLEUFONCE}}"
# Affiche le retour des mots avec leur description, le tout en couleur
if [[ ${type} ]]
then
echo -e "${FUSHIA}${proposition%% :*}${RAZ} de type ${FUSHIA}${type}${RAZ} : ${BLEUFONCE}${proposition#*: }${RAZ}."
else
echo -e "${FUSHIA}${proposition%% :*}${RAZ} : ${BLEUFONCE}${proposition#*: }${RAZ}."
fi
done < <(sed -n "s/\[[[:digit:]]*\]// ; /[[:alpha:][:space:]]*,\[[[:alpha:][:space:]].*[[:digit:]]/{s/\].*// ;s/,/, /g; s/, \[/ : /p}" <<< "${page}")
# En cas de phrase
elif [[ "${1}" =~ " " ]]
then
proposition=$(sed -n "/^\[.*${1}/{s/\[//g ; s/,.*//p}" <<< "${page}")
echo -e "${RAZ}Proposition de traduction de ${FUSHIA}${1}${RAZ} : ${BLEUFONCE}${proposition}${RAZ}."
# En cas de mot sans description
else
# Récupération des propositions
proposition=$(sed -n "/^[[:alpha:]]*,/{s/.*\[// ; s/,.*//p}" <<< "${page}" | sed ':z;N;s/\n/, /;bz')
# Change la couleur des virgules
proposition="${proposition//,/${RAZ},${BLEUFONCE}}"
echo -e "${RAZ}Proposition de traduction du mot ${FUSHIA}${1}${RAZ} : ${BLEUFONCE}${proposition}${RAZ}."
fi
Voila ce que ca donne : http://ascii.io/a/2629
exemple avec et sans couleur de verbe, nom et adjectif
EDIT : prise en charge des phrases a traduire
Dernière modification par Hizoka (Le 28/04/2013, à 20:12)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#15 Le 30/03/2013, à 15:02
- cracolinux
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
La sauvegarde dans une variable, c'est quelque chose auquel je ne pense jamais, je passe toujours par un fichier temporaire mais je dois dire que c'est très intéressant.
Peux-tu expliquer l'utilisation de l'opérateur =~ s'il te plait ?
Et bravo!
Hors ligne
#16 Le 30/03/2013, à 18:47
- Hizoka
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
vrai si la variable $1 contient un espace.
equivalent à [[ "${1}" == *" "* ]]
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#17 Le 28/04/2013, à 13:26
- Ph3nix_
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
Bravo pour ton script Hizoka, beau travail !!!
Il faudrait faire quelques corrections et ce serait parfait:
# Si la recherche renvoie des explications
if [[ $(egrep "^noun|^verb|^adverb <<< "${page}") ]]
Il faudrait rajouter: adjectif, pronom, déterminent, article, interjection, conjonction (9 parties du discours)
noun|^verb|^adverb|^adjective|^interjection|^preposition|^pronoun|^article|^conjunction
Sans cela, le problème est qu'une recherche "avec explication" ne peut pas être traité comme une "recherche sans explication".
Ex:
[adrien@adrien-laptop:~/.scripts$ translate "hello" en fr
Proposition de traduction du mot : bonjour!, 4], bonjour.
Google translate renvoie bien une recherche avec explication (liste d'interjections).
Autre remarque, pour les cas où il n'existe pas d'explication, certaines "propositions possibles" sont omises par ton script:
Ex:
adrien@adrien-laptop:~/.scripts$ translate "forwards" en fr
Proposition de traduction du mot : vers l'avant, avant, attaquants, transmet.
La proposition "en avant" (dernière dans la liste) n’apparaît pas.
Je ne peux malheureusement pas corriger moi même ton script car je suis une tanche avec sed
Sinon, est-il possible d'ajouter dans la réponse la nature des mots (nom,verbe ... etc) ?
Une autre remarque, google translate est capable de détecter la langue du mot à traduire.
Plutôt que de faire une traduction fr-->en par défaut pourquoi ne pas faire une traduction "langue détecté"-->"en" par défaut et si "langue détecté = en" faire une traduction en-->fr
Je précise que je ne sais pas si c'est possible
EDIT:
Pour la dernière remarque oui c'est possible en utilisant &sl=auto par défaut.
Seulement il y a un problème pour la langue de retour, par défaut google traduit tous en français ou dans la langue précise avec le paramètre &tl=?.
Dernière modification par Ph3nix_ (Le 28/04/2013, à 15:07)
Hiroshima 45 / Chernobyl 86 / Windows '95
Hors ligne
#18 Le 28/04/2013, à 20:06
- Hizoka
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
noun|^verb|^adverb|^adjective|^interjection|^preposition|^pronoun|^article|^conjunction
merki et bien vu.
Autre remarque, pour les cas où il n'existe pas d'explication, certaines "propositions possibles" sont omises par ton script:
probleme lié à un espace dans le mot, c'est bon.
Sinon, est-il possible d'ajouter dans la réponse la nature des mots (nom,verbe ... etc) ?
yep, c'est ajouté (pour la version couleur)
J'ai éditer mon message qui contenait le code
J'ai pas compris le probleme pour la traduction automatique ?!
si j'utilise auto en argument d'entré, ca marche pareil chez moi, t'as des exemples ?
Dernière modification par Hizoka (Le 28/04/2013, à 20:13)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#19 Le 29/04/2013, à 00:21
- Ph3nix_
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
probleme lié à un espace dans le mot, c'est bon.
Non c'est toujours pas bon
je pense que tu as modifié la regex matchant les propositions dans "# Si la recherche renvoie des explications". Mais le problème que j'avais vu était dans la partie "# En cas de mot sans description".
adrien@adrien-laptop:~/.scripts$ translate forwards en fr
Proposition de traduction du mot forwards : vers l'avant, avant, attaquants, transmet.
Il manque "en avant":
[[[vers l'avant,forwards,,]],,en,,[[vers l'avant,[4],1,0,910,0,3,0] forwards,4,[[vers l'avant,910,1,0 avant,87,1,0 attaquants,0,1,0 transmet,0,1,0 en avant,0,1,0 0,8] forwards]],,,[[en]],0]
Concernant les types des mots, ça ne fonctionne pas à tous les coupes:
Ta regex semble matcher des trucs bizarre, exemple pour la traduction de "marcher":
adrien@adrien-laptop:~/.scripts$ translate marcher
verb
walk de type verbe : marcher, se promener, aller à pied, traverser.
verb
work de type verbe : travailler, faire, marcher, exploiter, bosser, préparer.
[[[walk
march : marcher, manifester, faire sortir.
verb
...
Seulement cela n'est pas affiché puisque ton case masque l'erreur de match.
adrien@adrien-laptop:~/.scripts$ translate un fr en
article
a de type article : un, une.
article
an de type article : un, une.
one : un.
one : un, une, homme.
one : un, une, unique.
one : un.
La ligne "one : un,une,homme." est considéré comme un nom par google translate
La ligne "one : un, une, unique." est un adjectif
et enfin la ligne: "one : un." un pronom. (la dernière)
je vais regarder ça de mon côté, mais sinon ton script commence à avoir de l'allure ^^
Dernière modification par Ph3nix_ (Le 29/04/2013, à 00:22)
Hiroshima 45 / Chernobyl 86 / Windows '95
Hors ligne
#20 Le 29/04/2013, à 09:22
- Hizoka
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
Non c'est toujours pas bon
oups une erreur de copié collé
Ta regex semble matcher des trucs bizarre, exemple pour la traduction de "marcher":
j'ai changer les lignes qui traitent de ça, plus de soucis avec marcher par exemple
La ligne "one : un,une,homme." est considéré comme un nom par google translate
La ligne "one : un, une, unique." est un adjectif
et enfin la ligne: "one : un." un pronom. (la dernière)
la misere... je cherche....
je mettrai le code à jour quand j'aurais reussis à trouver comment faire pour ce genre d'exemple...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#21 Le 29/04/2013, à 09:47
- Hizoka
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
Bon bah normalement ca passe
# Variables pour les couleurs
FUSHIA="\033[1;35m"
RAZ="\e[m"
BLEUFONCE="\033[1;34m"
ROUGE="\033[1;31m"
# Si pas de mot a traduire on arrete la
[[ -z "${1}" ]] && { echo -e "${ROUGE}Aucun mot à traduire d'indiqué.${RAZ}"; return; }
# Récupération de la page de traduction
page=$(wget -U "Mozilla/5.0" -qO - "http://translate.google.com/translate_a/t?client=t&text=${1// /%20}&sl=${2:-"en"}&tl=${3:-"fr"}" | sed "s/\],\[*\"/\n/g ; s/\]\],\[\[/\n/g ; s/\"//g")
liste_type=$(egrep "noun|^verb|^adverb|^adjective|^interjection|^preposition|^pronoun|^article|^conjunction|^," <<< "${page}")
# Si la recherche renvoie des explications
if [[ ${liste_type} ]]
then
# s/\[[[:digit:]]*\]// : il y a des fois des [0-9] qui font chier
# /[[:alpha:]]*,\[[[:alpha:]].*[[:digit:]]/ : recherche les lignes ayant les propositions
# s/\].*// : suppression de tout à partir de ]
# s/,/, /g : ajout d'un espace apres les virgules
# s/, \[/ : /p : afficher les lignes des propositions en remplacant la 1ere virgule par :
while read proposition
do
# Type de mot
unset type
# Récupération du type de mot
case $(egrep -m 1 "[[,]${proposition%% :*}$|[[,]${proposition%% :*}," <<< "${liste_type}" | sed "s/[[,]${proposition%% :*}// ; s/,.*//") in
noun) type="nom" ;;
verb) type="verbe" ;;
adverb) type="adverbe" ;;
adjective) type="adjectif" ;;
interjection) type="interjection" ;;
preposition) type="preposition" ;;
pronoun) type="pronom" ;;
article) type="article" ;;
conjunction) type="conjonction" ;;
esac
# Suppression du mot dans la liste car un meme mot peut etre de plusieurs types
liste_type="${liste_type/[[,]${proposition%% :*}}"
# Change la couleur des virgules
proposition="${proposition//,/${RAZ},${BLEUFONCE}}"
# Affiche le retour des mots avec leur description, le tout en couleur
if [[ ${type} ]]
then
echo -e "${FUSHIA}${proposition%% :*}${RAZ} de type ${FUSHIA}${type}${RAZ} : ${BLEUFONCE}${proposition#*: }${RAZ}."
else
echo -e "${FUSHIA}${proposition%% :*}${RAZ} : ${BLEUFONCE}${proposition#*: }${RAZ}."
fi
done < <(sed -n "s/\[[[:digit:]]*\]// ; /[[:alpha:][:space:]]*,\[[[:alpha:][:space:]].*[[:digit:]]/{s/\].*// ;s/,/, /g; s/, \[/ : /p}" <<< "${page}")
# En cas de phrase
elif [[ "${1}" =~ " " ]]
then
proposition=$(sed -n "/^\[.*${1}/{s/\[//g ; s/,.*//p}" <<< "${page}")
echo -e "${RAZ}Proposition de traduction de ${FUSHIA}${1}${RAZ} : ${BLEUFONCE}${proposition}${RAZ}."
# En cas de mot sans description
else
# Récupération des propositions
proposition=$(sed -n "/^[[:alpha:][:space:]]*,/{s/.*\[// ; s/,.*//p}" <<< "${page}" | sed ':z;N;s/\n/, /;bz')
# Change la couleur des virgules
proposition="${proposition//,/${RAZ},${BLEUFONCE}}"
echo -e "${RAZ}Proposition de traduction du mot ${FUSHIA}${1}${RAZ} : ${BLEUFONCE}${proposition}${RAZ}."
fi
test avec un et marcher
trad un fr en
a de type article : un, une.
an de type article : un, une.
one : un.
one de type nom : un, une, homme.
one de type adjectif : un, une, unique.
one de type pronom : un.
trad marcher fr en
walk de type verbe : marcher, se promener, aller à pied, traverser.
work de type verbe : travailler, faire, marcher, exploiter, bosser, préparer.
march de type verbe : marcher, manifester, faire sortir.
run de type verbe : fonctionner, courir, tourner, gérer, diriger, marcher.
go de type verbe : aller, passer, partir, aller à, devenir, marcher.
step de type verbe : marcher, faire un pas, faire le premier pas, faire un grand pas.
operate de type verbe : fonctionner, exploiter, opérer, faire fonctionner, gérer, marcher.
move de type verbe : déplacer, se déplacer, déménager, bouger, avancer, marcher.
tread de type verbe : marcher, fouler, écraser, presser de pied, avancer avec précaution, suivre qn de près.
function de type verbe : fonctionner, marcher, servir de.
perform de type verbe : effectuer, exécuter, réaliser, accomplir, faire, marcher.
roll de type verbe : rouler, tourner, dérouler, étendre, laminer, marcher.
perambulate de type verbe : parcourir, marcher, faire les cent pas, inspecter.
foot it de type verbe : aller à pied, marcher, danser.
file de type verbe : déposer, ficher, classer, limer, faire polluer, marcher.
dur dur mais j'ai réussis... jusqu'a ce que tu me trouves un autre mot etrange
Sinon j'ai pas pigé de quoi tu parlais pour le mode detection auto de la langue
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#22 Le 29/04/2013, à 20:45
- Ph3nix_
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
hey, ça fonctionne :D
J'ai repris ta version et j'ai modifié 2-3 trucs:
# Variables pour les couleurs
FUSHIA="\033[1;35m"
RAZ="\e[m"
BLEUFONCE="\033[1;34m"
ROUGE="\033[1;31m"
# Si pas de mot a traduire on arrete la
[[ -z "${1}" ]] && { echo -e "${ROUGE}Aucun mot à traduire d'indiqué.${RAZ}"; return; }
# Récupération de la page de traduction
html=$(wget -U "Mozilla/5.0" -qO - "http://translate.google.fr/translate_a/t?client=t&text=${1// /%20}&sl=${2:-"en"}&tl=${3:-"fr"}")
page=$(echo $html | sed "s/\],\[*\"/\n/g ; s/\]\],\[\[/\n/g ; s/\"//g")
liste_type=$(egrep "nom|^verbe|^adverbe|^adjectif|^interjection|^préposition|^pronom|^article|^conjonction|^," <<< "${page}")
# Si la recherche renvoie des explications
if [[ ${liste_type} ]]
then
# s/\[[[:digit:]]*\]// : il y a des fois des [0-9] qui font chier
# /[[:alpha:]]*,\[[[:alpha:]].*[[:digit:]]/ : recherche les lignes ayant les propositions
# s/\].*// : suppression de tout à partir de ]
# s/,/, /g : ajout d'un espace apres les virgules
# s/, \[/ : /p : afficher les lignes des propositions en remplacant la 1ere virgule par :
printf "$ROUGE%-12s$RAZ ${FUSHIA}$(echo $html | sed 's/\[\[\[\"//' | cut -d \" -f 1)$RAZ\n" "traduction"
while read proposition
do
# Type de mot
unset type
# Récupération du type de mot
type=$(egrep -m 1 "[[,]${proposition%% :*}$|[[,]${proposition%% :*}," <<< "${liste_type}" | sed "s/[[,]${proposition%% :*}// ; s/,.*//")
# Suppression du mot dans la liste car un meme mot peut etre de plusieurs types
liste_type="${liste_type/[[,]${proposition%% :*}}"
# Change la couleur des virgules
proposition="${proposition//,/${RAZ},${BLEUFONCE}}"
# Pour l'affichahe
lineToPrint="${FUSHIA}${proposition%% :*}${RAZ} : ${BLEUFONCE}${proposition#*: }${RAZ}."
[ "$currentType" != "$type" ] && currentType=$type && printf "\n$ROUGE%-12s$RAZ $lineToPrint\n" "$type" || printf "$ROUGE%-12s$RAZ $lineToPrint\n" ""
done < <(sed -n "s/\[[[:digit:]]*\]// ; /[[:alpha:][:space:]]*,\[[[:alpha:][:space:]].*[[:digit:]]/{s/\].*// ;s/,/, /g; s/, \[/ : /p}" <<< "${page}")
# En cas de phrase
elif [[ "${1}" =~ " " ]]
then
proposition=$(sed -n "/^\[.*${1}/{s/\[//g ; s/,.*//p}" <<< "${page}")
echo -e "${RAZ}Proposition de traduction de ${FUSHIA}${1}${RAZ} : ${BLEUFONCE}${proposition}${RAZ}."
# En cas de mot sans description
else
# Récupération des propositions
proposition=$(sed -n "/^[[:alpha:][:space:]]*,/{s/.*\[// ; s/,.*//p}" <<< "${page}" | sed ':z;N;s/\n/, /;bz')
# Change la couleur des virgules
proposition="${proposition//,/${RAZ},${BLEUFONCE}}"
echo -e "${RAZ}Proposition de traduction du mot ${FUSHIA}${1}${RAZ} : ${BLEUFONCE}${proposition}${RAZ}."
fi
J'ai supprimé le case pour la nature des mots (avec google.translate.fr on a directement la nature des mots en français) puis j'ai modifié 2-3 trucs pour l'affichage (rien de bien important).
Voila ce que ça donne:
adrien@adrien-laptop:~/.scripts$ translate "forward" en fr
traduction vers l'avant
nom avant : forward, bow.
adjectif avant : front, forward.
en avant : forward, onward.
prêt : ready, willing, available, fit, forward, ripe.
précoce : precocious, forward.
adverbe en avant : forward, ahead, in front, forth, before, onwards.
verbe envoyer : send, forward, send in, dispatch, throw, despatch.
avancer : advance, forward, progress, move, move forward, proceed.
faire suivre : forward, redirect, send on, post on.
expédier : send, dispatch, forward, mail, expedite, despatch.
charger : load, charge, burden, charge up, pack, forward.
Pour l'instant ton script fonctionne au poil
Je vais essayer de m’expliquer concernant la détection auto de la langue.
Si on ne précise rien pour l'instant le script fait une traduction FR -> EN. Le mieux serait de tout traduire en FR par défaut, sauf si la langue d'origine est FR (la alors on fait une traduction en EN).
Il est possible de laisser google détecter la langue du mot à traduire, sauf que google traduira automatiquement tous en EN ou dans la langue précisé dans l'attribut &tl !
Est-ce que tu vois ce que je veux dire ?
Dernière modification par Ph3nix_ (Le 29/04/2013, à 20:46)
Hiroshima 45 / Chernobyl 86 / Windows '95
Hors ligne
#23 Le 29/04/2013, à 21:04
- Hizoka
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
pas mal
ca rend mieux.
ouais ca parait compliqué de savoir dans quelle langue il faut traduire quand c'est en auto...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#24 Le 29/04/2013, à 22:13
- Ph3nix_
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
J'ai trouvé un mot étrange !!
translate.sh français fr en
traduction french
nom French : français, Français, français, Français.
French : français, Français, français, Français.
Frenchman : Français.
adjectif French : français.
Il manque l'adjectif , gallic : gaulois, français En revanche la répétition de la ligne French : français, Français, français, Français est normal (google renvoie 2 fois ce résultat avec des doublons, je ne sais pas pourquoi).
Dernière modification par Ph3nix_ (Le 29/04/2013, à 22:17)
Hiroshima 45 / Chernobyl 86 / Windows '95
Hors ligne
#25 Le 30/04/2013, à 11:04
- Hizoka
Re : [script/bash] Synonyme/Traduction d'un mot en une commande.
tiens il y a egalement le mot phrase (ou expression en fr)
si on recherche femme :
phrase,[a bit of skirt
a bit of skirt,[femme],,3.8669677e-07]]]
J'ai supprimé le case pour la nature des mots (avec google.translate.fr on a directement la nature des mots en français
bien vu
j'ai supprimé le else
# En cas de mot sans description
else
...
car en fait tous les mots sans description commence par , (qui est recherché dans le grep)
Normalement, tes remarques ne doivent plus être d’actualités
a tester un peu plus mais j'ai pas vu de soucis...
# Variables pour les couleurs
FUSHIA="\033[1;35m"
RAZ="\e[m"
BLEUFONCE="\033[1;34m"
ROUGE="\033[1;31m"
# Si pas de mot a traduire on arrete la
[[ -z "${1}" ]] && { echo -e "${ROUGE}Aucun mot à traduire d'indiqué.${RAZ}"; return; }
# Récupération de la page de traduction
page=$(wget -U "Mozilla/5.0" -qO - "http://translate.google.fr/translate_a/t?client=t&text=${1// /%20}&sl=${2:-"en"}&tl=${3:-"fr"}" | sed "s/\],\[*\"/\n/g ; s/\]\],\[\[/\n/g ; s/\"//g")
liste_type=$(egrep "^nom,\[|^verbe,\[|^adverbe,\[|^adjectif,\[|^interjection,\[|^préposition,\[|^pronom,\[|^article,\[|^conjonction,\[|^,\[|^expression,\[" <<< "${page}")
# En cas de phrase, seul cas ou la variable est vide
if [[ -z ${liste_type} ]]
then
traduction=$(sed -n "/^\[.*${1}/{s/\[//g ; s/,.*//p}" <<< "${page}")
echo -e "${RAZ}Proposition de traduction de ${FUSHIA}${1}${RAZ} : ${BLEUFONCE}${traduction}${RAZ}."
# Dans le cas de mot
else
# Nettoyage dans la variable
page="${page#*$'\n'}"
page="${page%%$'\n'${2:-"en"},,*}"
old_ifs="${IFS}"
IFS=':'
while read mot traduction
do
# Type de mot
type=$(egrep -m 1 "[[,]${mot}$|[[,]${mot}," <<< "${liste_type}" | sed "s/[[,]${mot}// ; s/,.*//")
# Suppression du mot dans la liste car un meme mot peut etre de plusieurs types
liste_type="${liste_type/[[,]${mot}}"
# Change la couleur des virgules
traduction="${traduction//,/${RAZ},${BLEUFONCE}}"
# Affichage du type de mot
[[ ${old_type} != ${type} && ${type} ]] && { echo -e "\n===== ${ROUGE}${type^}${RAZ} ====="; old_type="${type}"; }
# Texte à afficher
echo -e "${FUSHIA}${mot^}${RAZ} : ${BLEUFONCE}${traduction}${RAZ}."
done < <(sed '/\]/!d ; s/,/:/ ; s/,/, /g ; s/\[// ; s/\].*//' <<< "${page}")
IFS="${old_ifs}"
fi
Dernière modification par Hizoka (Le 30/04/2013, à 11:17)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne