вычисление TF-IDF для слов в документах в solr и java

Я могу легко получить 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());
    }

person Hady Elsahar    schedule 20.11.2012    source источник


Ответы (1)


В 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) — это то же самое.

person femtoRgon    schedule 20.11.2012
comment
и для доступа к объекту IndexReader я должен сначала включить import org.apache.lucene.index.IndexReader; и банки апача lucene? - person Hady Elsahar; 20.11.2012
comment
Не обращал внимания на то, как вы искали, как, наверное, следовало бы. Я думаю, вам, вероятно, следует просто отправить запрос функции, чтобы получить это. Я исправил ответ, чтобы отразить это. - person femtoRgon; 20.11.2012
comment
я создал этот запрос localhost:8983/solr/db/select? defType=func&q=docfreq(tweet_text,'@') поиск doc freq символа '@' когда я открываю этот URL я не могу найти docfreq в результате результат: pastie.org/5407275 - person Hady Elsahar; 20.11.2012
comment
я обнаружил, что должен показать поле под названием «Оценка» в списке полей, это работает localhost:8983/solr/db select?fl=score&defType=func&q=docfreq(tweet_text,'@') - person Hady Elsahar; 20.11.2012