[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [sdx-developers] QueryParser... encore
From: |
Nicolas Maisonneuve |
Subject: |
Re: [sdx-developers] QueryParser... encore |
Date: |
Thu, 18 Sep 2003 19:57:00 +0200 |
en parlant des fichier javaCC
dans le fichier standardTokenizer.jj, la définition du type ACRONYM est pas
tres souple .
Example I.B.M est pour lui un HOST et non un ACRONYM car il manque le point
à la fois (en fait il faudrait faire I.B.M. )
donc ce I.B.M n'est pas géré dans l'analyzer standard (et donc l'analyzer
fr de SDX) (en sortie y'aura donc i.b.m et non ibm)
voilà ce que j'ai fait: <ACRONYM: <ALPHA> "." (<ALPHA> ".")+ (<ALPHA> |
(<ALPHA> ".")) >
vous vous attaquer à la lemmatisation .. Génial !
votre idée c'est :
le mot --> le lemme --> les 3 formes du lemme -> recherche dans index
(lematisé) --> resultat
c'est ca ?
Comment comptez vous retrouvez le lemme a partir du mot ?
(juste pour info: dans le lucene standbox , il y'a un french stemmer..)
----- Original Message -----
From: "Pierrick Brihaye" <address@hidden>
To: <address@hidden>
Sent: Thursday, September 18, 2003 5:47 PM
Subject: [sdx-developers] QueryParser... encore
> Salut,
>
> J'avais prévu de vous reparler du queryParser, mais pas aussi tôt :-)
>
> Voilà mon problème ; je dois avouer que les fichiers JavaCC, ce n'est pas
ma
> tasse de thé mais bon, la partie qui me tracesse est en pur Java.
>
> protected Query getFieldQuery(String field,
> Analyzer analyzer,
> String queryText) {
> // Use the analyzer to get all the tokens, and then build a TermQuery,
> // PhraseQuery, or nothing based on the term count
>
> TokenStream source = analyzer.tokenStream(field,
> new StringReader(queryText));
> Vector v = new Vector();
> org.apache.lucene.analysis.Token t;
>
> while (true) {
> try {
> t = source.next();
> }
> catch (IOException e) {
> t = null;
> }
> if (t == null)
> break;
> v.addElement(t.termText());
> }
> if (v.size() == 0)
> return null;
> else if (v.size() == 1)
> return new TermQuery(new Term(field, (String) v.elementAt(0)));
> else {
> PhraseQuery q = new PhraseQuery();
> q.setSlop(phraseSlop);
> for (int i=0; i<v.size(); i++) {
> q.add(new Term(field, (String) v.elementAt(i)));
> }
> return q;
> }
> }
>
> Si je comprends bien, en fonction du nombre de tokens, on construit :
> a) rien :-)
> b) une termQuery
> c) une phraseQuery
>
> Cette logique est implacable... tant que le positionIncrement des tokens
est
> égal à 1 ou, à tout le moins, différent de 0.
>
> Je travaille sur un tokenizer qui, pour un token en entrée, peut en
renvoyer
> N en sortie. Evidemment, ces N tokens ont les mêmes offsets que le token
> d'entrée. La seule différence, c'est que le premier a un positionIncrement
> de 1 (cas standard) et les autres un positionIncrement de 0.
>
> Cela me permet, pour un token qui serait par exemple "ordre", de sortie
> "ordre" (nom), "ordonner" (verbe), "ordonné" (adjectif)... Bref, on
> lemmatise.
>
> Tel que rédigé, le queryParser me crée donc des phraseQuery alors que je
> voudrais des termQuery combinées pour les termes ayant un
positionIncrement
> de 0 ou, peut-être une MultiTermQuery dont m'usage m'est moins familier.
> Comme pensez-vous que le problème puisse être résolu ?
>
> A+
>
> p.b.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> _______________________________________________
> sdx-developers mailing list
> address@hidden
> http://mail.nongnu.org/mailman/listinfo/sdx-developers