probleme aspell : anglais mis de force meme avec set_option(...) - Perl - Programmation
Marsh Posté le 01-11-2011 à 01:36:38
je viens de reinstaller aspell-fr un peu mieux et cette fois c'est un autre probleme : je n'ai qu'une liste minuscule de francais suisse !
Par ex,
"voulais" est une faute, il propose Valais, Bâle, Soleure
pour "bonjour" il propose Nonante, Soleure, Berne
pourtant il n'y a rien de suisse dans mes options !
Marsh Posté le 01-11-2011 à 02:51:52
MisterBark a écrit : Salut,Je viens de me rendre compte qu'avant l'appel de la fonction suggest(), get_option('lang') est bien "fr_FR", mais juste apres le premier appel, ca devient 'en' !!! |
C'est pas ce qui est documenté dans la doc du module?
Citation : The creation of the speller builds a configuration profile in the speller structure. Results from calling print_config() and get_option() will change after calling create_speller(). In general, it's best to read config settings back after calling create_speller() or after calling spell() or suggest(). |
A+,
Marsh Posté le 01-11-2011 à 06:14:56
Bon, deja, ca fait vraiment des annees que je te voyais deja sur ce forum, et je m'apercois que tu es toujours la, et toujours premier a repondre j'en suis bien heureux
Pour spell, j'ai beaucoup tourne autour de ca et il faudrait renommer le topic en :
"create_speller() remet lang=en de force apres set_option()"
VOILA LE PROBLEME :
Code :
|
le programme sur une seule ligne:
perl -e 'require Text::Aspell; my $spell = Text::Aspell->new; foreach( "lang=fr_FR", "language-tag=fr_FR", "master=fr_FR", "encoding=iso-8859-1", "ignore-case=true", "sug-mode=bad-spellers" ){ if( $_ =~ /^(.+)=(.+)$/ ){ unless( $spell->set_option($1,$2) ){ warn("CANNOT SETOPT $_ : ".$spell->errstr); } } } listopt(); $spell->create_speller; listopt(); exit; sub listopt { print("\n### OPTIONS :\n" ); foreach( "lang", "language-tag", "master", "encoding", "ignore-case", "sug-mode" ){ print("$_=".$spell->get_option($_)."\n" ); } }'
Maintenant, VOILA QUAND CA SE PRODUIT :
-> sur mon desktop, aucun probleme !
-> sur mon serveur, ca se produit toujours, malgre tous les essais suivants :
- modification ou suppression de ~/.aspell.conf
- copie complete de tout le dossier system aspell depuis mon desktop puisque ca marche dessus
Rien n'y fait ! l'anglais est remis de force !
Marsh Posté le 01-11-2011 à 07:48:33
c'est un probleme purement avec perl
car lorsque j'utilise le binary :
aspell --lang fr_FR --suggest check test-file
aspell --lang en_US --suggest check test-file
ou test-file ne contient que le mot "prenom" sans accent, les suggestions sont dans les bonnes langues !
Donc c'est le perl qui ne veut vraiment pas du francais !
Marsh Posté le 01-11-2011 à 10:48:29
C'est pas perl, c'est le module en question, et comme je te l'ai dit plus haut, c'est documenté que le module peut faire cela (virer les options mises).
Tu as essayé de remettre les options avec set_option() après l'appel à $spell->create_speller et ceux au premier appel de spell() et suggest() si on n'est pas passé par create_speller, comme indiqué? Ah oui, je viens de voir ton EDIT.
C'est même totallement clair dans le code XS (une sorte de C qui fait le lien entre perl et le code externe de l'API Aspell ), que les options sont virées:
Code :
|
delete_aspell_config(self->config); ca vire la config
après, il veut remettre ça avec self->config = aspell_speller_config(self->speller); avec les options supplémentaires ajoutées lors de la création.
Mais il semble que ça marche pas dans certaines situations, ça.
D'ou l'intérêt (peut être) de remettre les options après $spell->create_speller (quoique a priori, ça n'a plus d'effet après la création)
A+,
Marsh Posté le 01-11-2011 à 11:50:25
Citation : -> sur mon desktop, aucun probleme ! |
C'est à dire que tu fais marcher le script sans pb sur ton desktop?
Et tu l'utilise invoques tu le script sur le serveur, que je comprenne un peu mieux?
A+,
Marsh Posté le 01-11-2011 à 16:40:24
Oui je parlais du MODULE perl bien sur.
Oui, si je teste mon code perl ci-dessus sur mon desktop (une stupide ubuntu) ca marche sans aucun probleme : je peux specifier en_US ou fr_FR et les options restent apres create_speller().
Par contre sur le serveur, et meme apres avoir soigneusement remplace toute l'arbo system de aspell et supprime ou modifie les .conf ca me force l'anglais d'appeler create_speller() , directement, ou par suggest()
Je vais tester de suite en copiant le module perl du ubuntu vers le serveur, puisqu'on sait maintenant que ca ne vient pas de aspell lui meme (le binaire fonctionne)
Marsh Posté le 01-11-2011 à 17:37:57
Aspell.pm de ubuntu et du serveur sont strictement le meme fichier !
ca pourrait etre un autre module utilise par Aspell.pm ...
aie aie aie... ca va etre dur de trouver d'ou ca vient ! ((
une idee ?
Marsh Posté le 01-11-2011 à 17:41:34
MisterBark a écrit : Aspell.pm de ubuntu et du serveur sont strictement le meme fichier ! |
Il faut faire une vraie install du module (qui prend en compte sans doute les variables d'environnement), une simple copie a peu de chances de fonctionner.
A+,
Marsh Posté le 01-11-2011 à 17:55:10
HAHAHA CA MARCHE !!! ))
Bon, j'ai effectivement reinstalle le module mais cette fois avec LIBS=... !
Ca devait utiliser un mauvais emplacement !
c'est fou de perdre tant de temps sur des anneries !
MERCI gilou
Marsh Posté le 01-11-2011 à 18:08:50
OK je me suis rejoui trop vite !
Les suggestions sont completement foireuses !
Marsh Posté le 01-11-2011 à 18:20:00
Mais garde t'il les bonnes options maintenant?
A+,
Marsh Posté le 01-11-2011 à 18:33:09
OUI ! cette fois il garde les bonnes options dans tous les cas.
Les suggestions en francais aucun probleme, mais l'anglais devient n'importe quoi :
perl -e 'require Text::Aspell; my $spell = Text::Aspell->new; foreach( "lang=en", "language-tag=en", "master=en_US", "encoding=utf-8", "ignore-case=true", "sug-mode=bad-spellers" ){ if( $_ =~ /^(.+)=(.+)$/ ){ unless( $spell->set_option($1,$2) ){ warn("CANNOT SETOPT $_ : ".$spell->errstr); } } } listopt(); foreach( $spell->suggest($ARGV[0]) ){ print("$_\n" ); } listopt(); exit; sub listopt { print("\n### OPTIONS :\n" ); foreach( "lang", "language-tag", "master", "encoding", "ignore-case", "sug-mode" ){ print("$_=".$spell->get_option($_)."\n" ); } }' helo
"helo" en anglais me propose :
Heloise
ole
plow
chili
color
dolor
honor
humor
melee
valor
Alors qu'avec le binaire aspell :
hello
halo
he'll
...
J'ai reinstalle le dic en, puis encore le module, et ca ne change rien
Marsh Posté le 01-11-2011 à 18:42:10
si ca continue je vais me facher et executer le binaire depuis mon cgi... ce qui serait parfaitement ridicule !
je suis vraiment a court d'idees
Marsh Posté le 01-11-2011 à 18:59:52
aspell dump dicts
et
$spell->list_dictionaries
indiquent strictement la meme chose
Marsh Posté le 01-11-2011 à 20:40:02
BON - TOUT MARCHE !
par contre faut pas me demander comment, j'en ai pas la moindre idee ! sorry !
j'ai essaye des tonnes de choses, copie des bakups, remplace des ficheirs avec de nouveaux dictionnaires etc... et apres des heures d'essais ca a fini par marcher....
Marsh Posté le 01-11-2011 à 22:20:28
Désolé, mais j'étais en train d'aider Jovalise a faire fonctionner par programme un LCD (et diagnostiquer à travers le web par programme que c'était ses soudures qui foutaient le souk a pas été si simple...)
Bon ben tant mieux que tout marche alors:
A+,
Marsh Posté le 01-11-2011 à 22:34:53
lol
merci encore
Marsh Posté le 01-11-2011 à 00:50:52
Salut,
J'ai un probleme avec aspell (Text::Aspell)
Je viens d'installer le francais sur mon serveur, et il est bien dans la liste: aspell dump dicts (il y a fr_FR parmi plein d'autres)
Dans mon perl, je definis avec set_option() les options suivantes :
lang=fr_FR
language-tag=fr_FR
master=fr_FR
encoding=iso-8859-1
ignore-case=true
sug-mode=bad-spellers
Aucun des appels set_option() est false.
J'ai teste en supprimant .aspell.conf du home du user perl.
Et rien n'y fait, les suggestions sont en anglais !
Auriez vous des idees ?
MERCI !
### PS :
Je viens de me rendre compte qu'avant l'appel de la fonction suggest(), get_option('lang') est bien "fr_FR", mais juste apres le premier appel, ca devient 'en' !!!
J'ai donc essaye de refaire setopt() avant chaque suggest() mais non, le suggest() remet 'en' avant meme de traiter le mot.
Message édité par MisterBark le 01-11-2011 à 01:12:47
---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)