Files
clients/MorphereAnalyzer/ymfilterchildren.cpp

892 lines
28 KiB
C++

#include "ymfilterchildren.h"
#include <QRegExp>
#include <QStringList>
#include <QDebug>
YMFilterFactory::YMFilterFactory()
{
}
YMFilterFactory::~YMFilterFactory()
{
}
YMFilter* YMFilterFactory::getFilter(QMap<QString, QString> mapParam)
{
if(mapParam.value("Algorithm").trimmed().compare("onedepth", Qt::CaseInsensitive) == 0)
return new YMOneDepthFilter();
else if(mapParam.value("Algorithm").trimmed().compare("twodepth", Qt::CaseInsensitive) == 0)
return new YMTwoDepthFilter();
else if(mapParam.value("Algorithm").trimmed().compare("twodeptha", Qt::CaseInsensitive) == 0)
return new YMTwoDepthFilter();
else if(mapParam.value("Algorithm").trimmed().compare("platformone", Qt::CaseInsensitive) == 0)
return new YMPlatformOneFilter();
else if(mapParam.value("Algorithm").trimmed().compare("platform", Qt::CaseInsensitive) == 0)
return new YMPlatformFilter();
else
return NULL;
}
YMOneDepthFilter::YMOneDepthFilter()
{
}
YMOneDepthFilter::~YMOneDepthFilter()
{
}
QMap<QString, int> YMOneDepthFilter::Extractor(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
QStringList slExtractor;
QRegExp rx("[\\s,.;]");
slExtractor = m_mapParam.value("Extractor").split(rx);
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
foreach(QString str, slExtractor)
{
if(slkey.at(nLastIndex).compare(str.trimmed(), Qt::CaseInsensitive) == 0)
totalResult.insert(iterPos.key(), iterPos.value());
}
}
return totalResult;
}
QMap<QString, int> YMOneDepthFilter::KeywordLengthFilter(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
int nLength = m_mapParam.value("KeywordLengthFilter").toInt();
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
if(slkey.at(nLastIndex).trimmed().length() >= nLength)
{
totalResult.insert(iterPos.key(), iterPos.value());
//qDebug() << iterPos.key() << " :" << iterPos.value();
}
}
return totalResult;
}
QMap<QString, int> YMOneDepthFilter::KeywordFilter(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
QRegExp rx("[\\s,;]");
QStringList slKeywordFilter = m_mapParam.value("KeywordFilter").split(rx);
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
//qDebug() << "nLastIndex: " << nLastIndex;
bool bChecked = true;
foreach(QString str, slKeywordFilter)
{
if(slkey.at(nLastIndex).compare(str.trimmed(), Qt::CaseInsensitive) == 0)
{
bChecked = false;
break;
}
}
if(bChecked)
totalResult.insert(iterPos.key(), iterPos.value());
}
return totalResult;
}
QMap<QString, int> YMOneDepthFilter::RankFilterSeparated(QMap<QString, int> mapResult)
{
QMap<QString, QMap<QString, QMap<int, QString> > > m_mapViewResult;
int nRank = m_mapParam.value("RankFilterSeparated").toInt();
//qDebug() << "nRank" <<nRank;
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
int count = iterPos.value();
QStringList strlistKey = strkey.split("~!@");
QString strDate = strlistKey.at(0);
QString strMorphere = strlistKey.at(1);
QString strKeyword = strlistKey.at(2);
if(m_mapViewResult.contains(strDate))
{
if(m_mapViewResult.value(strDate).contains(strMorphere))
{
m_mapViewResult[(strDate)][(strMorphere)].insertMulti(count, strKeyword);
}
else
{
QMap<int, QString> qLast;
qLast.insert(count, strKeyword);
m_mapViewResult[(strDate)].insert(strMorphere, qLast);
}
}
else
{
QMap<int, QString> qLast;
qLast.insert(count , strKeyword);
QMap<QString, QMap<int, QString> > qMedium;
qMedium.insert(strMorphere, qLast);
m_mapViewResult.insert(strDate, qMedium);
}
}
QMap<QString, int> totalResult;
for(QMap<QString, QMap<QString, QMap<int, QString> > >::iterator iterPos1 = m_mapViewResult.begin(); iterPos1 != m_mapViewResult.end(); iterPos1++)
{
for(QMap<QString, QMap<int, QString> >::iterator iterPos2 = iterPos1.value().begin(); iterPos2 != iterPos1.value().end(); iterPos2++)
{
int i = 0;
QMapIterator<int, QString> iter(m_mapViewResult[iterPos1.key()][iterPos2.key()]);
iter.toBack();
while(iter.hasPrevious())
{
if(i >= nRank)
break;
iter.previous();
QString key = iterPos1.key() + "~!@" + iterPos2.key() + "~!@" + iter.value();
//totalResult.insert(QString(iterPos1.key() + "~!@" + iterPos2.key() + "~!@" + iter.value()), iter.key());
totalResult.insert(key, iter.key());
i++;
}
}
}
return totalResult;
}
/*
* class YMTwoDepthFilter
*/
QMap<QString, int> YMTwoDepthFilter::Extractor(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
QStringList slExtractor;
QRegExp rx("[\\s,.;]");
slExtractor = m_mapParam.value("Extractor2").split(rx);
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
foreach(QString str, slExtractor)
{
if(slkey.at(nLastIndex).compare(str.trimmed(), Qt::CaseInsensitive) == 0)
totalResult.insert(iterPos.key(), iterPos.value());
}
}
return totalResult;
}
QMap<QString, int> YMTwoDepthFilter::KeywordLengthFilter(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
int nLength = m_mapParam.value("KeywordLengthFilter2").toInt();
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
if(slkey.at(nLastIndex).trimmed().length() >= nLength)
{
totalResult.insert(iterPos.key(), iterPos.value());
//qDebug() << iterPos.key() << " :" << iterPos.value();
}
}
return totalResult;
}
QMap<QString, int> YMTwoDepthFilter::KeywordFilter(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
QRegExp rx("[\\s,;]");
QStringList slKeywordFilter = m_mapParam.value("KeywordFilter2").split(rx);
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
//qDebug() << "nLastIndex: " << nLastIndex;
bool bChecked = true;
foreach(QString str, slKeywordFilter)
{
if(slkey.at(nLastIndex).compare(str.trimmed(), Qt::CaseInsensitive) == 0)
{
bChecked = false;
break;
}
}
if(bChecked)
totalResult.insert(iterPos.key(), iterPos.value());
}
return totalResult;
}
QMap<QString, int> YMTwoDepthFilter::RankFilterSeparated(QMap<QString, int> mapResult)
{
QMap<QString, QMap<QString, QMap<int, QString> > > m_mapViewResult;
int nRank = m_mapParam.value("RankFilterSeparated2").toInt();
//qDebug() << "nRank" <<nRank;
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
int count = iterPos.value();
QStringList strlistKey = strkey.split("~!@");
QString strDate = strlistKey.at(0);
QString strMorphere = strlistKey.at(1);
QString strKeyword = strlistKey.at(2);
if(m_mapViewResult.contains(strDate))
{
if(m_mapViewResult.value(strDate).contains(strMorphere))
{
m_mapViewResult[(strDate)][(strMorphere)].insertMulti(count, strKeyword);
}
else
{
QMap<int, QString> qLast;
qLast.insert(count, strKeyword);
m_mapViewResult[(strDate)].insert(strMorphere, qLast);
}
}
else
{
QMap<int, QString> qLast;
qLast.insert(count , strKeyword);
QMap<QString, QMap<int, QString> > qMedium;
qMedium.insert(strMorphere, qLast);
m_mapViewResult.insert(strDate, qMedium);
}
}
QMap<QString, int> totalResult;
for(QMap<QString, QMap<QString, QMap<int, QString> > >::iterator iterPos1 = m_mapViewResult.begin(); iterPos1 != m_mapViewResult.end(); iterPos1++)
{
for(QMap<QString, QMap<int, QString> >::iterator iterPos2 = iterPos1.value().begin(); iterPos2 != iterPos1.value().end(); iterPos2++)
{
int i = 0;
QMapIterator<int, QString> iter(m_mapViewResult[iterPos1.key()][iterPos2.key()]);
iter.toBack();
while(iter.hasPrevious())
{
if(i >= nRank)
break;
iter.previous();
QString key = iterPos1.key() + "~!@" + iterPos2.key() + "~!@" + iter.value();
//totalResult.insert(QString(iterPos1.key() + "~!@" + iterPos2.key() + "~!@" + iter.value()), iter.key());
totalResult.insert(key, iter.key());
i++;
}
}
}
return totalResult;
}
YMTwoDepthFilter::YMTwoDepthFilter()
{
}
YMTwoDepthFilter::~YMTwoDepthFilter()
{
}
QMap<QString, int> YMTwoDepthFilter::Exec(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
if(!m_mapParam.value("Extractor2").isEmpty())
{
AppendMap(totalResult, Extractor(mapResult));
}
if(!m_mapParam.value("KeywordFilter2").isEmpty())
{
mapResult = KeywordFilter(mapResult);
//AppendMap(totalResult, KeywordFilter(mapResult));
}
if(!m_mapParam.value("KeywordLengthFilter2").isEmpty())
{
mapResult = KeywordLengthFilter(mapResult);
//totalResult = KeywordLengthFilter(totalResult);
}
AppendMap(totalResult, mapResult);
if(!m_mapParam.value("RankFilterAll2").isEmpty())
{
totalResult = RankFilterALL(totalResult);
}
else if(!m_mapParam.value("RankFilterSeparated2").isEmpty())
{
totalResult = RankFilterSeparated(totalResult);
}
if(!m_mapParam.value("CounterFilter2").isEmpty())
{
totalResult = RankFilterSeparated(totalResult);
}
return totalResult;
}
QMap<QString, int> YMTwoDepthFilter::RankFilterALL(QMap<QString, int> mapResult)
{
QMap<QString, QMap<int, QString> > Result;
//QMap<int, QString> Result;
for(QMap<QString, int>::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<int, QString> qLast;
qLast.insert(iterPos.value(), iterPos.key());
Result.insert(key, qLast);
}
}
int nRank = m_mapParam.value("RankFilterAll2").toInt();
qDebug() << "TwoDepth nRank: " << nRank;
QMap <QString, int> totalResult;
//qDebug() << "rankfilter:" << nRank;
for(QMap<QString, QMap<int, QString> >::iterator iterPos = Result.begin(); iterPos != Result.end(); iterPos++)
{
QMapIterator <int, QString> 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;
}
/*
* class YMPlatformOneFilter
*/
YMPlatformOneFilter::YMPlatformOneFilter()
{
}
YMPlatformOneFilter::~YMPlatformOneFilter()
{
}
QMap<QString, int> YMPlatformOneFilter::Extractor(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
QStringList slExtractor;
QRegExp rx("[\\s,.;]");
slExtractor = m_mapParam.value("Extractor").split(rx);
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
foreach(QString str, slExtractor)
{
if(slkey.at(nLastIndex).compare(str.trimmed(), Qt::CaseInsensitive) == 0)
totalResult.insert(iterPos.key(), iterPos.value());
}
}
return totalResult;
}
QMap<QString, int> YMPlatformOneFilter::KeywordLengthFilter(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
int nLength = m_mapParam.value("KeywordLengthFilter").toInt();
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
if(slkey.at(nLastIndex).trimmed().length() >= nLength)
{
totalResult.insert(iterPos.key(), iterPos.value());
//qDebug() << iterPos.key() << " :" << iterPos.value();
}
}
return totalResult;
}
QMap<QString, int> YMPlatformOneFilter::KeywordFilter(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
QRegExp rx("[\\s,;]");
QStringList slKeywordFilter = m_mapParam.value("KeywordFilter").split(rx);
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
//qDebug() << "nLastIndex: " << nLastIndex;
bool bChecked = true;
foreach(QString str, slKeywordFilter)
{
if(slkey.at(nLastIndex).compare(str.trimmed(), Qt::CaseInsensitive) == 0)
{
bChecked = false;
break;
}
}
if(bChecked)
totalResult.insert(iterPos.key(), iterPos.value());
}
return totalResult;
}
QMap<QString, int> YMPlatformOneFilter::RankFilterSeparated(QMap<QString, int> mapResult)
{
QMap<QString, QMap<QString, QMap<int, QString> > > m_mapViewResult;
int nRank = m_mapParam.value("RankFilterSeparated").toInt();
//qDebug() << "nRank" <<nRank;
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
int count = iterPos.value();
QStringList strlistKey = strkey.split("~!@");
QString strDate = strlistKey.at(0);
QString strMorphere = strlistKey.at(1);
QString strKeyword = strlistKey.at(2);
if(m_mapViewResult.contains(strDate))
{
if(m_mapViewResult.value(strDate).contains(strMorphere))
{
m_mapViewResult[(strDate)][(strMorphere)].insertMulti(count, strKeyword);
}
else
{
QMap<int, QString> qLast;
qLast.insert(count, strKeyword);
m_mapViewResult[(strDate)].insert(strMorphere, qLast);
}
}
else
{
QMap<int, QString> qLast;
qLast.insert(count , strKeyword);
QMap<QString, QMap<int, QString> > qMedium;
qMedium.insert(strMorphere, qLast);
m_mapViewResult.insert(strDate, qMedium);
}
}
QMap<QString, int> totalResult;
for(QMap<QString, QMap<QString, QMap<int, QString> > >::iterator iterPos1 = m_mapViewResult.begin(); iterPos1 != m_mapViewResult.end(); iterPos1++)
{
for(QMap<QString, QMap<int, QString> >::iterator iterPos2 = iterPos1.value().begin(); iterPos2 != iterPos1.value().end(); iterPos2++)
{
int i = 0;
QMapIterator<int, QString> iter(m_mapViewResult[iterPos1.key()][iterPos2.key()]);
iter.toBack();
while(iter.hasPrevious())
{
if(i >= nRank)
break;
iter.previous();
QString key = iterPos1.key() + "~!@" + iterPos2.key() + "~!@" + iter.value();
//totalResult.insert(QString(iterPos1.key() + "~!@" + iterPos2.key() + "~!@" + iter.value()), iter.key());
totalResult.insert(key, iter.key());
i++;
}
}
}
return totalResult;
}
QMap<QString, int> YMPlatformOneFilter::RankFilterALL(QMap<QString, int> mapResult)
{
QMap<QString, QMap<int, QString> > Result;
//QMap<int, QString> Result;
for(QMap<QString, int>::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<int, QString> qLast;
qLast.insert(iterPos.value(), iterPos.key());
Result.insert(key, qLast);
}
}
int nRank = m_mapParam.value("RankFilterAll").toInt();
qDebug() << "TwoDepth nRank: " << nRank;
QMap <QString, int> totalResult;
//qDebug() << "rankfilter:" << nRank;
for(QMap<QString, QMap<int, QString> >::iterator iterPos = Result.begin(); iterPos != Result.end(); iterPos++)
{
QMapIterator <int, QString> 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;
}
/*
*
* class YMPlatformFilter
*
*/
QMap<QString, int> YMPlatformFilter::Extractor(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
QStringList slExtractor;
QRegExp rx("[\\s,.;]");
slExtractor = m_mapParam.value("Extractor2").split(rx);
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
foreach(QString str, slExtractor)
{
if(slkey.at(nLastIndex).compare(str.trimmed(), Qt::CaseInsensitive) == 0)
totalResult.insert(iterPos.key(), iterPos.value());
}
}
return totalResult;
}
QMap<QString, int> YMPlatformFilter::KeywordLengthFilter(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
int nLength = m_mapParam.value("KeywordLengthFilter2").toInt();
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
if(slkey.at(nLastIndex).trimmed().length() >= nLength)
{
totalResult.insert(iterPos.key(), iterPos.value());
//qDebug() << iterPos.key() << " :" << iterPos.value();
}
}
return totalResult;
}
QMap<QString, int> YMPlatformFilter::KeywordFilter(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
QRegExp rx("[\\s,;]");
QStringList slKeywordFilter = m_mapParam.value("KeywordFilter2").split(rx);
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts);
int nLastIndex = slkey.length() - 1;
//qDebug() << "nLastIndex: " << nLastIndex;
bool bChecked = true;
foreach(QString str, slKeywordFilter)
{
if(slkey.at(nLastIndex).compare(str.trimmed(), Qt::CaseInsensitive) == 0)
{
bChecked = false;
break;
}
}
if(bChecked)
totalResult.insert(iterPos.key(), iterPos.value());
}
return totalResult;
}
QMap<QString, int> YMPlatformFilter::RankFilterSeparated(QMap<QString, int> mapResult)
{
QMap<QString, QMap<QString, QMap<int, QString> > > m_mapViewResult;
int nRank = m_mapParam.value("RankFilterSeparated2").toInt();
//qDebug() << "nRank" <<nRank;
for(QMap<QString, int>::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++)
{
QString strkey = iterPos.key();
int count = iterPos.value();
QStringList strlistKey = strkey.split("~!@");
QString strDate = strlistKey.at(0);
QString strMorphere = strlistKey.at(1);
QString strKeyword = strlistKey.at(2);
if(m_mapViewResult.contains(strDate))
{
if(m_mapViewResult.value(strDate).contains(strMorphere))
{
m_mapViewResult[(strDate)][(strMorphere)].insertMulti(count, strKeyword);
}
else
{
QMap<int, QString> qLast;
qLast.insert(count, strKeyword);
m_mapViewResult[(strDate)].insert(strMorphere, qLast);
}
}
else
{
QMap<int, QString> qLast;
qLast.insert(count , strKeyword);
QMap<QString, QMap<int, QString> > qMedium;
qMedium.insert(strMorphere, qLast);
m_mapViewResult.insert(strDate, qMedium);
}
}
QMap<QString, int> totalResult;
for(QMap<QString, QMap<QString, QMap<int, QString> > >::iterator iterPos1 = m_mapViewResult.begin(); iterPos1 != m_mapViewResult.end(); iterPos1++)
{
for(QMap<QString, QMap<int, QString> >::iterator iterPos2 = iterPos1.value().begin(); iterPos2 != iterPos1.value().end(); iterPos2++)
{
int i = 0;
QMapIterator<int, QString> iter(m_mapViewResult[iterPos1.key()][iterPos2.key()]);
iter.toBack();
while(iter.hasPrevious())
{
if(i >= nRank)
break;
iter.previous();
QString key = iterPos1.key() + "~!@" + iterPos2.key() + "~!@" + iter.value();
//totalResult.insert(QString(iterPos1.key() + "~!@" + iterPos2.key() + "~!@" + iter.value()), iter.key());
totalResult.insert(key, iter.key());
i++;
}
}
}
return totalResult;
}
YMPlatformFilter::YMPlatformFilter()
{
}
YMPlatformFilter::~YMPlatformFilter()
{
}
QMap<QString, int> YMPlatformFilter::Exec(QMap<QString, int> mapResult)
{
QMap<QString, int> totalResult;
if(!m_mapParam.value("Extractor2").isEmpty())
{
AppendMap(totalResult, Extractor(mapResult));
}
if(!m_mapParam.value("KeywordFilter2").isEmpty())
{
mapResult = KeywordFilter(mapResult);
//AppendMap(totalResult, KeywordFilter(mapResult));
}
if(!m_mapParam.value("KeywordLengthFilter2").isEmpty())
{
mapResult = KeywordLengthFilter(mapResult);
//totalResult = KeywordLengthFilter(totalResult);
}
AppendMap(totalResult, mapResult);
if(!m_mapParam.value("RankFilterAll2").isEmpty())
{
totalResult = RankFilterALL(totalResult);
}
else if(!m_mapParam.value("RankFilterSeparated2").isEmpty())
{
totalResult = RankFilterSeparated(totalResult);
}
if(!m_mapParam.value("CounterFilter2").isEmpty())
{
totalResult = RankFilterSeparated(totalResult);
}
return totalResult;
}
QMap<QString, int> YMPlatformFilter::RankFilterALL(QMap<QString, int> mapResult)
{
QMap<QString, QMap<int, QString> > Result;
//QMap<int, QString> Result;
for(QMap<QString, int>::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<int, QString> qLast;
qLast.insert(iterPos.value(), iterPos.key());
Result.insert(key, qLast);
}
}
int nRank = m_mapParam.value("RankFilterAll2").toInt();
qDebug() << "TwoDepth nRank: " << nRank;
QMap <QString, int> totalResult;
//qDebug() << "rankfilter:" << nRank;
for(QMap<QString, QMap<int, QString> >::iterator iterPos = Result.begin(); iterPos != Result.end(); iterPos++)
{
QMapIterator <int, QString> 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;
}