0

Lucene インデックス内のすべての特定のドキュメントについて、最も出現頻度の高い用語を取得しようとしています。私が気にしている上位出現用語のしきい値を設定しようとしています、おそらく20

ただし、Comparator を呼び出すと、「DisplayTermVectors 型の内包インスタンスにアクセスできません」というメッセージが表示されます...

したがって、この関数には、すべてのドキュメントのベクトルと、知りたい最大の上位用語を渡します

protected static Collection getTopTerms(TermFreqVector tfv, int maxTerms){
  String[] terms = tfv.getTerms();   
  int[] tFreqs = tfv.getTermFrequencies();  

  List result = new ArrayList(terms.length); 

  for (int i = 0; i < tFreqs.length; i++) {
    TermFrq tf = new TermFrq(terms[i], tFreqs[i]);
    result.add(tf); 

  }
  Collections.sort(result, new FreqComparator()); 
  if(maxTerms < result.size()){
    result = result.subList(0, maxTerms);
  }
  return result; 
}
/*Class for objects to hold the term/freq pairs*/

static class TermFrq{
   private String term;
   private int freq;

   public TermFrq(String term,int freq){
   this.term = term;
   this.freq = freq;
 }
   public String getTerm(){
   return this.term;
 }
 public int getFreq(){
   return this.freq;
 }
}


/*Comparator to compare the objects by the frequency*/
 class FreqComparator implements Comparator{
  public int compare(Object pair1, Object pair2){
   int f1 = ((TermFrq)pair1).getFreq();
   int f2 = ((TermFrq)pair2).getFreq();

   if(f1 > f2) return 1;
   else if(f1 < f2) return -1;
   else return 0;
  }
}

説明と修正は非常にありがたいです。また、他の誰かが用語頻度抽出の経験があり、より良い方法で行った場合、私はすべての提案に開かれています!

助けてください!!!!ありがとう!

4

1 に答える 1

0

TermFrq を作成する必要があると思いますpublic static class

于 2010-05-02T19:22:00.073 に答える