Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 27/01/2013, à 04: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. tongue
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, à 04:46)

Hors ligne

#27 Le 27/01/2013, à 08: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, à 12: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, à 12: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, à 12: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, à 13:54)

Hors ligne

#31 Le 27/01/2013, à 16: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 » smile

@roger64 : donne le code du script.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#32 Le 28/01/2013, à 00: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... smile

Dernière modification par roger64 (Le 28/01/2013, à 00:25)

Hors ligne

#33 Le 28/01/2013, à 15: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, à 15:13)

Hors ligne

#34 Le 29/01/2013, à 02: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, à 02:57)

Hors ligne

#35 Le 29/01/2013, à 04: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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#36 Le 29/01/2013, à 04: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, à 05:03)

Hors ligne

#37 Le 29/01/2013, à 05: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, à 05:24)

Hors ligne

#38 Le 29/01/2013, à 06: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,}

tongue

pour voir si la commande lancée est bien interprétée (sinon un echo tout seul ça ne sert effectivement à rien) wink

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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#39 Le 29/01/2013, à 06:17

pingouinux

Re : [résolu] Créer une liste de noms à partir d'un odt

Bonjour,

roger64 #37 a écrit :
./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, à 06:24)

Hors ligne

#40 Le 29/01/2013, à 16: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 smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#41 Le 30/01/2013, à 03: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... hmm
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:

1359512084.jpg

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, à 03:51)

Hors ligne

#42 Le 30/01/2013, à 04: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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#43 Le 30/01/2013, à 13: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, à 13:19)

Hors ligne

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

Bon courage avec ton script.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#45 Le 02/02/2013, à 03:44

roger64

Re : [résolu] Créer une liste de noms à partir d'un odt

Hors ligne

#46 Le 07/02/2013, à 01: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, à 06: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, à 06:06)

Hors ligne

#48 Le 07/02/2013, à 08: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, à 08:38)

Hors ligne

#49 Le 07/02/2013, à 09: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, à 10: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