2010-07-28 5 views
1

lucene 쿼리의 결과에서 벡터 공간 모델 (tf-idf 가중치 사용)을 얻어야하고 어떻게 할 수 있는지 알아 내야합니다 그것. 그것은 단순해야하며,이 단계에서 여러분 중 한 명이 올바른 방향으로 나를 가리킬 수 있습니다.lucene 인덱스의 쿼리에서 벡터 공간 모델 (tf-idf) 얻기

나는 이것을 잘하는 동안 어떻게하는지 알아 내려고 노력해 왔으며, 내가 읽은 것들이 내가 필요한 것 (또는 그 이상)이되는 방법을 찾지 못했거나 해결책이 없다. 내 특정 문제에 게시되었습니다. 나는 심지어 쿼리 결과에서 직접 VSM을 계산하려고 시도했지만, 내 솔루션은 끔찍한 복잡성을 가지고 있습니다.

편집 : 이것에 걸림돌이있는 다른 사람에게는 훨씬 명확한 질문이 있습니다. here IndexReader.getTermFreqVector (String field, int docid) 메서드를 사용하여 필요한 정보를 얻을 수 있습니다.

불행하게도 이것은 내가 자주 사용하는 색인이 용어 빈도 벡터를 저장하지 않았기 때문에 나에게 도움이되지 않는다. 그래서 나는 아직도 이것에 대한 더 많은 도움을 찾고 있다고 생각한다!

답변

3

이 질문에 대답하기 위해, 당신은 IndexReader를 사용하여 루씬 결과의 집합을위한 TF-IDF 가중치 벡터 공간 모델을 계산할 수 있습니다 .getTermFreqVector() 및 Searcher.docFreq() 클래스. Lucene에서 일련의 결과에 대해 VSM을 직접 가져올 수있는 방법은 없습니다.

+0

Tf-idf 값을 인덱싱 할 수 있습니까? 과학적 관점에서? –

2

어쩌면 내가하고있는 일을 오해하고있는 것일 수도 있지만 Lucene의 채점은 벡터 공간 모델을 사용합니다. 문서와 쿼리가 주어지면 점수 계산 방법에 대한 자세한 내용을 보려면 Searcher.explain (Query query, int doc)을 사용하십시오.

+0

각 문서의 텍스트를 쿼리로 제출하면 해당 문서의 코사인 유사도가 색인의 다른 모든 문서와 함께 나타납니다. 문서의 텍스트를 쿼리로 변환 할 때 각 용어가 OR 용어인지 확인하십시오. – bajafresh4life

1

사용자 의견에서 올바르게 이해할 경우 쿼리와 문서 사이가 아닌 문서간에 계산 VSM 코사인 유사성이 필요합니다. 정확히 어떻게해야할지 모르겠지만 Similarity 클래스의 Lucene API 페이지로 안내합니다. 당신은 아마도 coordqueryNorm 멤버를 변경하고 쿼리 객체로 문서를 변환하는 방법을 찾는 Similarity의 사용자 정의 하위 클래스를 파생시켜 사용해야 할 것입니다.

(보장;. 난 그냥 알아 내기 위해 노력하고있어이 자신을 득점)

+0

그래, 그게 내가 찾고있는, 내가 유사성 클래스에서 신선한 봐야 겠어. 당신의 도움을 주셔서 감사합니다. – Mark

관련 문제