2012-11-20 41 views
4

我可以通過計算文檔中Term的數量 來輕鬆獲得TF,並且我想知道如何計算文檔頻率 即包含這個術語計算solr和java文檔中單詞的TF-IDF

我到目前爲止所做的是查詢具有大量行的solr並計算結果,但這非常耗時且內存昂貴。我想算的條款只

SolrQuery q = new SolrQuery(); 
    q.setQuery("tweet_text:"+kw); 
    q.addField("tweet_text"); 
    q.setRows(40000000);   
    SolrDocumentList results = null ; 

    try { 
     QueryResponse rsp = solrServer.query(q); 
     results = rsp.getResults(); 
    } catch (SolrServerException e) { 
     e.printStackTrace(); 
    } 

    ArrayList<String> tweets = new ArrayList<String>(); 
    for (SolrDocument doc : results) 
    { 
     tweets.add(doc.getFieldValue("tweet_text").toString()); 
    } 

回答

6

在SOLR,你可以使用函數查詢查詢docFreq直接,如下所示:http://wiki.apache.org/solr/FunctionQuery#docfreq

q={!func}docFreq(tweet_text, kw) 

注意,也記錄在該網頁上的功能查詢獲得tf,idf和termfreq的方法,這也可能對您有所幫助。


這可能是這個問題,回想起來不太相關,但我會離開它的時間的情況下,爲這對你有用。

IndexReader.docFreq(Term)可以讓你找到你想要的。

如:

reader.docFreq(new Term("tweet_text", kw));' 

IndexSearcher.docFreq(期限)是一樣的東西,順便說一句。

+0

要訪問IndexReader對象,我應該首先包含 import org.apache.lucene.index.IndexReader; 和apache lucene罐子? –

+0

沒有足夠的重視你如何搜索,因爲我可能應該有。我想你應該發送一個函數查詢來獲取它。我通過回答表示讚賞。 – femtoRgon

+0

我構建了這個查詢 http:// localhost:8983/solr/db/select? DEFTYPE = FUNC&Q = docfreq(tweet_text, '@') 搜索的 '@' 字符 文檔頻率,當我打開這個網址我不能在結果發現docfreq 結果:HTTP:// pastie。 org/5407275 –

相關問題