2014-03-05 4 views
1

Lucene.net (최신 버전)을 사용하여 StandardAnalyzer를 사용하여 2 백만 줄의 텍스트를 포함하는 파일의 색인을 생성하는 프로젝트가 있습니다.Lucene.net을 사용하여 상위 단어 사전 및 해당 항목 수를 얻는 방법은 무엇입니까?

각 행을 색인에 단일 문서로 쓰고 있습니다. 생성 된 색인을 사용하여 이제는 각 단어의 사전과 모든 문서에서의 총 수를 얻고 싶습니다.

이것을 달성하는 가장 좋은 방법은 무엇입니까?

미리 감사드립니다.

답변

1

Luke.NET이 작업을 수행합니다. 여기에 당신의 방식대로 당신을 도울 수있는 소스가 있습니다.

public static TermInfo[] GetHighFreqTerms(Directory dir, 
              Hashtable junkWords, 
              int numTerms, 
              String[] fields) 
{ 
    if (dir == null || fields == null) return new TermInfo[0]; 

    IndexReader reader = IndexReader.Open(dir, true); 
    TermInfoQueue tiq = new TermInfoQueue(numTerms); 
    TermEnum terms = reader.Terms(); 

    int minFreq = 0; 

    while (terms.Next()) 
    { 
     String field = terms.Term.Field; 

     if (fields != null && fields.Length > 0) 
     { 
      bool skip = true; 

      for (int i = 0; i < fields.Length; i++) 
      { 
       if (field.Equals(fields[i])) 
       { 
        skip = false; 
        break; 
       } 
      } 
      if (skip) continue; 
     } 

     if (junkWords != null && junkWords[terms.Term.Text] != null) 
      continue; 

     if (terms.DocFreq() > minFreq) 
     { 
      tiq.Add(new TermInfo(terms.Term, terms.DocFreq())); 
      if (tiq.Size() >= numTerms)    // if tiq overfull 
      { 
       tiq.Pop();     // remove lowest in tiq 
       minFreq = ((TermInfo)tiq.Top()).DocFreq; // reset minFreq 
      } 
     } 
    } 

    TermInfo[] res = new TermInfo[tiq.Size()]; 

    for (int i = 0; i < res.Length; i++) 
    { 
     res[res.Length - i - 1] = (TermInfo)tiq.Pop(); 
    } 

    reader.Dispose(); 

    return res; 
} 
+0

굉장하고, 감사합니다. :-) – MaYaN