#1 Le 29/08/2014, à 15:02
- Le Goss
[Résolu] Bash: chercher mot dans un doc en ligne à partir d'un index
Bonjour à tous,
Je suis en train d'indexer les pages de ce dictionnaire, pour le consulter (sans passer d'une page à l'autre ) via un script bash.
En voici les premières lignes dans un fichier indexdicoalexandre
α!"https://ia600301.us.archive.org/BookReader/BookReaderImages.php?zip=/18/items/dictionnairegrec00alexuoft/dictionnairegrec00alexuoft_jp2.zip&file=dictionnairegrec00alexuoft_jp2/dictionnairegrec00alexuoft_0021.jp2&scale=3&rotate=0"
αβακισκος!"https://ia600301.us.archive.org/BookReader/BookReaderImages.php?zip=/18/items/dictionnairegrec00alexuoft/dictionnairegrec00alexuoft_jp2.zip&file=dictionnairegrec00alexuoft_jp2/dictionnairegrec00alexuoft_0022.jp2&scale=3&rotate=0"
αβλακευτος!"https://ia600301.us.archive.org/BookReader/BookReaderImages.php?zip=/18/items/dictionnairegrec00alexuoft/dictionnairegrec00alexuoft_jp2.zip&file=dictionnairegrec00alexuoft_jp2/dictionnairegrec00alexuoft_0023.jp2&scale=3&rotate=0"
αβρομιτρης!"https://ia600301.us.archive.org/BookReader/BookReaderImages.php?zip=/18/items/dictionnairegrec00alexuoft/dictionnairegrec00alexuoft_jp2.zip&file=dictionnairegrec00alexuoft_jp2/dictionnairegrec00alexuoft_0024.jp2&scale=3&rotate=0"
αγαθοδαιμονεω!"https://ia600301.us.archive.org/BookReader/BookReaderImages.php?zip=/18/items/dictionnairegrec00alexuoft/dictionnairegrec00alexuoft_jp2.zip&file=dictionnairegrec00alexuoft_jp2/dictionnairegrec00alexuoft_0025.jp2&scale=3&rotate=0"
αγαθως!"https://ia600301.us.archive.org/BookReader/BookReaderImages.php?zip=/18/items/dictionnairegrec00alexuoft/dictionnairegrec00alexuoft_jp2.zip&file=dictionnairegrec00alexuoft_jp2/dictionnairegrec00alexuoft_0026.jp2&scale=3&rotate=0"
αγανοβλεφαρος!"https://ia600301.us.archive.org/BookReader/BookReaderImages.php?zip=/18/items/dictionnairegrec00alexuoft/dictionnairegrec00alexuoft_jp2.zip&file=dictionnairegrec00alexuoft_jp2/dictionnairegrec00alexuoft_0027.jp2&scale=3&rotate=0"
αγγελιαρχος!"https://ia600301.us.archive.org/BookReader/BookReaderImages.php?zip=/18/items/dictionnairegrec00alexuoft/dictionnairegrec00alexuoft_jp2.zip&file=dictionnairegrec00alexuoft_jp2/dictionnairegrec00alexuoft_0028.jp2&scale=3&rotate=0"
J'ai besoin de ce script python scriptpython.py rendu executable - merci nesthib !
#!/usr/bin/python
# coding: utf-8
import re, sys
# dictionnaire des termes à remplacer
substitutions = {}
with open('dictionnairelettres') as f:
for line in f.readlines():
a, b = line.decode('utf-8').split(' ', 1)
substitutions[a] = b.strip()
# expression rationelle pour extraire les motifs entre crochets
get_bracket = re.compile('\[([^][]+)\]')
# expression rationelle pour extraire les termes à remplacer
get_letters = re.compile('\w[^\w\s]*')
# fonction de substitution des termes vers les lettres grecs
def togreek(pattern):
return get_letters.sub(lambda m: substitutions[m.group()] if m.group() in substitutions else m.group(), pattern)
# on lit le fichier d'entrée ligne à ligne et on effectue les substitutions vers un nouveau fichier
with (open(sys.argv[1]) if len(sys.argv) > 1 else sys.stdin) as f_in, (open(sys.argv[2], 'w') if len(sys.argv) > 2 else sys.stdout) as f_out:
for line in f_in.xreadlines():
# on détecte les motifs entre crochets et on remplace par les lettres grecques
transcribed = get_bracket.sub(lambda m: '%s' % togreek(m.group(1)), line.decode('utf-8'))
# print(transcribed[:-1])
f_out.write(transcribed.encode('utf-8'))
Puis d'un fichier dictionnairelettres que va consulter le script python - re-merci nesthib !
a α
b β
g γ
d δ
e ε
z ζ
h η
q θ
i ι
k κ
l λ
m μ
n ν
c ξ
o ο
p π
r ρ
s σ
j ς
t τ
u υ
f φ
x χ
y ψ
w ω
A Α
B Β
G Γ
D Δ
E Ε
Z Ζ
H Η
Q Θ
I Ι
K Κ
L Λ
M Μ
N Ν
C Ξ
S Ο
P Π
R Ρ
S Σ
T Τ
U Υ
F Φ
X Χ
Y Ψ
W Ω
a)\| ᾂ
h)\| ᾒ
w)\| ᾢ
a(\| ᾃ
h(\| ᾓ
w(\| ᾣ
a)/| ᾄ
h)/| ᾔ
w)/| ᾤ
a(/| ᾅ
h(/| ᾕ
w(/| ᾥ
a)=| ᾆ
h)=| ᾖ
w)=| ᾦ
a(=| ᾇ
h(=| ᾗ
w(=| ᾧ
a)\ ἂ
e)\ ἒ
h)\ ἢ
i)\ ἲ
o)\ ὂ
u)\ ὒ
w)\ ὢ
a(\ ἃ
e(\ ἓ
h(\ ἣ
i(\ ἳ
o(\ ὃ
u(\ ὓ
w(\ ὣ
a)/ ἄ
e)/ ἔ
h)/ ἤ
i)/ ἴ
o)/ ὄ
u)/ ὔ
w)/ ὤ
a(/ ἅ
e(/ ἕ
h(/ ἥ
i(/ ἵ
o(/ ὅ
u(/ ὕ
w(/ ὥ
a)| ᾀ
h)| ᾐ
w)| ᾠ
a(| ᾁ
h(| ᾑ
w(| ᾡ
a\| ᾲ
h\| ῂ
w\| ῲ
a/| ᾴ
h/| ῄ
w/| ῴ
a)= ἆ
h)= ἦ
i)= ἶ
u)= ὖ
w)= ὦ
a(= ἇ
h(= ἧ
i(= ἷ
u(= ὗ
w(= ὧ
i+\ ῒ
u+\ ῢ
i+/ ΐ
u+/ ΰ
i+= ῗ
u+= ῧ
a=| ᾷ
h=| ῇ
w=| ῷ
a) ἀ
e) ἐ
h) ἠ
i) ἰ
o) ὀ
u) ὐ
w) ὠ
r) ῤ
a( ἁ
e( ἑ
h( ἡ
i( ἱ
o( ὁ
u( ὑ
w( ὡ
r( ῥ
a\ ὰ
e\ ὲ
h\ ὴ
i\ ὶ
o\ ὸ
u\ ὺ
w\ ὼ
a/ ά
e/ έ
h/ ή
i/ ί
o/ ό
u/ ύ
w/ ώ
a| ᾳ
h| ῃ
w| ῳ
a= ᾶ
h= ῆ
i= ῖ
u= ῦ
w= ῶ
a- ᾰ
i- ῐ
u- ῠ
i+ ϊ
u+ ϋ
a_ ᾱ
i_ ῑ
u_ ῡ
v —
et enfin mon script bash qui fait tourner le tout
#!/bin/bash
vertclair='\033[0;32m'
neutre='\033[0;m'
clear
while [ -z $ouinon ] || [ $ouinon != 'o' ]
do
echo -e "Dictionnaire Grec-Français Charles ALEXANDRE\n\nLe script fait lui-même la conversion.\nCorrespondance des lettres :\n"
echo -e "αβγδεζηθικλμνξοπρσςτυφχψω ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"
echo -e "||||||||||||||||||||||||| ||||||||||||||||||||||||"
echo -e "abgdezhqiklmncoprsjtufxyw ABGDEZHQIKLMNCOPRSTUFXYW"
echo
read -p 'Mot grec recherché (exemple: agapaw pour αγαπαω) : ' recherche
sortie=`./scriptpython.py <<EOF
[$recherche]
EOF`
echo -e "Le mot ${vertclair}$sortie${neutre} est-il le mot recherché (o/n) ?"
read -p "réponse : " ouinon
clear
done
adresse=`grep "$sortie!" indexdicoalexandre | awk -F "\"" '{printf "%s", $2}'`
firefox $adresse
Fonctionnement du script:
1. on saisit "à la française" (translittéré) les lettres grecques
2. le script renvoie la correspondance en grec et demande confirmation que c'est le bon mot recherché
3. (c'est là que je coince)...
Chaque ligne du fichier indexdicoalexandre commence par le premier mot grec de chaque page du dictionnaire.
Si je rentre ce premier mot, le script lance firefox et ouvre à la page correspondant à l'index.
Ce que cherche à faire:
- rentrer un mot qui n'est pas forcément le premier d'une page (ça c'est pas bien compliqué )
- demander au script de le situer alphabétiquement dans l'index et de lancer l'affichage de la page dont le premier mot est alphabétiquement le "plus près possible AU-DESSUS" du mot recherché
Pour info: j'ai fait quelques essais avec sort. La commande ordonne correctement les caractères grecs, et sans sourciller si les caractères sont accentués.
En espérant que ma façon de faire n'est pas tirée par les cheveux, et ne vous dissuadera pas d'y jeter un œil...
Merci pour votre aide,
Cordialement
Dernière modification par Le Goss (Le 29/08/2014, à 17:55)
Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags
Hors ligne
#2 Le 29/08/2014, à 16:45
- pingouinux
Re : [Résolu] Bash: chercher mot dans un doc en ligne à partir d'un index
Bonjour,
Voici une suggestion. Ce script en python3 entete_page_dico.py devrait faire le boulot
#!/usr/bin/python3
import sys
mot=sys.argv[1]
with open('indexdicoalexandre','r') as f : ligs=f.readlines()
lig_av=''; exclam_av=0
for lig in ligs :
exclam=lig.find('!')
mot_debut=lig[:exclam]
if mot_debut>mot : print(lig_av[exclam_av+2:-2]); sys.exit()
lig_av=lig; exclam_av=exclam
print(lig_av[exclam_av+2:-2])
Dans ton script bash, tu remplaces cette ligne
adresse=`grep "$sortie!" indexdicoalexandre | awk -F "\"" '{printf "%s", $2}'`
par celle-ci
adresse=$(./entete_page_dico.py "$sortie")
Mon script n'est pas optimisé, et parcourt toutes les lignes du dictionnaire jusqu'à trouver la bonne. Si celui-ci est très gros, on peut faire mieux.
Édité : Correction
Dernière modification par pingouinux (Le 29/08/2014, à 16:58)
Hors ligne
#3 Le 29/08/2014, à 17:05
- Le Goss
Re : [Résolu] Bash: chercher mot dans un doc en ligne à partir d'un index
Parfait !
Ceci dit, il faudra vraiment que je me penche sur la syntaxe de python... au moins pour la comprendre à défaut de l'écrire.
Mon script n'est pas optimisé, et parcourt toutes les lignes du dictionnaire jusqu'à trouver la bonne. Si celui-ci est très gros, on peut faire mieux.
Tout dépend ce que tu appelles "gros"; il devrait faire un peu plus de 1600 lignes; je parle du fichier d'index.
Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags
Hors ligne
#4 Le 29/08/2014, à 17:10
- pingouinux
Re : [Résolu] Bash: chercher mot dans un doc en ligne à partir d'un index
Si tu appelles le script une fois de temps en temps, ça devrait aller. Si tu l'appelais dans une boucle avec 100000 mots différents, il faudrait sans doute faire quelque chose.
Hors ligne
#5 Le 29/08/2014, à 17:55
- Le Goss
Re : [Résolu] Bash: chercher mot dans un doc en ligne à partir d'un index
Je n'en suis pas là! je dois lancer quelque requêtes de temps en temps.
Je me rendrais vraiment compte lorsque l'index sera terminé. Je ne manquerais pas de revenir ici donner des nouvelles et déposer l'index (s'il n'est pas trop long et encombrant pour le forum... et les modos).
Ça intéressera peut-être quelqu'un.
Si quelqu'un peut déjà me dire si c'est faisable...
Merci pour ton aide!
Sujet résolu.
Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags
Hors ligne