#include "ymfilterchildren.h" #include #include #include YMFilterFactory::YMFilterFactory() { } YMFilterFactory::~YMFilterFactory() { } YMFilter* YMFilterFactory::getFilter(QMap 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 YMOneDepthFilter::Extractor(QMap mapResult) { QMap totalResult; QStringList slExtractor; QRegExp rx("[\\s,.;]"); slExtractor = m_mapParam.value("Extractor").split(rx); for(QMap::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 YMOneDepthFilter::KeywordLengthFilter(QMap mapResult) { QMap totalResult; int nLength = m_mapParam.value("KeywordLengthFilter").toInt(); for(QMap::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 YMOneDepthFilter::KeywordFilter(QMap mapResult) { QMap totalResult; QRegExp rx("[\\s,;]"); QStringList slKeywordFilter = m_mapParam.value("KeywordFilter").split(rx); for(QMap::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 YMOneDepthFilter::RankFilterSeparated(QMap mapResult) { QMap > > m_mapViewResult; int nRank = m_mapParam.value("RankFilterSeparated").toInt(); //qDebug() << "nRank" <::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 qLast; qLast.insert(count, strKeyword); m_mapViewResult[(strDate)].insert(strMorphere, qLast); } } else { QMap qLast; qLast.insert(count , strKeyword); QMap > qMedium; qMedium.insert(strMorphere, qLast); m_mapViewResult.insert(strDate, qMedium); } } QMap totalResult; for(QMap > >::iterator iterPos1 = m_mapViewResult.begin(); iterPos1 != m_mapViewResult.end(); iterPos1++) { for(QMap >::iterator iterPos2 = iterPos1.value().begin(); iterPos2 != iterPos1.value().end(); iterPos2++) { int i = 0; QMapIterator 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 YMTwoDepthFilter::Extractor(QMap mapResult) { QMap totalResult; QStringList slExtractor; QRegExp rx("[\\s,.;]"); slExtractor = m_mapParam.value("Extractor2").split(rx); for(QMap::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 YMTwoDepthFilter::KeywordLengthFilter(QMap mapResult) { QMap totalResult; int nLength = m_mapParam.value("KeywordLengthFilter2").toInt(); for(QMap::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 YMTwoDepthFilter::KeywordFilter(QMap mapResult) { QMap totalResult; QRegExp rx("[\\s,;]"); QStringList slKeywordFilter = m_mapParam.value("KeywordFilter2").split(rx); for(QMap::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 YMTwoDepthFilter::RankFilterSeparated(QMap mapResult) { QMap > > m_mapViewResult; int nRank = m_mapParam.value("RankFilterSeparated2").toInt(); //qDebug() << "nRank" <::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 qLast; qLast.insert(count, strKeyword); m_mapViewResult[(strDate)].insert(strMorphere, qLast); } } else { QMap qLast; qLast.insert(count , strKeyword); QMap > qMedium; qMedium.insert(strMorphere, qLast); m_mapViewResult.insert(strDate, qMedium); } } QMap totalResult; for(QMap > >::iterator iterPos1 = m_mapViewResult.begin(); iterPos1 != m_mapViewResult.end(); iterPos1++) { for(QMap >::iterator iterPos2 = iterPos1.value().begin(); iterPos2 != iterPos1.value().end(); iterPos2++) { int i = 0; QMapIterator 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 YMTwoDepthFilter::Exec(QMap mapResult) { QMap 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 YMTwoDepthFilter::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("RankFilterAll2").toInt(); qDebug() << "TwoDepth nRank: " << nRank; 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; } /* * class YMPlatformOneFilter */ YMPlatformOneFilter::YMPlatformOneFilter() { } YMPlatformOneFilter::~YMPlatformOneFilter() { } QMap YMPlatformOneFilter::Extractor(QMap mapResult) { QMap totalResult; QStringList slExtractor; QRegExp rx("[\\s,.;]"); slExtractor = m_mapParam.value("Extractor").split(rx); for(QMap::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 YMPlatformOneFilter::KeywordLengthFilter(QMap mapResult) { QMap totalResult; int nLength = m_mapParam.value("KeywordLengthFilter").toInt(); for(QMap::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 YMPlatformOneFilter::KeywordFilter(QMap mapResult) { QMap totalResult; QRegExp rx("[\\s,;]"); QStringList slKeywordFilter = m_mapParam.value("KeywordFilter").split(rx); for(QMap::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 YMPlatformOneFilter::RankFilterSeparated(QMap mapResult) { QMap > > m_mapViewResult; int nRank = m_mapParam.value("RankFilterSeparated").toInt(); //qDebug() << "nRank" <::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 qLast; qLast.insert(count, strKeyword); m_mapViewResult[(strDate)].insert(strMorphere, qLast); } } else { QMap qLast; qLast.insert(count , strKeyword); QMap > qMedium; qMedium.insert(strMorphere, qLast); m_mapViewResult.insert(strDate, qMedium); } } QMap totalResult; for(QMap > >::iterator iterPos1 = m_mapViewResult.begin(); iterPos1 != m_mapViewResult.end(); iterPos1++) { for(QMap >::iterator iterPos2 = iterPos1.value().begin(); iterPos2 != iterPos1.value().end(); iterPos2++) { int i = 0; QMapIterator 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 YMPlatformOneFilter::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(); qDebug() << "TwoDepth nRank: " << nRank; 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; } /* * * class YMPlatformFilter * */ QMap YMPlatformFilter::Extractor(QMap mapResult) { QMap totalResult; QStringList slExtractor; QRegExp rx("[\\s,.;]"); slExtractor = m_mapParam.value("Extractor2").split(rx); for(QMap::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 YMPlatformFilter::KeywordLengthFilter(QMap mapResult) { QMap totalResult; int nLength = m_mapParam.value("KeywordLengthFilter2").toInt(); for(QMap::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 YMPlatformFilter::KeywordFilter(QMap mapResult) { QMap totalResult; QRegExp rx("[\\s,;]"); QStringList slKeywordFilter = m_mapParam.value("KeywordFilter2").split(rx); for(QMap::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 YMPlatformFilter::RankFilterSeparated(QMap mapResult) { QMap > > m_mapViewResult; int nRank = m_mapParam.value("RankFilterSeparated2").toInt(); //qDebug() << "nRank" <::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 qLast; qLast.insert(count, strKeyword); m_mapViewResult[(strDate)].insert(strMorphere, qLast); } } else { QMap qLast; qLast.insert(count , strKeyword); QMap > qMedium; qMedium.insert(strMorphere, qLast); m_mapViewResult.insert(strDate, qMedium); } } QMap totalResult; for(QMap > >::iterator iterPos1 = m_mapViewResult.begin(); iterPos1 != m_mapViewResult.end(); iterPos1++) { for(QMap >::iterator iterPos2 = iterPos1.value().begin(); iterPos2 != iterPos1.value().end(); iterPos2++) { int i = 0; QMapIterator 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 YMPlatformFilter::Exec(QMap mapResult) { QMap 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 YMPlatformFilter::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("RankFilterAll2").toInt(); qDebug() << "TwoDepth nRank: " << nRank; 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; }