#include "ymfilter.h" #include "QMapIterator" #include YMFilter::YMFilter() { } YMFilter::~YMFilter() { } void YMFilter::setParam(QMap mapParam) { m_mapParam = mapParam; } void YMFilter::clearParam() { m_mapParam.clear(); } QMap YMFilter::RankFilterALL(QMap mapResult) { QMap > Result; //QMap Result; for(QMap::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++) { QString strkey = iterPos.key(); QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts); QString key = slkey.at(0).trimmed(); int nLength = slkey.length(); for(int i = 1; i < nLength - 2 ; i++) { key += "~!@"; key += slkey.at(i).trimmed(); } //qDebug() << slkey.at(0); if(Result.contains(key)) { Result[key].insertMulti(iterPos.value(), iterPos.key()); } else { QMap qLast; qLast.insert(iterPos.value(), iterPos.key()); Result.insert(key, qLast); } } int nRank = m_mapParam.value("RankFilterAll").toInt(); QMap totalResult; //qDebug() << "rankfilter:" << nRank; for(QMap >::iterator iterPos = Result.begin(); iterPos != Result.end(); iterPos++) { QMapIterator iter(Result[iterPos.key()]); iter.toBack(); int i = 0; while(iter.hasPrevious()) { if(i >= nRank) break; iter.previous(); totalResult.insertMulti(iter.value(), iter.key()); i++; } } return totalResult; } QMap YMFilter::CounterFilter(QMap mapResult) { QMap Result; for(QMap::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++) { Result.insertMulti(iterPos.value(), iterPos.key()); } int nCount = m_mapParam.value("CounterFilter").toInt(); QMapIterator iter(Result); QMap totalResult; iter.toBack(); while(iter.hasPrevious()) { if(iter.key() > nCount) break; iter.previous(); totalResult.insertMulti(iter.value(), iter.key()); } return totalResult; } void YMFilter::AppendMap(QMap &Dest, QMap &Source) { for(QMap::iterator iterPos = Source.begin(); iterPos != Source.end(); iterPos++) { if(!Dest.contains(iterPos.key())) { Dest.insert(iterPos.key(), iterPos.value()); } } } QMap YMFilter::Exec(QMap mapResult) { QMap totalResult; if(!m_mapParam.value("Extractor").isEmpty()) { AppendMap(totalResult, Extractor(mapResult)); } if(!m_mapParam.value("KeywordFilter").isEmpty()) { mapResult = KeywordFilter(mapResult); //AppendMap(totalResult, KeywordFilter(mapResult)); } if(!m_mapParam.value("KeywordLengthFilter").isEmpty()) { mapResult = KeywordLengthFilter(mapResult); //totalResult = KeywordLengthFilter(totalResult); } AppendMap(totalResult, mapResult); if(!m_mapParam.value("RankFilterAll").isEmpty()) { totalResult = RankFilterALL(totalResult); } else if(!m_mapParam.value("RankFilterSeparated").isEmpty()) { totalResult = RankFilterSeparated(totalResult); } if(!m_mapParam.value("CounterFilter").isEmpty()) { totalResult = RankFilterSeparated(totalResult); } return totalResult; }