#26 Le 27/01/2013, à 05:36
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
La deuxième partie ne se passe pas comme je voudrais:
@lmde64:~/Bureau/hussarde$ mv hunspell_fr_FR{.temp.}
mv: opérande du fichier cible manquant après « hunspell_fr_FR{.temp.} »
Saisissez « mv --help » pour plus d'informations.
Rhaa, j'ai raté la virgule.. Je recommence
Ce coup-ci ça marche!! Ça va mieux quand je tire la langue.
Merci beaucoup. Je crois maintenant que j'ai complètement fait le tour de la question. Je mettrai un lien sur ce fil lors de la publication complète, sans doute d'ici quelques jours (une semaine?).
Dernière modification par roger64 (Le 27/01/2013, à 05:46)
Hors ligne
#27 Le 27/01/2013, à 09:43
- pingouinux
Re : [résolu] Créer une liste de noms à partir d'un odt
Bonjour,
Juste une remarque :
Si les fichiers A et B sont déjà triés, au lieu de tout retrier
sort -u A B >B.temp
on peut fusionner les fichiers, ce qui est plus rapide
sort -um A B >B.temp
Hors ligne
#28 Le 27/01/2013, à 13:24
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Il ne faut pas maintenir
cat A B
avant?
Comme ceci?
cat A B | sort -um A B >B.temp
Hors ligne
#29 Le 27/01/2013, à 13:48
- pingouinux
Re : [résolu] Créer une liste de noms à partir d'un odt
Dans la première commande du #27, le pipe n'est pas nécessaire. Dans la seconde, ça ne marcherait pas, car il faut que sort distingue les deux fichiers A et B.
cat A B | sort -um >B.temp
ne trierait pas les fichiers.
Hors ligne
#30 Le 27/01/2013, à 13:50
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Bon ben ça marche plus. Je crée bien un fichier caché ~/.hunspell_fr_FR.temp qui est placé juste à côté de l'autre (~/.hunspell_fr_FR) mais c'est la deuxième commande, la partie avec mv qui ne donne rien. Pourtant le script arrive jusqu'à son terme et annonce fièrement "Terminé".
J'ai bien le droit d'écrire sur ce fichier.
Edit: fichier caché avec un point
Dernière modification par roger64 (Le 27/01/2013, à 14:54)
Hors ligne
#31 Le 27/01/2013, à 17:33
- nesthib
Re : [résolu] Créer une liste de noms à partir d'un odt
Oui, honte à moi d'avoir fait un « useless use of cat »
@roger64 : donne le code du script.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#32 Le 28/01/2013, à 01:14
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Bonjour
#! /bin/bash
# dicomax: insérer une liste de mots dans votre dictionnaire utilisateur hunspell (mis au point avec pingouinux et nesthib).
# Paquets nécessaires: zenity, odt2txt, hunspell, hunspell-fr.
# Le dictionnaire utilisateur est un fichier texte brut (text-plain) placé par défaut à ~/.hunspell_fr_FR Modifiez si nécessaire.
DICO="~/.hunspell_fr_FR"
name=$(zenity --entry --title "Nom fichier txt à insérer" --text "Nom de votre fichier txt" --entry-text=Nom?)
echo "name=$name"
sort -um "${name}".txt "$DICO" >"$DICO".temp
mv "$DICO"{.temp,}
echo "Terminé"
zenity --info --text "Terminé"
J'apprends des choses rigolotes...
Dernière modification par roger64 (Le 28/01/2013, à 01:25)
Hors ligne
#33 Le 28/01/2013, à 16:04
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Bonjour
J'ai fini par faire fonctionner de façon manuelle avec les fichiers cachés. Je vais donc chercher ce qui dans le script pose un problème. Désolé de vous avoir à nouveau embêtés avec cette histoire et merci pour votre aide.
Dernière modification par roger64 (Le 28/01/2013, à 16:13)
Hors ligne
#34 Le 29/01/2013, à 03:54
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Bonjour
J'ai recommencé mes tests une kyrielle de fois. J'ai supprimé la variable "dico" et j'utilise le vrai chemin.
Le script fonctionne maintenant jusqu'à créer le fichier temporaire.
La partie mv ci-dessous ne fonctionne pas même si le script annonce "terminé".
mv ~/.hunspell_fr_FR{.temp,}
- Lorsque je copie cette partie mv ci-dessus à partir du texte du script et que je la colle dans un terminal puis que je la fais exécuter, elle fonctionne. Je n'y comprends rien.
- Lorsque j'exécute les deux commandes sort et mv dans un terminal, tout va bien.
Langue au chat.
#! /bin/bash
# dicomax: insérer une liste de mots dans votre dictionnaire utilisateur hunspell (mis au point avec pingouinux et nesthib).V1. Février 2013.
# Paquets nécessaires: zenity, odt2txt, hunspell, hunspell-fr.
# Le dictionnaire utilisateur est un fichier texte brut (text-plain) placé par défaut à ~/.hunspell_fr_FR Modifiez si nécessaire.
name=$(zenity --entry --title "Nom fichier txt" --text "Nom de votre fichier txt" --entry-text=Nom?)
echo "name=$name"
sort -um "${name}".txt ~/.hunspell_fr_FR >~/.hunspell_fr_FR.temp
mv ~/.hunspell_fr_FR{.temp,}
echo "Terminé"
zenity --info --text "Terminé"
# Plus d'infos sur le man hunspell.
Dernière modification par roger64 (Le 29/01/2013, à 03:57)
Hors ligne
#35 Le 29/01/2013, à 05:25
- nesthib
Re : [résolu] Créer une liste de noms à partir d'un odt
Peux-tu mettre un « echo » devant la ligne qui pose problème ?
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#36 Le 29/01/2013, à 05:58
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Je ne sais pas si c'est ce que tu proposais. Ce que j'ai fait ne change rien. La ligne mv se s'exécute pas avec le script. Il n'y a pas de faute de frappe.
#! /bin/bash
# dicomax: insérer une liste de mots dans votre dictionnaire utilisateur hunspell (mis au point avec pingouinux et nesthib).V1. Février 2013.
# Paquets nécessaires: zenity, odt2txt, hunspell, hunspell-fr.
# Le dictionnaire utilisateur est un fichier texte brut (text-plain) placé par défaut à ~/.hunspell_fr_FR Modifiez si nécessaire.
name=$(zenity --entry --title "Nom fichier txt" --text "Nom de votre fichier txt" --entry-text=Nom?)
echo "name=$name"
sort -um "${name}".txt ~/.hunspell_fr_FR >~/.hunspell_fr_FR.temp
echo
mv ~/.hunspell_fr_FR{.temp,}
echo "Terminé"
zenity --info --text "Terminé"
Dernière modification par roger64 (Le 29/01/2013, à 06:03)
Hors ligne
#37 Le 29/01/2013, à 06:15
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Petit progrès: lorsque j'utilise le script avec le terminal,
./dicomaxtest
il me demande le nom du fichier, puis tout fonctionne jusqu'au bout. Je ne vois même pas la création du fichier temporaire, tellement ça va vite.
roger@lmde64:~/Bureau/hussarde$ ./dicomaxtest
./dicomaxtest: ligne1: $'\357\273\277#!' : commande introuvable
name=hussarde3
Terminé
roger@lmde64:~/Bureau/hussarde$
Lorsque j'utilise le script seul en cliquant dessus, il s'arrête au fichier temporaire.
Dernière modification par roger64 (Le 29/01/2013, à 06:24)
Hors ligne
#38 Le 29/01/2013, à 07:01
- nesthib
Re : [résolu] Créer une liste de noms à partir d'un odt
Je pensais plus à un :
echo mv ~/.hunspell_fr_FR{.temp,}
pour voir si la commande lancée est bien interprétée (sinon un echo tout seul ça ne sert effectivement à rien)
Et au lieu de « mv ~/.hunspell_fr_FR{.temp,} » si tu mets :
cp ~/.hunspell_fr_FR{.temp,.test}
tu te retrouves avec quels fichiers ?
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#39 Le 29/01/2013, à 07:17
- pingouinux
Re : [résolu] Créer une liste de noms à partir d'un odt
Bonjour,
./dicomaxtest: ligne1: $'\357\273\277#!' : commande introuvable
C'est parce qu'il y a ce caractère en tête de la première ligne du fichier (devant #! /bin/bash) :
<UFEFF> /xef/xbb/xbf ZERO WIDTH NO-BREAK SPACE
Ajouté : Tu dois obtenir quelque chose dans ce genre
$ file le_script
le_script: Bourne-Again shell script, UTF-8 Unicode (with BOM) text executable
Dernière modification par pingouinux (Le 29/01/2013, à 07:24)
Hors ligne
#40 Le 29/01/2013, à 17:08
- nesthib
Re : [résolu] Créer une liste de noms à partir d'un odt
Ah oui, tiens je n'avais pas prêté attention. Je me disais bien qu'il y avait une erreur d'interprétation du shebang
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#41 Le 30/01/2013, à 04:03
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Désolé de ne pas être en mesure de vous répondre immédiatement.
Effectivement j'avais un bidule - invisible - en trop en tête de fichier...
Maintenant, cela est remis en ordre.
$ file minimax
minimax: Bourne-Again shell script, UTF-8 Unicode text executable
roger@lmde64:~/Bureau/hussarde$ file dicomax
dicomax: Bourne-Again shell script, UTF-8 Unicode text executable
Je teste le script mais j'obtiens la même chose. La partie mv ou la partie cp (j'ai essayé les deux) ne s'exécute pas, même avec le terminal. C'est à n'y rien comprendre... En fin de script, les fichiers sont comme ça:
avec echo cp
$ ./dicomax
name=hussarde3
cp /home/roger/.hunspell_fr_FR.temp /home/roger/.hunspell_fr_FR.test
Terminé
roger@lmde64:~/Bureau/hussarde$
avec echo mv
$ ./dicomax
name=hussarde3
mv /home/roger/.hunspell_fr_FR.temp /home/roger/.hunspell_fr_FR
Terminé
roger@lmde64:~/Bureau/hussarde$
Dernière édition en date avec ce blocage pour le script dicomax.
http://dl.dropbox.com/u/31141350/hussarde.zip
Dernière modification par roger64 (Le 30/01/2013, à 04:51)
Hors ligne
#42 Le 30/01/2013, à 05:12
- nesthib
Re : [résolu] Créer une liste de noms à partir d'un odt
Le echo nous dit que le shell interprète bien la bonne commande… peux-tu fais un :
ls -l /home/roger/.hunspell_fr_FR*
puis :
mv /home/roger/.hunspell_fr_FR.temp /home/roger/.hunspell_fr_FR
et à nouveau :
ls -l /home/roger/.hunspell_fr_FR*
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#43 Le 30/01/2013, à 14:12
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Bonjour
Je ne sais pas pourquoi mais ma connexion avec le forum est difficile depuis le pays où je me trouve. Elle peut disparaître quelques heures, puis elle revient.
J'ai supprimé le echo et maintenant le script arrive régulièrement jusqu'à son terme, tant depuis la commande du terminal que depuis le script.
J'ai le sentiment d'avoir abusé de votre patience et je vous remercie encore pour votre aide et vos brillantes solutions pour ces deux petits scripts bourrés d'une énergie surprenante. Ils seront publiés ce week-end.
$ ls -l /home/roger/.hunspell_fr_FR*
-rw-r--r-- 1 roger roger 13 janv. 30 17:01 /home/roger/.hunspell_fr_FR
roger@lmde64:~$
Dernière modification par roger64 (Le 30/01/2013, à 14:19)
Hors ligne
#44 Le 30/01/2013, à 15:54
- nesthib
Re : [résolu] Créer une liste de noms à partir d'un odt
Le echo n'était là que pour déboguer, normal que cela ne fonctionnait pas si tu l'avais laissé
Bon courage avec ton script.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#45 Le 02/02/2013, à 04:44
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Hors ligne
#46 Le 07/02/2013, à 02:52
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Bonjour
Je reprends contact après une semaine d'utilisation intensive. Le script fonctionne remarquablement vite. Je ne sais pas si c'est facile à faire: je souhaiterais que les noms sélectionnés par sed et grep puissent inclure également sans les tronquer les noms qui contiennent de un à trois points (il s'agit bien de points à l'intérieur du nom) mais bien sûr pas de points à la fin.
Exemple: la princesse de Sag.n, le duc de Ma...off
Actuellement le script me donne pour ces deux noms:
sag
n
Ma
off
Ce qui n'est pas très pratique.
Voici le script:
#!/bin/bash
# minimax: la correction orthographique sans la fenêtre de dialogue (mis au point avec pingouinux et nesthib).V1. février 2013.
# Paquets nécessaires: zenity, odt2txt, hunspell, hunspell-fr.
name=$(zenity --entry --title "Nom fichier odt" --text "Nom de votre fichier odt" --entry-text=Nom?)
echo "name=$name"
odt2txt --width=-1 "${name}".odt > "${name}".txt
# Liste standard des mots inconnus et/ou fautifs
sed 's/[^[:alpha:]-]/\n/g' "${name}".txt | grep '^[[:alpha:]]' | sort -u > "${name}"2.txt
hunspell -l "${name}"2.txt > "${name}"3.txt
# Liste des formes élidées (à titre d'information).
grep -oe "[[:alpha:]]\+[’][[:alpha:]'-]*[[:alpha:]]\+" "${name}".txt | sort -u > "${name}"4.txt
hunspell -l "${name}"4.txt > "${name}"5.txt
echo "Terminé"
zenity --info --text "Terminé"
Hors ligne
#47 Le 07/02/2013, à 07:04
- pingouinux
Re : [résolu] Créer une liste de noms à partir d'un odt
Bonjour,
Essaye de remplacer cette ligne
sed 's/[^[:alpha:]-]/\n/g' "${name}".txt | grep '^[[:alpha:]]' | sort -u > "${name}"2.txt
par celle-ci
sed "s/[\.]\{4,\}/\n/g;s/[^[:alpha:]'-\.]/\n/g;s/^\.\+//;s/\.\+$//" "${name}".txt | grep '^[[:alpha:]]' | sort -u > "${name}"2.txt
Dernière modification par pingouinux (Le 07/02/2013, à 07:06)
Hors ligne
#48 Le 07/02/2013, à 09:31
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Bonjour
Merci de ta réponse. Il me semble que qui a été rajouté, c'est les apostrophes et dans ce cas, j'obtiens un bien trop grand nombre de faux positifs. Je ne souhaitais avoir que les points (de 1 à 3) placés à l'intérieur d'un mot. Ils n'y sont pas. Il vaut mieux repartir de la formule initiale je crois:
# Liste standard des mots inconnus et/ou fautifs
sed 's/[^[:alpha:]-]/\n/g' "${name}".txt | grep '^[[:alpha:]]' | sort -u > "${name}"2.txt
Voici un texte qui peut servir de test. Lady Lamb... resterait telle quelle (à savoir Lamb) car les points se trouvent à la fin du nom (pour éviter d'autres faux positifs),
mais Laure H..man serait prise en compte (à savoir: H..man)
[spoiler]
Très nombreux les péripatéticiens du matin. Les uns ne dépassent pas les beaux marronniers de la Potinière, qu’il ne faut pas confondre avec le Club des pannés ; la Potinière est sur la rive droite tandis que le Club des pannés est sur la rive gauche de la rue de Presbourg ; les autres poussent jusqu’à l’hôtel Lebey ou même jusqu’au Lac.
Parmi les grands marcheurs, citons l’ami Henri Car..er, qu’on est presque sûr de trouver à l’entrée de l’allée des Poteaux avec son caniche. Les deux mains dans les poches du veston, la moustache retroussée, l’air d’un bon garçon heureux, il arrête tout Paris au passage, et échange cinquante poignées de main en une demi-heure.
Le long de l’avenue, la belle madame Porg..s, la Perle du Brésil, grande, brune, taille superbe, marchant a très grands pas. M. et madame Wilk…on ; celle-ci en manteau tout simple cachant la robe du matin. Le ménage ne manque jamais à cette petite promenade apéritive. Lady Lamb…, très grande, avec une taille unique ; Josep.a, avec sa petite fille ; Marguerite de B..on, songeant à son dernier bal, et échangeant quelques mots avec Cora P…, abritée sous une ombrelle rouge.
Grande animation à la Potinière, où la séduisante Laure H..man ne manque jamais de faire une station, soit à pied, soit en arrêtant son poney. Alphonsine Dem…y, la Parisienne par excellence, arrêtera probablement aussi son duc. On causera là avec Urib…en, Frank le Har…el, à la barbe de fleuve, avec Boiheb…rt, qui a les chapeaux aux rebords les plus plats et les cravates les mieux nouées de Paris. On saluera au passage le prince de Sag.n, ayant déjà la fleur à la boutonnière et paraissant poudré et frisé à frimas.
Midi. Le Bois redevient tout à fait désert. Les oiseaux, un moment effrayés par tout ce vacarme parisien, reprennent leurs chansons interrompues, aussitôt que M. Copp…ns de Font…y et son fils, les deux derniers, ont repris ventre à terre le chemin du déjeuner.
[/spoiler]
Dommage que le spoiler ne semble pas fonctionner.
Dernière modification par roger64 (Le 07/02/2013, à 09:38)
Hors ligne
#49 Le 07/02/2013, à 10:56
- pingouinux
Re : [résolu] Créer une liste de noms à partir d'un odt
Ceci semble mieux, en décomposant le sed :
sed "s/[\.]\{4,\}/\n/g" "${name}".txt | sed "s/[^[:alpha:]'-\.]/\n/g" | sed "s/^\.\+//;s/\.\+$//" | grep '^[[:alpha:]]' | sort -u > "${name}"2.txt
Il reste néanmoins un problème avec ce caractère "…", qui est différent de la succession de trois "." .
… => <U2026> /xe2/x80/xa6 HORIZONTAL ELLIPSIS
. => <U002E> /x2e FULL STOP
Hors ligne
#50 Le 07/02/2013, à 11:46
- roger64
Re : [résolu] Créer une liste de noms à partir d'un odt
Cela fonctionne pour le point. Il y a effectivement la question du caractère "trois points" que tu as signalée.
Malheureusement, à la phase suivante, hunspell n'en tient pas compte et fait comme si ce point que tu as eu du mal à lui fournir, n'existait pas et continue à découper le mot en deux de part et d'autre. Je ne sais pas comment l'y forcer, donc je me vois contraint de renoncer à cette idée et m'en tenir dans l'immédiat à la version précédente. Il semble que mon perfectionnisme ne soit pas de bon conseil.
Merci de ton aide.
Hors ligne