You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pylucene-dev@lucene.apache.org by Gmehlin Floran <fg...@student.ethz.ch> on 2016/08/18 14:31:19 UTC

Total number of terms in index for collection frequency

Hi,

I am struggling to compute the collection frequency of a term (PyLucene 4.10.1).
So far, I can have the collection count of terms with :

reader = IndexReader.open(SimpleFSDirectory(File(LUCENE_INDEX)))
termVector = reader.getTermVector(docID, "contents");
termsEnumvar = termVector.iterator(None)
termsref = BytesRefIterator.cast_(termsEnumvar)
cf_dict = {}
try:
    while (termsref.next()):
        termval = TermsEnum.cast_(termsref)
        fg = termval.term().utf8ToString()
        cf = reader.totalTermFreq(Term("contents", termval.term())    # collection count
        cf_dict[fg]=cf
except StopIteration, e:
    print ''

I would like to have the "frequency" in cf_dict instead of the count. For this, I need to divide it with the total number of indistinct terms in the index.

Does anyone know how to get this ?

Thank you for your help,

Floran




Re: Total number of terms in index for collection frequency

Posted by Dirk Rothe <d....@semantics.de>.
Hi Floran,

we're looping over all lucene-docs, apply the appropriate analyzer,  
iterate and collect the distinct tokens. Pretty inefficient I guess, but  
you also get the frequency for each unique token. Nice for checking:  
https://en.wikipedia.org/wiki/Zipf%27s_law

--dirk

Am 18.08.2016, 16:31 Uhr, schrieb Gmehlin  Floran  
<fg...@student.ethz.ch>:

> Hi,
>
> I am struggling to compute the collection frequency of a term (PyLucene  
> 4.10.1).
> So far, I can have the collection count of terms with :
>
> reader = IndexReader.open(SimpleFSDirectory(File(LUCENE_INDEX)))
> termVector = reader.getTermVector(docID, "contents");
> termsEnumvar = termVector.iterator(None)
> termsref = BytesRefIterator.cast_(termsEnumvar)
> cf_dict = {}
> try:
>     while (termsref.next()):
>         termval = TermsEnum.cast_(termsref)
>         fg = termval.term().utf8ToString()
>         cf = reader.totalTermFreq(Term("contents", termval.term())    #  
> collection count
>         cf_dict[fg]=cf
> except StopIteration, e:
>     print ''
>
> I would like to have the "frequency" in cf_dict instead of the count.  
> For this, I need to divide it with the total number of indistinct terms  
> in the index.
>
> Does anyone know how to get this ?
>
> Thank you for your help,
>
> Floran
>
>