親愛的計算器社區:建立一個標籤雲使用Solr
鑑於一些文字,我希望得到的前50個高頻詞在文中,並創建一個標籤雲出來,從而表現出的要點以圖形方式說明文本的內容。
的文本實際上是一組100條左右的評論PER每個項目(圖片)大約有120項,而且我也想保持更新雲 - 通過保持註釋索引,並使用雲代碼每次運行時都會運行新的Web請求。
我決定使用Solr來索引文本,現在想知道如何獲得Solr TermsVectorComponant中的前50個單詞。下面是該條款矢量componant返回的結果的一個例子,你打開後詞頻說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>
正如你可以看到我有2個問題:
- 我得到的所有文檔中的術語,不僅僅是前100個,而且它們不是按頻率排序的,所以我必須得到條件並在內存中對它進行排序才能完成即將嘗試的操作。
有沒有更好的方法? (或)我可以告訴solr termvector組件以某種方式對其進行排序並僅爲我提取100個? (或)有沒有其他的框架可以使用?我需要保留新的評論,因爲標籤雲始終是最新的 - 對於雲生成器,它需要一個加權詞的詞典,並將它製作成一個很好的圖像。
This答案沒有幫助。
編輯 - 嘗試jpountz &佩奇庫克的回答
這裏是我得到了這個查詢的結果:
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>
我得到了50個這樣的元素,@jpountz感謝幫助限制結果,但爲什麼ALL FIFTY的個人<int>
元素保持價值?我的想法是:數字1代表了匹配我的查詢(只能是一個,因爲我查詢的編號:GUID)的文件的數量,並不代表在Post_Content
單詞的頻率爲了證明這一點,我刪除編號:從查詢結果和GUID是:
<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>
我的問題是如何讓文檔中的詞頻,並沒有太多的術語的文檔頻率。例如,我知道一個事實,即可啓動是一個詞,我在Post_content中使用了6次,因此我想爲一組文檔排序像(6,「bootable」),(5,「disc」)。
具體是我們可以使用的功能性查詢,爲此目的? – Zasz