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

Had*_*har 4 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());
    }
Run Code Online (Sandbox Code Playgroud)

fem*_*gon 7

在SOLR中,您可以使用函数查询直接查询docFreq,如下所示:http://wiki.apache.org/solr/FunctionQuery#docfreq ,

q={!func}docFreq(tweet_text, kw)
Run Code Online (Sandbox Code Playgroud)

注意,该页面上还记录了获取tf,idf和termfreq的函数查询方法,这些方法也可能对您有所帮助.


回想起来,这可能与这个问题的相关不大,但我会暂时搁置,以防它对你有用.

IndexReader.docFreq(Term)可以帮助您获得所需内容.

如:

reader.docFreq(new Term("tweet_text", kw));'
Run Code Online (Sandbox Code Playgroud)

顺便说一句,IndexSearcher.docFreq(Term)是一回事.