"Tu veux dire?"dans Lucene.net

est-ce que quelqu'un peut s'il Vous Plaît me faire savoir comment mettre en œuvre la fonctionnalité "Did you mean" dans Lucene.net?

Merci!

27
demandé sur Judah Himango 2008-12-08 00:22:01

4 réponses

Vous devriez regarder dans l' Correcteur d'orthographe module dans le dir contrib. C'est un port de Java lucene Correcteur d'orthographe module, de sorte que son documentation devrait être utile.

(à Partir de la documentation javadoc:)

Exemple D'Utilisation:

  import org.apache.lucene.search.spell.SpellChecker;

  SpellChecker spellchecker = new SpellChecker(spellIndexDirectory);
  // To index a field of a user index:
  spellchecker.indexDictionary(new LuceneDictionary(my_lucene_reader, a_field));
  // To index a file containing words:
  spellchecker.indexDictionary(new PlainTextDictionary(new File("myfile.txt")));
  String[] suggestions = spellchecker.suggestSimilar("misspelt", 5);
34
répondu itsadok 2016-11-07 13:38:08

AFAIK Lucene supporte la recherche de proximité, ce qui signifie que si vous utilisez quelque chose comme:

champ:stirng~0.5

(il s un tilde signe -)

correspondra à "string". le float est à quel point la recherche serait "tolérante", où 1.0 correspond exactement et 0.0 correspond à tout (en quelque sorte).

différents analyseurs vont cependant mettre en oeuvre cela différemment.

une recherche de proximité est beaucoup plus lente qu'une recherche floue (stri*) alors utilisez-la avec prudence. Dans votre cas, on pourrait supposer que si vous ne trouvez pas de correspondances sur une recherche régulière, vous essayez une recherche de proximité pour voir ce que vous trouvez, et de présenter "did you mean" basé sur le résultat en quelque sorte.

pourrait être utile pour mettre en cache ce genre de recherche pour des fautes d'orthographe très courantes, pour des raisons de performance.

6
répondu jishi 2008-12-07 21:34:48

Google "vous vouliez dire?"est (probablement; ils sont secrètes, bien sûr), mis en œuvre par la consultation de leurs journal de la requête. Regardez pour voir si les gens qui ont cherché la requête que vous traitez ont cherché quelque chose de très similaire peu de temps après; si oui, il indique qu'ils ont fait une erreur, et ont réalisé ce qu'ils devraient être à la recherche.

comme vous n'avez probablement pas de journal de requêtes énorme, vous pouvez l'approcher. Prenez la requête, divisez les termes, voir s'il y a des termes similaires dans le base de données (par distance d'édition, peu importe); remplacez vos termes par ces termes voisins, et relancez la requête. Si vous obtenez plus de résultats, c'était probablement une meilleure requête. Suggérer à l'utilisateur. (Et puisque vous avez déjà les résultats, et que la plupart des gens ne regardent que les 2 meilleurs résultats, montrez-les-leur.)

1
répondu Jay Kominek 2009-01-29 00:06:38

jetez un oeil au projet de code google appelé semanticvectors. Il y a une quantité décente de discussions sur les listes de diffusion de Lucene pour faire des fonctionnalités comme ce que vous êtes après l'avoir utilisé - quelle que soit la façon dont il est écrit en java.

vous devrez probablement analyser et utiliser des algorithmes d'apprentissage automatique sur vos journaux de recherche pour construire une fonctionnalité comme celle-ci!

0
répondu Max 2009-04-01 22:08:42