현재 Lucene을 사용하여 설명 필드에 각 단어의 양을 가져 오려고합니다. F.e.Lucene의 용어 집계 필터링 (Java)
- 설명 : ▜ᛴ᱐ # OF BOX
- 설명 : BOX 바나나
출력 :
- BOX 2
- 2
- 사과 1
- BANANAS 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;
}
}
을하지만 난이 문서하여 필터링하는 방법을 볼 수 없습니다 ...
// 오늘 !
난 그게 작동하도록 얻을 수 있지만 그것을 사용하여 문서 id 및 나는 그것을 올바르게 사용할 수 없습니다. 내가 "0"이라는 쿼리를 사용했기 때문에 "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]));
}
}
나는 내 게시물을 편집하고 내게 당신이 말한 것과 관련하여 몇 가지 코드를 추가했습니다. 그래도 문서 ID를 얻을 수없는 것 같습니다. – TheMadCapLaughs27
getTermFreqVector 호출에서 i를 sds.doc로 바꿔야합니다. – jpountz
감사합니다. 괜찮습니다. (= – TheMadCapLaughs27