2014-07-22 2 views
0

좋아, 내가 한 일에 대해 설명하고 내가 바라는 바가 더 명확 해지기를 바랍니다. 필자는 문서를 분석하고 전체 색인에서 흔하지는 않지만 일부 문서에서 자주 나오는 단어를 기반으로 점수를 매기려고합니다. 지금까지 몇 가지 흥미로운 결과를 얻었고 주어진 문서에서 각 용어의 tf와 idf를 볼 수있었습니다.Lucene의 MoreLikeThis를 어떻게 동적으로 필터링합니까?

전체적으로 문서를 채점하려면 tf-idf와 관련된 작업을 수행하고 싶지만 문서의 모든 용어를 사용하고 싶지는 않습니다. 지금은 지나치게 일반적인 단어 (idf가 너무 낮아서 내게 중요하지 않은 단어)와 지나치게 드문 단어 (정말로 높은 idf 점수를 가진 단어, 내 경험에서는 일반적으로 오타가 있음)를 없애기 위해 필터를 하드 코딩했습니다.

동적으로 idf의 아웃 라이어를 필터링하는 좋은 방법이 있습니까?
대신 :

if (idf > x && idf < y) 
    include the word 

나는 같은 것을하고 싶지 : 어쩌면

if (idf is in the 60th percentile of idfs for the index) 
    include it  

이 그것을 할 수있는 가장 좋은 방법입니다,하지만 난 당신이 올 수있는 다른 솔루션을 듣고 싶습니다을 감사합니다.

답변

1

채점 과정의 마지막 단계 중 하나는 Similarity 개체로 수행됩니다. 개인화 된 유사성을 개발할 필요가 있다고 생각합니다. DefaultSimilarity은 (분명히) Lucene이 사용하는 기본 클래스입니다. TFIDFSimilarity를 ​​확장합니다. 나 자신의 클래스를 개발하는 방법을 이해하기 위해 두 클래스의 코드를 읽는 것이 좋습니다. 클래스가 개발되면

, 여기,이 KmancSimilarity라고 가정은 실행 넣어하는 방법이다 : 나는 버전 4.8로 일한지

Directory dir = <your dir>; 
IndexReader index = DirectoryReader.open(dir); 
IndexSearcher searcher = new IndexSearcher(index); 
searcher.setSimilarity(new KmancSimilarity()); 

continue your code... 

, 그래서이 유효한 경우 나도 몰라 다른 사람들을 위해.

도움이되기를 바랍니다.