2009-11-19 5 views
1

Je travaille actuellement sur une implémentation de recherche de texte intégral Lucene.NET. Pour la plupart, ça se passe plutôt bien, mais j'ai quelques problèmes concernant les acronymes dans les données ...Problème de recherche d'acronymes dans Lucene.NET

Comme exemple de ce qui se passe si j'avais "N.A.S.A." dans le domaine que j'ai indexé, je suis capable de faire correspondre avec n.a.s.a. ou nasa, mais n.a.s.a ne correspond pas, même si je mets une recherche floue (n.a.a ~). La première idée qui me vient à l'esprit est de supprimer tous les. Avant d'indexer/chercher, mais cela ressemble plus à une solution qu'à une solution et j'espérais obtenir une solution plus propre.

Quelqu'un peut-il suggérer des modifications ou un analyseur différent (en utilisant StandardAnalyzer actuellement) qui pourrait être plus approprié pour faire correspondre ce type de données?

Répondre

1

Le StandardAnalyzer utilise le StandardTokenizer qui indique «N.A.S.A.» comme 'nasa', mais ne le fera pas pour 'N.A.S.A'. C'est pourquoi votre requête d'origine correspond à la fois à l'entrée 'N.A.S.A' qui est traitée en 'nasa' et à l'entrée 'nasa' qui correspond à la valeur déjà segmentée. Ceci explique aussi pourquoi 'N.A.S.A' ne correspondra à rien puisque l'index contient seulement le jeton 'nasa'.

Ceci peut être vu lors de la sortie de la valeur du flux de jetons directement.

public static void Main(string[] args) { 
    var analyzer = new StandardAnalyzer(Version.LUCENE_30); 
    var stream = analyzer.TokenStream("f", new StringReader("N.A.S.A. N.A.S.A")); 

    var termAttr = stream.GetAttribute<ITermAttribute>(); 
    while (stream.IncrementToken()) { 
     Console.WriteLine(termAttr.Term); 
    } 

    Console.ReadLine(); 
} 

Sorties:

nasa 
n.a.s.a 

vous auriez probablement besoin d'écrire un analyseur personnalisé pour gérer ce scénario. Une solution consisterait à conserver le jeton d'origine afin que n.a * fonctionne, mais vous devrez également créer une meilleure détection des acronymes.

Questions connexes