2012-02-22 8 views
0

現在、Luceneを使用して説明フィールドに各単語の猶予を取得しようとしています。 F.e.Luceneのターム数のフィルタリング(Java)

  • 説明:APPLES
  • の箱
  • 説明:BOXバナナ

出力:

  • BOX 2
  • のAPPLES 1
  • バナナ1

私は言葉と頻度を得るために探しています。

これらの結果を特定のドキュメントにフィルタリングしたいのですが、特定のドキュメントの説明フィールドにある単語のみをカウントすることを意味します。

ありがとうございます。コメントする答えで

//: 私はこのようなものがあります:

public ArrayList<ObjectA> GetIndexTerms(String code) { 
     try { 

      ArrayList<Object> termlist = new ArrayList<ObjectA>(); 
      indexR = IndexReader.open(path); 
      TermEnum terms = indexR.terms();   

      while (terms.next()) { 
       Term term = terms.term(); 
       String termText = term.text();      
       int frequency = indexR.docFreq(term); 
       ObjectA newObj = new ObjectA(termText, frequency); 
       termlist.add(newObj);      
       }     
      }    
      return termlist; 
     } catch (Exception ex) {    
      ex.printStackTrace(); 
      return null; 
     } 
} 

をしかし、私は文書でそれをフィルタリングする方法を見ていない...


// TODAY !

termfreqvecを使用すると動作させることができますが、ドキュメントIDが必要なため、正しく使用することはできません。私がクエリを使用して以来、 "i"の値は0から始まり、適切なドキュメントIDではありません。これを正しく動作させるためのアイデアはありますか? ありがとう!

TopDocs tp = indexS.search(query, Integer.MAX_VALUE); 
     for (int i = 0; i < tp.scoreDocs.length; i++){ 
      ScoreDoc sds = tp.scoreDocs[i]; 
      Document doc = indexS.doc(sds.doc); 
      TermFreqVector tfv = indexR.getTermFreqVector(i,"description"); 

      for (int j = 0; j < tfv.getTerms().length; j++) { 
       String item = tfv.getTerms()[j]; 
       termlist.add(new TerminoDescripcion(item.toUpperCase(), tfv.getTermFrequencies()[j])); 
      } 
     } 

答えて

2

問題はLuceneのは、つまり文書に基づいて用語をretrieveing、あなたが反対を探しているのに対し、それは、条件に基づいて文書を検索することを容易にすることを意味し、指標であるということです。

うまくいけば、これは再発問題です。Luceneでは、インデックス作成時にこの機能を有効にしていれば、文書の用語(用語ベクトル)を取得できます。

TermVector.YESField constructorを参照すると、インデックス時に有効にする方法、IndexReaderでは検索時に用語ベクトルを取得する方法を知ることができます。

また、保存されたフィールドをオンザフライで再解析することもできますが、特に大きなフィールドでは、これが遅くなる可能性があります。

+0

私は自分の投稿を編集し、あなたが私に言ったことに関するいくつかのコードを追加しました。私は右の文書IDを得るように見えることはできません。 – TheMadCapLaughs27

+1

あなたはgetTermFreqVectorの – jpountz

+0

コールでiをsds.docに置き換える必要があります。それはうまく動作しました(= – TheMadCapLaughs27

関連する問題