Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-10-2007 16:15:34

erwanpia
Membre
Lieu: Locronan - Quimper
Date d'inscription: 16-10-2007
Messages: 18
Site web

lucene & accents

Bonjour, je n'ai pas vraiment trouvé de réponse au problème suivant : un recherce sur bière (avec accent) ne renvoie pas biere (sans accent)

par contre une recherche sur biere renvoie bière entre autres

il y a un petit truc de config à savoir lors de la créatoin de l'index ou de l'appel à la recherche ?

autre sujet les wildcards ne marchent toujours pas dans la 1.0.2 ? j'ai cru comprendre en lisant ce forum que sur un snapshot 2000708xx ca marchait et plus sur la release ?

Merci

Hors ligne

 

#2 15-01-2009 10:27:28

petchos
Nouveau membre
Date d'inscription: 12-01-2009
Messages: 2

Re: lucene & accents

J'ai le même problème, beaucoup de monde pose la question mais aucunes réponses n'est avancées... une solution ?

Comme faire que si je tape sante ou santé je trouve un même résultat ???

Hors ligne

 

#3 08-12-2009 19:46:56

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: lucene & accents

J'arrive sur le même problème...essayé ceci:

Code:

Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('UTF-8');

Hors ligne

 

#4 08-12-2009 20:25:46

nicol@s
Membre
Lieu: Nantes
Date d'inscription: 22-06-2009
Messages: 18
Site web

Re: lucene & accents

Salut,

J'ai eu l'occasion de mettre en place récemment, pour régler le problème j'utilise une méthode sanitize sur tous les contenus indexés dans des champs pour remplacer les 'é' par des 'e', 'à' par 'a', etc. Ceci doit également être faisable en définissant votre propre Analyseur qui étend Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8, en l'état et à ma connaissance, il n'existe pas d'analyseur pour le français.

Puis on utilise la même méthode sanitize sur les termes recherchés avant de construire sa requête, donc une recherche sur "bière" retourne aussi les "biere" indexés et inversement.

Pour améliorer encore la recherche, j'utilise un filtre pour ne pas indexer et rechercher les "la", "le", "ton", "ta" :

Code:

$analyzer = new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive();
$stopWords = array("la", "le", etc);
$stopWordsFilter = new Zend_Search_Lucene_Analysis_TokenFilter_StopWords($stopWords);
$analyzer->addFilter($stopWordsFilter);
Zend_Search_Lucene_Analysis_Analyzer::setDefault($analyzer);

Et enfin, je met tous les mots au singulier à coup d'expressions régulières avant l'indexation et la recherche, bières => biere, bateaux => bateau, etc.

Voilà, je ne sais pas si c'est idéal, mais les résultats de recherche sont beaucoup plus pertinents et ce à moindre coût smile

A+
Nicolas

Dernière modification par nicol@s (08-12-2009 20:39:10)

Hors ligne

 

#5 09-12-2009 15:19:20

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: lucene & accents

Wow c'est une très bonne idée ! Mais ton array de StopWords doit être énorme non ? Il y a tellement de règle qu'on pourrait mettre, par exemple, ne pas indexer tous les mots plus court que 3 caractères, etc...

Quand tu dis que tu mets les mots au singulier par du regex avant l'indexation...c'est probablement parce que ce ne sont pas les pages HTML qui tu index ?

Hors ligne

 

#6 10-12-2009 00:23:14

nicol@s
Membre
Lieu: Nantes
Date d'inscription: 22-06-2009
Messages: 18
Site web

Re: lucene & accents

Wow c'est une très bonne idée ! Mais ton array de StopWords doit être énorme non ? Il y a tellement de règle qu'on pourrait mettre, par exemple, ne pas indexer tous les mots plus court que 3 caractères, etc...

En fait il n'y a pas tant de stop word que ça (pour mon système, ~50), c'est vraiment des mots qui n'apporte que peu à la sémantique de la recherche, tu peux trouver des listes toutes faites sur internet, par exemple, ça c'est pas mal : http://snowball.tartarus.org/algorithms/french/stop.txt

Mais bon il y a des limites à cette utilisation, pour les recherches : "je joue aux dès" et "des joues bien rebondies", une fois l'accent enlevé, le mot "des" n'est pas indexé alors qu'il apporte du sens dans le cas 1 et pas dans le 2nd, tout est affaire de compromis donc smile

Quand tu dis que tu mets les mots au singulier par du regex avant l'indexation...c'est probablement parce que ce ne sont pas les pages HTML qui tu index ?

En effet, ce ne sont pas des pages HTML mais des objets métiers PHP, ça ne change pas grand chose au processus, je construis en fait un type de document Zend_Search_Lucene_Document pour chaque type d'objet, et j'indexe donc certains de leurs attributs.

L'utilisation des regex n'est pas non plus idéale, par exemple, "je suis gourmand" => "je sui gourmand", mais comme je les utilise avant l'indexation et avant la recherche ça ne pose pas trop de problèmes.

Si tu creuses plus le sujet et trouve un moyen d'améliorer le système, n'hésites pas à m'en faire part, ça m'intéresse big_smile

A+
Nicolas

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages