/*
    Copyright (C) 2012 Bartosz Broda, Jacek Bochenek, Łukasz Biłeńkij, 
    Damian Jaworski, Wojciech Mazur, Dominik Piasecki, Maciej Piasecki, 
    Radosław Ramocki
    
    This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.

    This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. 

    See the LICENSE and COPYING files for more details.
*/

#include "../comparator_stdheaders.h"
#include "IdfWeight.h"

namespace smartcomparator
{
	namespace weights
	{


IdfWeight::IdfWeight(Matrices::SuperMatrixPtr pMatrix)
:
	WeightFeature(pMatrix)
{
	mDocumentCount = static_cast<double>(m_pMatrix->NumberOfRows());
}


IdfWeight::~IdfWeight(void)
{

}


void IdfWeight::Weight(
	size_t 						rowindex,
	Matrices::CompressedVector*	v,
	std::set<size_t>&			filteredIndices)
{
	for(std::set<size_t>::iterator i = filteredIndices.begin(); i != filteredIndices.end(); ++i)
	{
		size_t documentIdx = *i;

		double documentFrequency = static_cast<double>((*m_pMatrix->GetColumnFeatures())[documentIdx].GetNZ());
		double idf = log10(mDocumentCount / documentFrequency);

		v->SetElement(documentIdx, idf);
	}
}


	}
}
