Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails)

#1 Le 30/01/2013, à 01: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 wink

# 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*(&nbsp;)+","")
		gsub("(&nbsp;)+",", ")
		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, à 23:04)


Hiroshima 45 / Chernobyl 86 / Windows '95

Hors ligne

#2 Le 31/01/2013, à 18: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
Dell Vostro 3550 Ubuntu 14.04 64 bits

En ligne

#3 Le 03/02/2013, à 01: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 wink

1359848761.png
cool

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 smile

Dernière modification par cracolinux (Le 03/02/2013, à 01:49)


Pixup : postez vos images vite et bien
« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#4 Le 23/02/2013, à 15: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 ! smile

Hors ligne

#5 Le 04/03/2013, à 21: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, à 03: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 wink


Hiroshima 45 / Chernobyl 86 / Windows '95

Hors ligne

#7 Le 07/03/2013, à 11: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, à 13: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 20/03/2013, à 00:21

Hizoka

Re : [script/bash] Synonyme/Traduction d'un mot en une commande.

merci a toi smile

Hors ligne

#10 Le 26/03/2013, à 20: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, à 19: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, à 19:22)

Hors ligne

#12 Le 28/03/2013, à 19: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, à 20: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, à 01: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 smile

Dernière modification par Hizoka (Le 28/04/2013, à 21:12)

Hors ligne

#15 Le 30/03/2013, à 16: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!


Pixup : postez vos images vite et bien
« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#16 Le 30/03/2013, à 19:47

Hizoka

Re : [script/bash] Synonyme/Traduction d'un mot en une commande.

vrai si la variable $1 contient un espace.

equivalent à [[ "${1}" == *" "* ]]

Hors ligne

#17 Le 28/04/2013, à 14: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 big_smile

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 smile

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, à 16:07)


Hiroshima 45 / Chernobyl 86 / Windows '95

Hors ligne

#18 Le 28/04/2013, à 21: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, à 21:13)

Hors ligne

#19 Le 29/04/2013, à 01: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 tongue

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, à 01:22)


Hiroshima 45 / Chernobyl 86 / Windows '95

Hors ligne

#20 Le 29/04/2013, à 10:22

Hizoka

Re : [script/bash] Synonyme/Traduction d'un mot en une commande.

Non c'est toujours pas bon tongue

oups une erreur de copié collé tongue

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...

Hors ligne

#21 Le 29/04/2013, à 10:47

Hizoka

Re : [script/bash] Synonyme/Traduction d'un mot en une commande.

Bon bah normalement ca passe smile

# 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 tongue

Sinon j'ai pas pigé de quoi tu parlais pour le mode detection auto de la langue

Hors ligne

#22 Le 29/04/2013, à 21:45

Ph3nix_

Re : [script/bash] Synonyme/Traduction d'un mot en une commande.

hey, ça fonctionne  big_smile: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 wink

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, à 21:46)


Hiroshima 45 / Chernobyl 86 / Windows '95

Hors ligne

#23 Le 29/04/2013, à 22:04

Hizoka

Re : [script/bash] Synonyme/Traduction d'un mot en une commande.

pas mal smile
ca rend mieux.

ouais ca parait compliqué de savoir dans quelle langue il faut traduire quand c'est en auto...

Hors ligne

#24 Le 29/04/2013, à 23: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  yikes 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, à 23:17)


Hiroshima 45 / Chernobyl 86 / Windows '95

Hors ligne

#25 Le 30/04/2013, à 12: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) smile
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 smile
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, à 12:17)

Hors ligne

Haut de page ↑