2017-07-25 2 views
1

Hej guys,Est-il possible d'obtenir, de modifier et de remplacer les représentations de document tfidf dans Lucene?

Je travaille sur une recherche liée au classement. Je voudrais indexer une collection de documents avec Lucene, prendre les représentations tfidf (de chaque document) qu'il génère, les modifier, les remettre en place et observer comment le classement sur un ensemble fixe de requêtes change en conséquence.

Y a-t-il une manière non-hacky de faire ceci?

Répondre

1

Votre question est trop vague pour avoir une réponse claire, esp. sur ce que vous comptez faire avec:

prendre les représentations TFIDF (de chaque document) qu'il génère, les modifier

magasins Lucene valeurs brutes pour la notation:

Toutes ces données sont gérées par Lucene et sera utilisé pour calculer un score pour une durée de requête donnée. Une classe personnalisée Similarity peut être utilisée pour modifier la formule qui génère ce score.

Mais vous devez considérer qu'une requête de recherche est faite de plusieurs termes, et la façon dont les scores des termes individuels sont combinés peut également être modifiée. Vous pouvez utiliser des classes de requête existantes (par exemple, BooleanQuery, DisjunctionMax), mais vous pouvez également écrire les vôtres.

Donc, cela dépend vraiment de ce que vous voulez faire avec tout cela, mais notez que si vous voulez changer les valeurs brutes stockées par Lucene cela va être plutôt difficile. Vous devrez écrire un codec lucene personnalisé et probablement la plus grande partie de la pile de requêtes pour profiter de vos nouvelles données.

Une bonne chose à considérer est la possibilité de stocker une charge utile arbitraire []. De cette façon, vous pouvez stocker une valeur qui aurait été calculée en dehors de lucene et l'utiliser dans une similarité ou une requête personnalisée. S'il vous plaît voir les tutoriels suivants: Getting Started with Payloads et Custom Scoring with Lucene Payloads, vous pouvez donner quelques idées.

+0

Merci @nomoa. J'ai l'impression que ma question est trop vague. Mais néanmoins, l'utilisation de charges utiles semble être la réponse. Pensez-vous qu'il serait possible d'étendre un index déjà existant avec des charges utiles personnalisées ou devrais-je simplement essayer de les ajouter lors de l'indexation? – nadre

+0

@nadre lucene ne supporte pas vraiment les opérations de mise à jour, c'est toujours une opération de suppression + ajout. Donc je ne pense pas que ça vaille la peine d'essayer de "prolonger" un index existant, vous devriez juste les ajouter lors d'une seconde passe d'indexation une fois que vous aurez calculé les valeurs que vous voulez dans l'ensemble de données/index initial. – nomoa

+0

C'est ce que je pensais aussi. Merci de votre aide! – nadre