计算solr和java中文档中单词的TF-IDF

时间:2012-11-20 16:14:03

标签: java solr nlp tf-idf

我可以通过计算文档中的Term数来轻松获取TF 我想知道如何计算文档频率, 即包含该术语的文件数量

到目前为止我所获得的是使用大量行查询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());
    }

1 个答案:

答案 0 :(得分: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(Term)是一回事。