sdx-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sdx-users] SDX et le multilinguisme


From: Pierrick Brihaye
Subject: [sdx-users] SDX et le multilinguisme
Date: Thu, 1 Apr 2004 19:08:00 +0200

Bonsoir,

Une petite réflexion pour le WE :-)

J'entends dire, ici ou là ;-), que SDX n'est pas vraiment multilingue.
Nonobstant le fait que je préfèrerais l'entendre sur cette liste, i.e. au
sein de la Communauté (cool, brother !)... c'est vrai.

Il manque à SDX ou, plutôt à Lucene, ce MultilingualAnalyzer qui rendrait
vraiment sdx multilingue, i.e. capable d'indexer et de retourner des
SimpleQuery "pertinentes".

En fait, le problème vient plutôt de chez Lucene, où les packages d'analyse
ressemblent un peu à une auberge espagnole (cf. l'exemple récent de
l'analyseur allemand qui est en fait un (mauvais) stemmer).

Il nous faudrait donc un MultilingualAnalyzer qui, naturellement, implémente
l'interface Lucene, i.e. :

MultilingualAnalyzer ()
tokenStream(String fieldName, Reader reader)

Le contructeur par défaut est obligatoire mais on va en reparler de suite
car on peut concevoir des constructeurs plus solides.

Naturellement, ce MultilingualAnalyzer n'aurait d'utilité que s'il est
capable de brancher des analyseurs pour chaque langue intéressante. Il y a
différentes façons de le faire :

codage en dur : MultilingualAnalyzer.addAnalyzer(myLocale, myAnalyzer)

Lire un fichier XML de config, peut-être plus dans l'esprit SDX.
Introspecter le package Lucene et les analyseurs dispo en espérant qu'il n'y
a pas de conflit de Locale, approche du programmeur ;-).

Nanti de cette listes d'analyseurs, on pourrait concevoir une
hiérarchisation. "Attention" est français aussi bien qu'anglais.
On peut d'ailleurs laisser faire un comportement par défaut où aucun
analyseur n'aurait de précédence ou si aucun analyseur est capable de
traiter correctement le flux :

envoyer le token non analysé (dur si on envoie un livre en chinois et qu'on
n'a pas d'analyseur chinois car le MultilingualAnalyzer renverrait alors un
seul token contenant le texte de tout le livre)
envoyer un token vide (dur aussi mais imparable en indexation comme en
recherche puisqu'on ne risque pas de générer du bruit :-)

Ensuite, il faut se pencher sur ce qui est fourni à un analyseur :

tokenStream(String fieldName, Reader reader)

i.e. un Reader qui... lit des caractères (char).

Note : il est important de signaler qu'on est en Unicode à ce niveau : merci
Java. Le reader se voit transmettre un flux (XML ;-) *préalablement*
converti depuis tel ou tel encodage.

A partir de là, on a donc une succession de caractères qu'il faudrait
transmettre à *chacun* des analyseurs branchés. Ceux-ci répondront : ce
caractère m'intéresse, je le garde, ou ce caractère ne m'intéresse pas.

En clair, on bâtit pour chque analyseur une pile (stack) de caractères. Si
l'on reçoit un caractère arménien, je doute qu'il intéresse d'autres
analyseurs que l'analyseur arménien... à moins que cet alphabet ait servi à
noter d'autres langues ?!

A chaque empilement, un analyseur est normalement capable de dire si l'on
tombe sur un séparateur, que ce soit un séparateur typographique
(Char.isWhiteSpace() pour les langues où c'est pertinent), morphologique ou
autre...

A partir de là, l'analyseur doit être capable de notifier au
MultilingualAnalyzer qu'il est en possession d'un Token composé des
caractères préalablement empilés. 2 cas de figure sont alors possibles :

Soit le Token est indubitablement destiné à l'analyseur X et dans ce cas, il
peut fournir ce token au MultilingualAnalyzer (qui donnerait l'ordre à tous
les autres analyseurs de vider leur pile de caractères).

Soit le Token est "probablement" destiné à l'analyseur Y et, dans ce cas,
l'analyseur empile (encore !) ce token. Il attend la suite du flux pour
déterminer si ce Token était bien de son ressort.

On peut "aider" les analyseurs en les hiérarchisant et/ou en postulant par
exemple que si le token précédent était un token anglais, l'analyseur
anglais prend la précédence sur l'analyseur français pour le token suivant :
"Attention please" vs "Attention les gars".

Ainsi, la phrase suivante "In his german / arabic dictionary, Müller
translates SchweinHund by ابن الكلب" sera "correctement" analysée avec les
analyseurs actuellement disponibles sous la forme :

german arabic dictionary muller translates schwein hund ابن كلب

Qui se sent d'attaque pour le TP ?

A bientôt,

p.b.










reply via email to

[Prev in Thread] Current Thread [Next in Thread]