Files
clients/MorphereAnalyzer/yalgorithm.cpp
admin 631710f631 1.형태소분석 centerkeyword 방식 추가
2.일괄처리방식 search 마지막에 스페이스 있을 경우 분석결과가 나오지 않는 오류
3.형태소분석 위젯 순서 변경
4.anlayzer new column 할 경우 QTableWidgetItem(QString(" ")) 수행되도록 수정
5.엑셀에서 붙혀 넣기할 때 row 가 추가될 경우 빈 cell에 공백 추가하기(4번과 유사함)


git-svn-id: svn://192.168.0.12/source@255 8346c931-da38-4b9b-9d4c-e48b93cbd075
2016-02-23 10:17:09 +00:00

654 lines
16 KiB
C++

#include "yalgorithm.h"
#include "ychildrenthread.h"
#include <QDebug>
#include "ymfilterchildren.h"
/*
*class YASingleton
*
*/
YAlgorithm* YASingleton::algorithm = NULL;
YAlgorithm* YASingleton::getInstance()
{
if(algorithm == NULL)
algorithm = new YAlgorithm();
return algorithm;
}
YASingleton::YASingleton()
{
}
YASingleton::~YASingleton()
{
}
/*
*
* Class YAFactory
*
*/
YAFactory* YAFactory::instance = NULL;
YAFactory::YAFactory()
{
}
YAFactory::~YAFactory()
{
}
YAFactory* YAFactory::getInstance()
{
if(instance == NULL)
instance = new YAFactory();
return instance;
}
YAlgorithm* YAFactory::getYAlgorithm(QMap<QString, QString> mapParam)
{
YAlgorithm* Algorithm;
//qDebug() << "hohoho";
if(mapParam.value("Algorithm").compare("onedepth", Qt::CaseInsensitive) == 0)
{
if(!m_mapAlgorithm.contains("onedepth"))
m_mapAlgorithm.insert("onedepth", new YAlgorithm());
Algorithm = m_mapAlgorithm.value("onedepth");
}
else if(mapParam.value("Algorithm").compare("twodepth", Qt::CaseInsensitive) == 0)
{
if(!m_mapAlgorithm.contains("twodepth"))
m_mapAlgorithm.insert("twodepth", new YTwoDepthAlgorithm() );
Algorithm = m_mapAlgorithm.value("twodepth");
//qDebug() << "two depth";
}
else if(mapParam.value("Algorithm").compare("nxnmatrix", Qt::CaseInsensitive) == 0)
{
if(!m_mapAlgorithm.contains("nxnmatrix"))
m_mapAlgorithm.insert("nxnmatrix", new YAlgorithm());
Algorithm = m_mapAlgorithm.value("nxnmatrix");
}
else if(mapParam.value("Algorithm").compare("basic", Qt::CaseInsensitive) == 0)
{
if(!m_mapAlgorithm.contains("basic"))
m_mapAlgorithm.insert("basic", new YAlgorithm());
Algorithm = m_mapAlgorithm.value("basic");
}
else if(mapParam.value("Algorithm").compare("platform", Qt::CaseInsensitive) == 0)
{
if(!m_mapAlgorithm.contains("platform"))
m_mapAlgorithm.insert("platform", new YPlatformAlgorithm());
Algorithm = m_mapAlgorithm.value("platform");
}
else if(mapParam.value("Algorithm").compare("twodeptha", Qt::CaseInsensitive) == 0)
{
if(!m_mapAlgorithm.contains("twodeptha"))
m_mapAlgorithm.insert("twodeptha", new YTwoDepthAAlgorithm());
Algorithm = m_mapAlgorithm.value("twodeptha");
}
else if(mapParam.value("Algorithm").compare("centerkeyword", Qt::CaseInsensitive) == 0)
{
if(!m_mapAlgorithm.contains("centerkeyword"))
m_mapAlgorithm.insert("centerkeyword", new YAlgorithm());
Algorithm = m_mapAlgorithm.value("centerkeyword");
}
else
{
Algorithm = NULL;
}
return Algorithm;
}
/*
*class YAlgorithm
*
*/
YAlgorithm::YAlgorithm()
{
}
YAlgorithm::~YAlgorithm()
{
}
QMap <QString, int> YAlgorithm::getResult()
{
return m_mapTotalResult;
}
void YAlgorithm::setParam(QMap <QString, QString> mapParam)
{
m_mapParam = mapParam;
}
QMutex* YAlgorithm::getMutex()
{
return &mutex;
}
void YAlgorithm::setDataAlgorithmInterface(DataAlgorithmInterface* pDAInterface)
{
m_pDAInterface = pDAInterface;
}
void YAlgorithm::clearParam()
{
m_mapParam.clear();
}
void YAlgorithm::clearResult()
{
m_mapTotalResult.clear();
}
void YAlgorithm::init()
{
clearParam();
clearResult();
m_nThread = 1;
m_pYMThread = NULL;
}
QMap <QString, int> YAlgorithm::KeywordFilter(QMap <QString, int> mapResult)
{
QMap <QString, int> Result;
return Result;
}
QMap <QString, int> YAlgorithm::RankFilter(QMap <QString, int> mapResult)
{
QMap <QString, int> Result;
return Result;
}
void YAlgorithm::EmergeThreadResult()
{
for(int i = 0;i < getThreadNumber(); i++)
{
for(QMap<QString, int>::iterator iterPos = m_mapThreadResult[i]->begin(); iterPos != m_mapThreadResult[i]->end();iterPos++)
{
if(m_mapTotalResult.contains(iterPos.key()))
{
m_mapTotalResult[iterPos.key()] += iterPos.value();
}
else
{
m_mapTotalResult.insert(iterPos.key(), iterPos.value());
}
}
m_mapThreadResult[i]->clear();
}
for(int i = 0;i < getThreadNumber(); i++)
{
delete m_mapThreadResult[i];
}
delete[] m_mapThreadResult;
}
void YAlgorithm::setThreadNumber(int nThread)
{
m_nThread = nThread;
}
int YAlgorithm::getThreadNumber()
{
return m_nThread;
}
void YAlgorithm::Start()
{
if(m_mapParam.isEmpty())
return;
bool okThread = false;
int nThread = m_mapParam.value("Thread").trimmed().toInt(&okThread);
if(!okThread)
setThreadNumber(1);
else
setThreadNumber(nThread);
m_pYMThread = new YMorphereThread*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_pYMThread[i] = ThreadFactory::getThread(m_mapParam);
m_pYMThread[i]->setDataAlgorithmInterface(m_pDAInterface);
m_pYMThread[i]->setMutex(&mutex);
m_pYMThread[i]->setParam(m_mapParam);
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->start();
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->wait();
}
m_mapThreadResult = new QMap<QString, int>*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_mapThreadResult[i] = new QMap<QString, int>();
}
for(int i = 0; i < getThreadNumber(); i++)
{
*m_mapThreadResult[i] = m_pYMThread[i]->getResult();
m_pYMThread[i]->clearResult();
}
for(int i = 0;i < getThreadNumber(); i++)
{
delete m_pYMThread[i];
}
delete[] m_pYMThread;
EmergeThreadResult();
YMFilter* ymfilter = YMFilterFactory::getFilter(m_mapParam);
//qDebug() << "EXEC";
if(ymfilter != NULL)
{
ymfilter->setParam(m_mapParam);
m_mapTotalResult = ymfilter->Exec(m_mapTotalResult);
}
delete ymfilter;
}
void YTwoDepthAlgorithm::Start()
{
if(m_mapParam.isEmpty())
return;
bool okThread = false;
int nThread = m_mapParam.value("Thread").trimmed().toInt(&okThread);
if(!okThread)
setThreadNumber(1);
else
setThreadNumber(nThread);
QMap<QString, QString>mapParam = m_mapParam;
mapParam["Algorithm"] = "onedepth";
m_pYMThread = new YMorphereThread*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_pYMThread[i] = ThreadFactory::getThread(mapParam);
m_pYMThread[i]->setDataAlgorithmInterface(m_pDAInterface);
m_pYMThread[i]->setMutex(&mutex);
m_pYMThread[i]->setParam(mapParam);
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->start();
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->wait();
}
m_mapThreadResult = new QMap<QString, int>*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_mapThreadResult[i] = new QMap<QString, int>();
}
for(int i = 0; i < getThreadNumber(); i++)
{
*m_mapThreadResult[i] = m_pYMThread[i]->getResult();
m_pYMThread[i]->clearResult();
}
for(int i = 0;i < getThreadNumber(); i++)
{
delete m_pYMThread[i];
}
delete[] m_pYMThread;
EmergeThreadResult();
YMFilter* ymfilter = YMFilterFactory::getFilter(mapParam);
//qDebug() << "EXEC";
if(ymfilter != NULL)
{
ymfilter->setParam(m_mapParam);
m_mapTotalResult = ymfilter->Exec(m_mapTotalResult);
}
delete ymfilter;
QList<QString> listKeys = m_mapTotalResult.keys();
QString strKeys;
for(int i = 0; i < listKeys.count(); i++)
{
strKeys += (listKeys.at(i).trimmed() + " ");
}
strKeys = strKeys.trimmed();
m_mapTotalResult.clear();
m_mapParam.insert("OneDepthKeys", strKeys);
m_pDAInterface->reset();
m_pYMThread = new YMorphereThread*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_pYMThread[i] = ThreadFactory::getThread(m_mapParam);
m_pYMThread[i]->setDataAlgorithmInterface(m_pDAInterface);
m_pYMThread[i]->setMutex(&mutex);
m_pYMThread[i]->setParam(m_mapParam);
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->start();
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->wait();
}
m_mapThreadResult = new QMap<QString, int>*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_mapThreadResult[i] = new QMap<QString, int>();
}
for(int i = 0; i < getThreadNumber(); i++)
{
*m_mapThreadResult[i] = m_pYMThread[i]->getResult();
m_pYMThread[i]->clearResult();
}
for(int i = 0;i < getThreadNumber(); i++)
{
delete m_pYMThread[i];
}
delete[] m_pYMThread;
EmergeThreadResult();
ymfilter = YMFilterFactory::getFilter(m_mapParam);
//qDebug() << "EXEC";
if(ymfilter != NULL)
{
ymfilter->setParam(m_mapParam);
m_mapTotalResult = ymfilter->Exec(m_mapTotalResult);
}
delete ymfilter;
}
void YPlatformAlgorithm::Start()
{
if(m_mapParam.isEmpty())
return;
bool okThread = false;
int nThread = m_mapParam.value("Thread").trimmed().toInt(&okThread);
if(!okThread)
setThreadNumber(1);
else
setThreadNumber(nThread);
QMap<QString, QString>mapParam = m_mapParam;
mapParam["Algorithm"] = "platformone";
m_pYMThread = new YMorphereThread*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_pYMThread[i] = ThreadFactory::getThread(mapParam);
m_pYMThread[i]->setDataAlgorithmInterface(m_pDAInterface);
m_pYMThread[i]->setMutex(&mutex);
m_pYMThread[i]->setParam(mapParam);
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->start();
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->wait();
}
m_mapThreadResult = new QMap<QString, int>*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_mapThreadResult[i] = new QMap<QString, int>();
}
for(int i = 0; i < getThreadNumber(); i++)
{
*m_mapThreadResult[i] = m_pYMThread[i]->getResult();
m_pYMThread[i]->clearResult();
}
for(int i = 0;i < getThreadNumber(); i++)
{
delete m_pYMThread[i];
}
delete[] m_pYMThread;
EmergeThreadResult();
YMFilter* ymfilter = YMFilterFactory::getFilter(mapParam);
//qDebug() << "EXEC";
if(ymfilter != NULL)
{
ymfilter->setParam(m_mapParam);
m_mapTotalResult = ymfilter->Exec(m_mapTotalResult);
}
delete ymfilter;
QList<QString> listKeys = m_mapTotalResult.keys();
QString strKeys;
for(int i = 0; i < listKeys.count(); i++)
{
strKeys += (listKeys.at(i).trimmed() + " ");
}
strKeys = strKeys.trimmed();
m_mapTotalResult.clear();
m_mapParam.insert("OneDepthKeys", strKeys);
m_pDAInterface->reset();
m_pYMThread = new YMorphereThread*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_pYMThread[i] = ThreadFactory::getThread(m_mapParam);
m_pYMThread[i]->setDataAlgorithmInterface(m_pDAInterface);
m_pYMThread[i]->setMutex(&mutex);
m_pYMThread[i]->setParam(m_mapParam);
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->start();
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->wait();
}
m_mapThreadResult = new QMap<QString, int>*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_mapThreadResult[i] = new QMap<QString, int>();
}
for(int i = 0; i < getThreadNumber(); i++)
{
*m_mapThreadResult[i] = m_pYMThread[i]->getResult();
m_pYMThread[i]->clearResult();
}
for(int i = 0;i < getThreadNumber(); i++)
{
delete m_pYMThread[i];
}
delete[] m_pYMThread;
EmergeThreadResult();
ymfilter = YMFilterFactory::getFilter(m_mapParam);
//qDebug() << "EXEC";
if(ymfilter != NULL)
{
qDebug() << "totalresult: " << m_mapTotalResult.size();
ymfilter->setParam(m_mapParam);
m_mapTotalResult = ymfilter->Exec(m_mapTotalResult);
}
delete ymfilter;
}
void YTwoDepthAAlgorithm::Start()
{
if(m_mapParam.isEmpty())
return;
bool okThread = false;
int nThread = m_mapParam.value("Thread").trimmed().toInt(&okThread);
if(!okThread)
setThreadNumber(1);
else
setThreadNumber(nThread);
QMap<QString, QString>mapParam = m_mapParam;
mapParam["Algorithm"] = "onedepth";
m_pYMThread = new YMorphereThread*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_pYMThread[i] = ThreadFactory::getThread(mapParam);
m_pYMThread[i]->setDataAlgorithmInterface(m_pDAInterface);
m_pYMThread[i]->setMutex(&mutex);
m_pYMThread[i]->setParam(mapParam);
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->start();
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->wait();
}
m_mapThreadResult = new QMap<QString, int>*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_mapThreadResult[i] = new QMap<QString, int>();
}
for(int i = 0; i < getThreadNumber(); i++)
{
*m_mapThreadResult[i] = m_pYMThread[i]->getResult();
m_pYMThread[i]->clearResult();
}
for(int i = 0;i < getThreadNumber(); i++)
{
delete m_pYMThread[i];
}
delete[] m_pYMThread;
EmergeThreadResult();
YMFilter* ymfilter = YMFilterFactory::getFilter(mapParam);
//qDebug() << "EXEC";
if(ymfilter != NULL)
{
ymfilter->setParam(m_mapParam);
m_mapTotalResult = ymfilter->Exec(m_mapTotalResult);
}
delete ymfilter;
QList<QString> listKeys = m_mapTotalResult.keys();
QString strKeys;
for(int i = 0; i < listKeys.count(); i++)
{
strKeys += (listKeys.at(i).trimmed() + " ");
}
strKeys = strKeys.trimmed();
m_mapTotalResult.clear();
m_mapParam.insert("OneDepthKeys", strKeys);
m_pDAInterface->reset();
m_pYMThread = new YMorphereThread*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_pYMThread[i] = ThreadFactory::getThread(m_mapParam);
m_pYMThread[i]->setDataAlgorithmInterface(m_pDAInterface);
m_pYMThread[i]->setMutex(&mutex);
m_pYMThread[i]->setParam(m_mapParam);
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->start();
}
for(int i = 0;i < getThreadNumber(); i++)
{
m_pYMThread[i]->wait();
}
m_mapThreadResult = new QMap<QString, int>*[getThreadNumber()];
for(int i = 0; i < getThreadNumber(); i++)
{
m_mapThreadResult[i] = new QMap<QString, int>();
}
for(int i = 0; i < getThreadNumber(); i++)
{
*m_mapThreadResult[i] = m_pYMThread[i]->getResult();
m_pYMThread[i]->clearResult();
}
for(int i = 0;i < getThreadNumber(); i++)
{
delete m_pYMThread[i];
}
delete[] m_pYMThread;
EmergeThreadResult();
ymfilter = YMFilterFactory::getFilter(m_mapParam);
//qDebug() << "EXEC";
if(ymfilter != NULL)
{
ymfilter->setParam(m_mapParam);
m_mapTotalResult = ymfilter->Exec(m_mapTotalResult);
}
delete ymfilter;
}