Chère communauté stackoverflow:Construire un nuage de tags avec solr
Compte tenu du texte, je souhaite obtenir les 50 mots les plus fréquents dans le texte, et créer un nuage de tags sur, et montrer ainsi l'essentiel de de quoi parle le texte d'une manière graphique. Le texte est en fait un ensemble de 100 commentaires pour chaque article (une image) il y a environ 120 articles, et je veux aussi garder le nuage à jour - en gardant les commentaires indexés, et en utilisant le cloud code de génération à exécuter chaque fois qu'une nouvelle requête Web apparaît.
Je me suis contenté d'utiliser Solr pour indexer le texte, et maintenant je me demandais comment obtenir les 50 mots TOP, sur Solr TermsVectorComponant. Voici un exemple des résultats retournés par les termes vecteur Componant, après avoir allumé la fréquence à long terme en disant tv.tf="true"
:
<lst name="doc-5">
<str name="uniqueKey">MA147LL/A</str>
<lst name="includes">
<lst name="cabl"><tf>5</tf></lst>
<lst name="earbud"><tf>3</tf></lst>
<lst name="headphon"><tf>10</tf></lst>
<lst name="usb"><tf>11</tf></lst>
</lst>
</lst>
<lst name="doc-9">
<str name="uniqueKey">3007WFP</str>
<lst name="includes">
<lst name="cabl"><tf>5</tf></lst>
<lst name="usb"><tf>4</tf></lst>
</lst>
</lst>
Comme vous pouvez le voir, j'ai 2 problèmes:
- Je reçois tous les et ils ne sont pas triés par fréquence, donc je dois obtenir des termes et le trier en mémoire pour faire ce que j'essaie.
Y a-t-il un meilleur moyen? (ou) Puis-je dire à un composant de termrector de quelque façon de le trier et d'en ramasser seulement 100 pour moi? (ou) Y a-t-il un autre cadre que je peux utiliser? J'ai besoin de garder les nouveaux commentaires indexés comme ils viennent, de sorte que le nuage de tags est toujours à jour - En ce qui concerne le générateur de nuages, il prend un dictionnaire de mots pondérés, et en fait une belle image.
This réponse ne aide pas.
EDIT - essayer jpountz & paige réponse de cuisinier
Voici un résultat que je suis arrivé pour cette requête:
select?q=Id:d4439543-afd4-42fb-978a-b72eab0c07f9&facet=true
&facet.field=Post_Content&facet.minCount=1&facet.limit=50
<int name="also">1</int>
<int name="ani">1</int>
<int name="anoth">1</int>
<int name="atleast">1</int>
<int name="base">1</int>
<int name="bcd">1</int>
<int name="becaus">1</int>
<int name="better">1</int>
<int name="bigger">1</int>
<int name="bio">1</int>
<int name="boot">1</int>
<int name="bootabl">1</int>
<int name="bootload">1</int>
<int name="bootscreen">1</int>
je suis arrivé 50 de ces éléments, @jpountz merci pour aider à limiter la résultats, MAIS pourquoi tout le CINQUANTE des éléments individuels <int>
détiennent la valeur ? Mes pensées sont: Le nombre 1 représente le nombre de documents correspondant à ma requête (qui ne peut être qu'un depuis que j'ai interrogé par Id: Guid) et ils ne représentent pas la fréquence des mots en Post_Content
Pour le prouver supprimé le Id: GUID de requête et le résultat a été:
<int name="content">33</int>
<int name="can">17</int>
<int name="on">16</int>
<int name="so">16</int>
<int name="some">16</int>
<int name="all">15</int>
<int name="i">15</int>
<int name="do">14</int>
<int name="have">14</int>
<int name="my">14</int>
Mon problème est de savoir comment obtenir la fréquence à long terme dans le document, et non la fréquence des documents de plusieurs termes. Par exemple je sais pour un fait que bootable était un mot que j'ai utilisé 6 fois dans Post_content, donc je veux des Pairs triés comme (6, "bootable"), (5, "disc") pour un ensemble de documents.
est précisément de la requête fonctionnelle que nous pouvons utiliser, à cette fin? – Zasz
Les éléments sont apparus dans les résultats des facettes. –
Zasz