2012-07-01 5 views
0

은 내가이 주어진 코드에서 가져온 한 TFIDF 결과를 정상화하려는 결과정상화 TF-IDF는

area 0.0 
areola 5.877735781779639 
ari 3.9318256327243257 
art 1.6094379124341003 
artifici 1.0986122886681098 
assign 2.1972245773362196 
associ 3.295836866004329 
assur 1.9459101490553132 
averag 1.0986122886681098 
avoid 0.6931471805599453 
. 
. 
. 

어떤 도움이 것 많이 감사하겠습니다. 고마워요

+1

무엇이 당신의 질문입니까? –

+0

주어진 코드에서 얻은 tfidf 결과를 정규화하고 싶습니다. – John

+3

TF-IDF **는 ** 정규화입니다. –

답변

5

일반적인 접근 방식은 문서 크기로 표준화하는 것입니다. 즉 기수가 (또는 절대 빈도) 인 대신에 상대 빈도를 사용합니다.

주파수 배열에 대해 freqsum을 합계로합시다.

  • 용어는 않은 워드에 대해 "절대 주파수"
  • 상대 주파수에 대한를 계산 : 그런 혼란의이 유형을 방지하기 위해

    freqs[t]/(double)freqsum*Math.log(idf) 
    

    을 사용하여, 나는 용어를 사용하는 것이 좋습니다 문서 내 비율

모호한 용어 "용어 빈도 ".

나는 자동으로 색인 생성 (1973)에서 용어 값의 지정에 대해 Salton, Yang을 찾으면 절대 계수를 참조합니다. 코사인 유사성은 스케일을 제거 할 것이므로 어쨌든 중요하지 않습니다. Lucene과 같은 현대 시스템은 문서의 영향을보다 잘 제어하려고 시도합니다.

+0

무언가를 명확히하기 위해서 위의 코드에 따라'freqsum'을 쓰는 것이'termCount'입니까? 미안해. – John

+0

아니요, 'termCount'는 다른 용어 * 수입니다, 그렇죠? 나는 총계에 대해서 이야기하고있다. ** 상대 기간 빈도 **를 생각하면 명확해야합니다. –

+0

이 정확한가요? Anony 씨? 'sum [] freqs = tfv.getTermFrequencies(); 'double freqsum = Math.sqrt (freqs [i])/tterms.length;' – John

관련 문제