Comparaison des analyseurs Lucene

104

Quelqu'un peut-il expliquer la différence entre les différents analyseurs de Lucene? Je reçois une exception maxClauseCount et je comprends que je peux éviter cela en utilisant un KeywordAnalyzer, mais je ne veux pas changer de StandardAnalyzer sans comprendre les problèmes entourant les analyseurs. Merci beaucoup.

Compagnon
la source

Réponses:

209

En général, tout analyseur dans Lucene est un filtre tokenizer + stemmer + stop-words.

Tokenizer divise votre texte en morceaux, et comme différents analyseurs peuvent utiliser différents tokenizers, vous pouvez obtenir différents flux de jetons de sortie , c'est-à-dire des séquences de morceaux de texte. Par exemple, KeywordAnalyzervous avez mentionné qu'il ne divise pas du tout le texte et prend tout le champ comme un seul jeton. En même temps, StandardAnalyzer(et la plupart des autres analyseurs) utilisent les espaces et la ponctuation comme points de partage. Par exemple, pour la phrase «je suis très heureux», il produira une liste [«i», «suis», «très», «heureux»] (ou quelque chose comme ça). Pour plus d'informations sur des analyseurs / tokenizers spécifiques, consultez sa documentation Java .

Les tiges sont utilisées pour obtenir la base d'un mot en question. Cela dépend fortement de la langue utilisée. Par exemple, pour la phrase précédente en anglais, il y aura quelque chose comme ["i", "be", "veri", "happi"] produit, et pour le français "Je suis très heureux" une sorte d'analyseur de français (comme SnowballAnalyzer, initialisé avec "French") produira ["je", "être", "tre", "heur"]. Bien sûr, si vous utilisez un analyseur d'une langue pour extraire du texte dans une autre, les règles de l'autre langue seront utilisées et le stemmer peut produire des résultats incorrects. Ce n'est pas un échec de tout le système, mais les résultats de la recherche peuvent alors être moins précis.

KeywordAnalyzern'utilise pas de stemmers, il passe tout le champ sans modification. Donc, si vous voulez rechercher des mots dans du texte anglais, ce n'est pas une bonne idée d'utiliser cet analyseur.

Les mots vides sont les mots les plus fréquents et presque inutiles. Encore une fois, cela dépend fortement de la langue. Pour l'anglais, ces mots sont "a", "the", "I", "be", "have", etc. Les filtres de mots vides les suppriment du flux de jetons pour réduire le bruit dans les résultats de recherche, donc finalement notre phrase "I 'suis très content "avec StandardAnalyzersera transformé en liste [" veri "," happi "].

Et KeywordAnalyzerencore une fois ne fait rien. Donc, KeywordAnalyzerest utilisé pour des choses comme les identifiants ou les numéros de téléphone, mais pas pour le texte habituel.

Et quant à votre maxClauseCountexception, je crois que vous l'obtenez en cherchant. Dans ce cas, c'est probablement à cause d'une requête de recherche trop complexe. Essayez de le diviser en plusieurs requêtes ou d'utiliser plus de fonctions de bas niveau.

ami
la source
1
@ffriend: je ne pense pas que Stemmer (en utilisant une boule de neige ou d'autres algorithmes) puisse convertir am -> be parce que c'est un travail de Lemmatizer. Vous pouvez le vérifier ici snowball.tartarus.org/demo.php
Tho
Alors, où s'inscrit Tika dans tout cela? N'est-ce pas techniquement un analyseur?
Anon
1
@anon: Tika est un projet distinct avec plusieurs fonctionnalités clés. En supposant que vous parliez d'analyseurs Tika, je dirais que Tika prend un flux d'octets et produit du texte + des métadonnées, tandis que les analyseurs Lucene prennent du texte et produisent un flux de jetons traité. Par exemple, vous pouvez d'abord analyser un fichier PDF ou XML avec Tika, en produisant des documents avec des champs tels que «titre», «auteur» et «texte», puis analyser tout ou partie de ces champs avec les analyseurs Lucene.
ffriend
se demander simplement, «très» et «heureux» ne sont pas des mots déclinés, pourquoi sont-ils transformés en «veri» et «happi»? est-ce pour correspondre aux différences i <-> y puisqu'elles semblent similaires?
oguzalb le
0

Dans ma perspective, j'ai utilisé StandAnalyzeret SmartCNAnalyzer. Comme je dois rechercher du texte en chinois. De toute évidence, il SmartCnAnalyzerest meilleur pour gérer le chinois. Pour différentes raisons, vous devez choisir l'analyseur le plus approprié.

neal
la source