probleme aspell : anglais mis de force meme avec set_option(...)

probleme aspell : anglais mis de force meme avec set_option(...) - Perl - Programmation

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 ! :D
 
### 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 cité 1 fois
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)
Reply

Marsh Posté le 01-11-2011 à 00:50:52   

Reply

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 !


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

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' !!!
J'ai donc essaye de refaire setopt() avant chaque suggest() mais non, le suggest() remet 'en' avant meme de traiter le mot.

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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 :D j'en suis bien heureux :D
 
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 :
  1. require Text::Aspell;
  2. my $spell = Text::Aspell->new;
  3. foreach( "lang=fr_FR", "language-tag=fr_FR", "master=fr_FR", "encoding=iso-8859-1", "ignore-case=true", "sug-mode=bad-spellers" ){
  4.   if( $_ =~ /^(.+)=(.+)$/ ){
  5.     unless( $spell->set_option($1,$2) ){
  6.       warn("CANNOT SETOPT $_ : ".$spell->errstr);
  7.     }
  8.   }
  9. }
  10. listopt(); # -> ici la lang est bien fr
  11. $spell->create_speller;
  12. listopt(); # -> ici ca a ete remis: lang=en language-tag=en (le reste n'a pas bouge)
  13. exit;
  14. sub listopt {
  15.   print("\n### OPTIONS :\n" );
  16.   foreach( "lang", "language-tag", "master", "encoding", "ignore-case", "sug-mode" ){
  17.     print("$_=".$spell->get_option($_)."\n" );
  18.   }
  19. }


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 !


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

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 !


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

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 :
  1. static int _create_speller(Aspell_object *self)
  2. {
  3.     AspellCanHaveError *ret;
  4.     ret = new_aspell_speller(self->config);
  5.     if ( (self->errnum = aspell_error_number(ret) ) )
  6.     {
  7.         strncpy(self->lastError, aspell_error_message(ret), MAX_ERRSTR_LEN);
  8.         return 0;
  9.     }
  10.     /* The config is no longer needed (check for errors here?) */
  11.     delete_aspell_config(self->config);
  12.     self->config = NULL;
  13.     self->speller = to_aspell_speller(ret);
  14.     self->config  = aspell_speller_config(self->speller);
  15.     return 1;
  16. }


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+,


Message édité par gilou le 01-11-2011 à 11:51:38

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 01-11-2011 à 11:50:25    

Citation :

-> sur mon desktop, aucun probleme !  
 
-> sur mon serveur, ca se produit toujours, malgre tous les essais suivants :

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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)


Message édité par MisterBark le 01-11-2011 à 16:41:47

---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

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 ?


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

Marsh Posté le 01-11-2011 à 17:41:34    

MisterBark a écrit :

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 ?

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 01-11-2011 à 17:41:34   

Reply

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 :)


Message édité par MisterBark le 01-11-2011 à 18:00:56

---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

Marsh Posté le 01-11-2011 à 18:08:50    

OK je me suis rejoui trop vite !
Les suggestions sont completement foireuses !


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

Marsh Posté le 01-11-2011 à 18:20:00    

Mais garde t'il les bonnes options maintenant?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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


Message édité par MisterBark le 01-11-2011 à 18:36:09

---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

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 :(


Message édité par MisterBark le 01-11-2011 à 18:47:38

---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

Marsh Posté le 01-11-2011 à 18:59:52    

aspell dump dicts
et
$spell->list_dictionaries
 
indiquent strictement la meme chose


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

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


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

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+,


Message édité par gilou le 01-11-2011 à 22:20:49

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 01-11-2011 à 22:34:53    

lol
merci encore :D


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed