diff --git a/MorphereAnalyzer/MorphereAnalyzer.pro b/MorphereAnalyzer/MorphereAnalyzer.pro index 25ffb19..d1715db 100644 --- a/MorphereAnalyzer/MorphereAnalyzer.pro +++ b/MorphereAnalyzer/MorphereAnalyzer.pro @@ -32,7 +32,9 @@ SOURCES += main.cpp\ ymonedepthwidget.cpp \ ymnxnmatrixwidget.cpp \ ymfilter.cpp \ - ymfilterchildren.cpp + ymfilterchildren.cpp \ + ymupload.cpp \ + ymtwodepthwidget.cpp HEADERS += mainwindow.h \ @@ -83,7 +85,9 @@ HEADERS += mainwindow.h \ ymonedepthwidget.h \ ymnxnmatrixwidget.h \ ymfilter.h \ - ymfilterchildren.h + ymfilterchildren.h \ + ymupload.h \ + ymtwodepthwidget.h FORMS += mainwindow.ui diff --git a/MorphereAnalyzer/mainwindow.cpp b/MorphereAnalyzer/mainwindow.cpp index a25353d..2da9494 100644 --- a/MorphereAnalyzer/mainwindow.cpp +++ b/MorphereAnalyzer/mainwindow.cpp @@ -48,6 +48,10 @@ #include "ymbasicwidget.h" #include "ymonedepthwidget.h" #include "ymnxnmatrixwidget.h" +#include +#include +#include +#include "ymtwodepthwidget.h" //! [0] MainWindow::MainWindow() { @@ -61,6 +65,8 @@ MainWindow::MainWindow() //p_qwAnalyzer2 = new SAnaly2; m_pYMBasicWidget = new YMBasicWidget; m_pYMOneDepthWidget = new YMOneDepthWidget; + m_pYMTwoDepthWidget = new YMTwoDepthWidget; + m_pYMNxNMatrixWidget = new YMNxNMatrixWidget; p_qwDict = new SDictionary; @@ -82,6 +88,7 @@ MainWindow::MainWindow() //m_ptwResult->addTab(p_qwAnalyzer2, "Analysis2"); m_ptwResult->addTab(m_pYMBasicWidget, "Basic"); m_ptwResult->addTab(m_pYMOneDepthWidget, "OneDepth"); + m_ptwResult->addTab(m_pYMTwoDepthWidget, "TwoDepth"); m_ptwResult->addTab(m_pYMNxNMatrixWidget, "NxNMatrix"); QHBoxLayout *layout = new QHBoxLayout; @@ -120,7 +127,7 @@ void MainWindow::createActions() actDBCsvExport->setStatusTip(tr("Export DB as a csv file")); connect(actDBCsvExport, SIGNAL(triggered()), this, SLOT(exportDB())); - actMorphereOriginalExport = new QAction(tr("Morphere - CSV Export(Raw Result)"), this); + actMorphereOriginalExport = new QAction(tr("Morphere - CSV Export(OtherType Result)"), this); actMorphereOriginalExport->setStatusTip(tr("Export Morphere as a csv file")); connect(actMorphereOriginalExport, SIGNAL(triggered()), this, SLOT(exportOriginalMorphere())); @@ -143,6 +150,10 @@ void MainWindow::createActions() actDictionary = new QAction(tr("Dictionary"), this); actAnalyze->setStatusTip(tr("Execute Dictionary Widget")); connect(actDictionary, SIGNAL(triggered()), this, SLOT(slotDictionary())); + + actTestUpload = new QAction(tr("Test Upload"), this); + connect(actTestUpload, SIGNAL(triggered()), this, SLOT(slotTestUpload())); + } void MainWindow::createMenus() @@ -172,6 +183,9 @@ void MainWindow::createMenus() menuAnalyze = menuBar()->addMenu(tr("Analyze")); menuAnalyze->addAction(actAnalyze); + menuTestUpload = menuBar()->addMenu(tr("TestUpload")); + menuTestUpload->addAction(actTestUpload); + } //! [12] @@ -204,6 +218,7 @@ void MainWindow::exportMorphere() void MainWindow::exportOriginalMorphere() { + ((YMorphereWidget*)(m_ptwResult->currentWidget()))->SaveFileSimple(); // p_qwAnalyzer1->RawFileExport(); } @@ -230,7 +245,7 @@ void MainWindow::slotAnalyze() msg2.setVisible(true); //qDebug() << p_qwDB->GetTabWidget()->currentIndex(); m_pTAInterface->setSource(p_qwDB->GetTabWidget()->currentWidget()); - YASingleton::getInstance()->setDataAlgorithmInterface(m_pTAInterface); + YAFactory::getInstance()->getYAlgorithm(((YMorphereWidget*)(m_ptwResult->currentWidget()))->convertToParam())->setDataAlgorithmInterface(m_pTAInterface); m_ptwResult->currentWidget(); //qDebug() << m_ptwResult->currentIndex(); @@ -275,6 +290,14 @@ void MainWindow::slotAnalyze() msg2.setVisible(false); } +void MainWindow::slotTestUpload() +{ + + ((YMorphereWidget*)(m_ptwResult->currentWidget()))->TestUpload(); + + +} + void MainWindow::slotDictionary() { p_qwDict->show(); diff --git a/MorphereAnalyzer/mainwindow.h b/MorphereAnalyzer/mainwindow.h index 6d8c042..dede22a 100644 --- a/MorphereAnalyzer/mainwindow.h +++ b/MorphereAnalyzer/mainwindow.h @@ -80,6 +80,7 @@ private slots: void slotAnalyze(); void slotDictionary(); void exportOriginalMorphere(); + void slotTestUpload(); @@ -111,6 +112,8 @@ private: YMorphereWidget *m_pYMBasicWidget; YMorphereWidget *m_pYMOneDepthWidget; YMorphereWidget *m_pYMNxNMatrixWidget; + YMorphereWidget *m_pYMTwoDepthWidget; + QAction *actDBNew; QAction *actDBCsvImport; @@ -123,9 +126,12 @@ private: QAction *actAnalyze; QAction *actDictionary; + QAction *actTestUpload; + QMenu *menuFile; QMenu *menuAnalyze; QMenu *menuDictionary; + QMenu *menuTestUpload; //AnalyzerThread m_pThread[16]; /* diff --git a/MorphereAnalyzer/yalgorithm.cpp b/MorphereAnalyzer/yalgorithm.cpp index 88cc8d0..d7e475b 100644 --- a/MorphereAnalyzer/yalgorithm.cpp +++ b/MorphereAnalyzer/yalgorithm.cpp @@ -1,6 +1,7 @@ #include "yalgorithm.h" #include "ychildrenthread.h" #include +#include "ymfilterchildren.h" /* *class YASingleton * @@ -21,10 +22,72 @@ 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 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 + { + Algorithm = NULL; + } + return Algorithm; +} + /* *class YAlgorithm * -*/ + */ YAlgorithm::YAlgorithm() { @@ -36,7 +99,6 @@ YAlgorithm::~YAlgorithm() } - QMap YAlgorithm::getResult() { return m_mapTotalResult; @@ -93,9 +155,6 @@ QMap YAlgorithm::RankFilter(QMap mapResult) - - - void YAlgorithm::EmergeThreadResult() { for(int i = 0;i < getThreadNumber(); i++) @@ -179,16 +238,144 @@ void YAlgorithm::Start() delete[] m_pYMThread; EmergeThreadResult(); - /* - if(!m_mapParam.value("KeywordFilter").isEmpty()) + + YMFilter* ymfilter = YMFilterFactory::getFilter(m_mapParam); + //qDebug() << "EXEC"; + if(ymfilter != NULL) { - m_mapTotalResult = KeywordFilter(m_mapTotalResult); + ymfilter->setParam(m_mapParam); + m_mapTotalResult = ymfilter->Exec(m_mapTotalResult); } - if(!m_mapParam.value("RankFilter").isEmpty()) + 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); + + QMapmapParam = m_mapParam; + + mapParam["Algorithm"] = "onedepth"; + + + m_pYMThread = new YMorphereThread*[getThreadNumber()]; + for(int i = 0; i < getThreadNumber(); i++) { - m_mapTotalResult = RankFilter(m_mapTotalResult); + 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*[getThreadNumber()]; + for(int i = 0; i < getThreadNumber(); i++) + { + m_mapThreadResult[i] = new QMap(); + } + 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 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*[getThreadNumber()]; + for(int i = 0; i < getThreadNumber(); i++) + { + m_mapThreadResult[i] = new QMap(); + } + 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; + } diff --git a/MorphereAnalyzer/yalgorithm.h b/MorphereAnalyzer/yalgorithm.h index 26f591a..ff29c58 100644 --- a/MorphereAnalyzer/yalgorithm.h +++ b/MorphereAnalyzer/yalgorithm.h @@ -6,7 +6,7 @@ #include "dataalgorithm_interface.h" #include "ymorpherethread.h" class YAlgorithm{ -private: +protected: QMutex mutex; QMap m_mapTotalResult; QMap m_mapParam; @@ -15,7 +15,7 @@ private: int m_nThread; YMorphereThread** m_pYMThread; -private: +protected: void setThreadNumber(int nThread); QMap KeywordFilter(QMap mapResult); QMap RankFilter(QMap mapResult); @@ -33,10 +33,11 @@ public: void EmergeThreadResult(); int getThreadNumber(); - void Start(); + virtual void Start(); }; -class YASingleton{ +class YASingleton +{ private: static YAlgorithm* algorithm; YASingleton(); @@ -48,6 +49,24 @@ public: }; +class YAFactory +{ +private: + QMap m_mapAlgorithm; + static YAFactory* instance; + YAFactory(); + ~YAFactory(); + +public: + static YAFactory* getInstance(); + YAlgorithm* getYAlgorithm(QMap mapParam); +}; + +class YTwoDepthAlgorithm:public YAlgorithm +{ +public: + void Start(); +}; #endif // YALGORITHM diff --git a/MorphereAnalyzer/ychildrenthread.cpp b/MorphereAnalyzer/ychildrenthread.cpp index 58da6ca..d43547c 100644 --- a/MorphereAnalyzer/ychildrenthread.cpp +++ b/MorphereAnalyzer/ychildrenthread.cpp @@ -223,7 +223,7 @@ void YBasicMThread::run() { if(strpumsa.at(0).trimmed().contains(strMorphere,Qt::CaseInsensitive)) { - m_strKeyword = strListLine.at(0); + m_strKeyword = strListLine.at(0).toLower(); m_strMorphere = strMorphere; QString strkey = m_strDate + "~!@" + m_strMorphere + "~!@" + m_strKeyword; if(m_mapResult.contains(strkey)) @@ -531,7 +531,7 @@ void YOneDepthMThread::run() { if(strpumsa.at(0).trimmed().contains(strMorphere,Qt::CaseInsensitive)) { - m_strKeyword = strListLine.at(0); + m_strKeyword = strListLine.at(0).toLower(); m_strMorphere = strMorphere; QString strkey = m_strDate + "~!@" + m_strMorphere + "~!@" + m_strKeyword; if(m_mapResult.contains(strkey)) @@ -652,20 +652,339 @@ QString YOneDepthMThread::getWeeksInMonth(unsigned int _nDate) - - - void YTwoDepthMThread::run() { + typedef mecab_t* (*mecab_new_fun)(int,char**); + typedef const char* (*mecab_sparse_tostr_fun)(mecab_t *mecab, const char *str); + typedef void (*mecab_destroy_fun)(mecab_t *mecab); + mecab_t *mecab; + mecab_new_fun mecab_new = (mecab_new_fun)QLibrary::resolve("libmecab.dll","mecab_new"); + mecab_sparse_tostr_fun mecab_sparse_tostr = (mecab_sparse_tostr_fun)QLibrary::resolve("libmecab.dll","mecab_sparse_tostr"); + + parseParam(); + + if(userdict.length() < 1) + { + /* + char *t[] = {"RRR","-d","dic"}; + int int_t = 3; + */ + + char a[] = "RRR"; + char b[] = "-d"; + char c[] = "dic"; + char *t[3]; + t[0] = a; + t[1] = b; + t[2] = c; + int int_t = 3; + + mecab = mecab_new(int_t, t); + } + else + { + char *cstr = new char[userdict.toStdString().length() + 1]; + strcpy(cstr, userdict.toStdString().c_str()); + /* + char **t = {"RRR","-d","dic","-u",cstr}; + int int_t = 5; + */ + char a[] = "RRR"; + char b[] = "-d"; + char c[] = "dic"; + char d[] = "-u"; + + char *t[5]; + t[0] = a; + t[1] = b; + t[2] = c; + t[3] = d; + t[4] = cstr; + int int_t = 5; + + mecab = mecab_new(int_t, t); + delete[] cstr; + } + mecab_destroy_fun mecab_destroy = (mecab_destroy_fun)QLibrary::resolve("libmecab.dll","mecab_destroy"); + + + + //qDebug() << num; + + int nDate = 0; + while(true) + { + QString strTitle; + QString strBody; + QString strDate; + QString strData; + QString strPlatformTitle; + { + mutex->lock(); + if(!m_pDAInterface->hasNext()) + { + mutex->unlock(); + break; + } + strTitle = m_pDAInterface->getArticleTitle(); + strDate = m_pDAInterface->getArticleDate(); + strPlatformTitle = m_pDAInterface->getPlatformTitle(); + strBody = m_pDAInterface->getArticleData(); + m_pDAInterface->next(); + mutex->unlock(); + } + + { + switch(m_nTitleBody) + { + case 0: + { + strData = strTitle; + break; + } + case 1: + { + strData = strBody; + break; + } + case 2: + { + strData = strTitle + "\n" + strBody; + break; + } + case 3: + strData = strPlatformTitle; + break; + } + strTitle.clear(); + strBody.clear(); + strPlatformTitle.clear(); + } + + //if(!strData.contains(m_strCKeyword, Qt::CaseInsensitive)) + if(!strData.contains(m_strCKeyword, Qt::CaseInsensitive)) + continue; + + if(strDate.length() < 11) + continue; + + strDate = strDate.left(11); + if(strDate.trimmed().length()<10) + { + nDate = 0; + } + else + { + strDate = strDate.replace("-","").trimmed(); + if(strDate.length() < 8) + { + nDate = 0; + } + else + nDate = strDate.toInt(); + } + + if(!m_bDateAll) + { + if(nDate < m_nDateStart || m_nDateEnd < nDate) + continue; + } + + QString m_strDate; + QString m_strKeyword; + QString m_strMorphere; + + switch(m_nPeriod) + { + case 0: + { + m_strDate = "ALL"; + break; + } + case 1: + { + m_strDate = "D" + QString::number(nDate); + break; + } + case 2: + { + /* + QDate tempdate = QDate(nDate/10000, (nDate%10000)/100, nDate%100); + mapkey.strDate = "W" + QString::number(nDate/10000); + if(tempdate.weekNumber() < 10) + mapkey.strDate += "0"; + mapkey.strDate += QString::number(tempdate.weekNumber()); + */ + m_strDate = getWeeksInMonth(nDate); + break; + } + case 3: + { + m_strDate = "M"; + if((nDate/100) < 10) + m_strDate += "0"; + m_strDate += QString::number(nDate/100); + break; + } + } + + QString strAnalyzedLine = QString::fromStdString(mecab_sparse_tostr(mecab, strData.toStdString().c_str())) + "\n"; + QStringList strListAll = strAnalyzedLine.split("\n",QString::SkipEmptyParts); + + QMap tempResult; + + foreach(QString strLine, strListAll) + { + QStringList strListLine = strLine.split("\t"); + if(strListLine.size() < 2) + continue; + QStringList strpumsa = strListLine.at(1).trimmed().split(","); + foreach(QString strMorphere, m_slMorphereList) + { + if(strpumsa.at(0).trimmed().contains(strMorphere,Qt::CaseInsensitive)) + { + m_strKeyword = strListLine.at(0).toLower(); + m_strMorphere = strMorphere; + QString strkey = m_strDate + "~!@" + m_strMorphere + "~!@" + m_strKeyword; + if(tempResult.contains(strkey)) + { + (tempResult)[strkey]++; + } + + else + { + tempResult.insert(strkey,1); + } + } + } + } + + foreach(QString str, m_slOneDepthKeys) + { + if(tempResult.contains(str)) + { + for(QMap::iterator iterPos = tempResult.begin(); iterPos != tempResult.end(); iterPos++) + { + if(iterPos.key() == str) + continue; + QString key = iterPos.key(); + QStringList slkey = key.split("~!@", QString::SkipEmptyParts); + int nLength = slkey.length(); + QString strkey = str + "~!@" + slkey.at(nLength - 2) + "~!@" + slkey.at(nLength - 1); + if(m_mapResult.contains(strkey)) + { + m_mapResult[strkey] += iterPos.value(); + } + else + { + m_mapResult.insert(strkey, iterPos.value()); + } + } + } + } + } + mecab_destroy(mecab); } void YTwoDepthMThread::parseParam() { + userdict = m_mapParam.value("UserDict"); + + m_nTitleBody = m_mapParam.value("TitleBody").toInt(); + m_nPeriod = m_mapParam.value("Period").toInt(); + + m_nDateStart = m_mapParam.value("DateStart").toInt(); + m_nDateEnd = m_mapParam.value("DateEnd").toInt(); + + m_bDateAll = true; + + if(m_mapParam.value("DateALL") == "true") + m_bDateAll = true; + else + m_bDateAll = false; + + m_slMorphereList = m_mapParam.value("MorphereList").split(" "); + + m_strCKeyword = m_mapParam.value("CenterKeyword").trimmed(); + + m_slOneDepthKeys = m_mapParam.value("OneDepthKeys").split(" "); +} + + +QString YTwoDepthMThread::getWeeksInMonth(unsigned int _nDate) +{ + + QDate qToday(_nDate/10000, (_nDate/100)%100, _nDate%100); + if(!qToday.isValid()) + return "inVaildDate"; + + QDate qTodayFirstDay = QDate(qToday.year(), qToday.month(), 1); + QDate qTodayLastDay = QDate(qToday.year(), qToday.month(), qToday.daysInMonth()); + + int thisFirstDayofWeek = qTodayFirstDay.dayOfWeek(); + int thisLastDayofWeek = qTodayLastDay.dayOfWeek(); + int thisLastDay = qTodayLastDay.daysInMonth(); + int week = 0; + int firstWeekDays = (WEEK - thisFirstDayofWeek) + 1; + QString strWeek = "W"; + + if(thisFirstDayofWeek < FRIDAY) + { + week = 1; + } + else + { + week = 0; + } + + if((firstWeekDays < qToday.day()) && (qToday.day() <= (thisLastDay - thisLastDayofWeek))) + { + week = week + ((qToday.day() - firstWeekDays + WEEK - 1)/WEEK); + } + else if((firstWeekDays >= qToday.day())) + { + if(thisFirstDayofWeek >= FRIDAY) + { + + const int DAYS_IN_WEEK = 7; + qToday = qToday.addMonths(-1); + int DaysInMonth = qToday.daysInMonth(); + QDate FirstDayOfMonth = qToday; + FirstDayOfMonth.setDate(qToday.year(), qToday.month(), 1); + + int WeekCount = DaysInMonth / DAYS_IN_WEEK; + int DaysLeft = DaysInMonth % DAYS_IN_WEEK; + if (DaysLeft > 0) { + WeekCount++; + // Check if the remaining days are split on two weeks + if (FirstDayOfMonth.dayOfWeek() + DaysLeft - 1 > DAYS_IN_WEEK) + WeekCount++; + } + week = WeekCount; + } + } + else + { + if(thisLastDayofWeek < THURSDAY) + { + week = 1; + qToday = qToday.addMonths(1); + } + else + { + week = week + ((qToday.day() - firstWeekDays + WEEK - 1)/WEEK); + } + } + + strWeek += qToday.toString("yyyyMM"); + strWeek += QString::number(week); + return strWeek; } + void YPlatformMThread::run() { diff --git a/MorphereAnalyzer/ychildrenthread.h b/MorphereAnalyzer/ychildrenthread.h index 40c37b2..8363297 100644 --- a/MorphereAnalyzer/ychildrenthread.h +++ b/MorphereAnalyzer/ychildrenthread.h @@ -86,10 +86,40 @@ public: class YTwoDepthMThread:public YMorphereThread { Q_OBJECT +private: + QString getWeeksInMonth(unsigned int _nDate); + enum { + MONDAY = 1, + TUESDAY, + WEDNESDAY, + THURSDAY, + FRIDAY, + SATURDAY, + SUNDAY + }; + + enum + { + WEEK = 7 + }; + + + QString userdict; + int m_nTitleBody; + int m_nPeriod; + unsigned int m_nDateStart; + unsigned int m_nDateEnd; + bool m_bDateAll; + QStringList m_slMorphereList; + QString m_strCKeyword; + QStringList m_slOneDepthKeys; + + protected: void run(); public: void parseParam(); + }; class YPlatformMThread:public YMorphereThread diff --git a/MorphereAnalyzer/ymbasicwidget.cpp b/MorphereAnalyzer/ymbasicwidget.cpp index 22a28d5..d7571a9 100644 --- a/MorphereAnalyzer/ymbasicwidget.cpp +++ b/MorphereAnalyzer/ymbasicwidget.cpp @@ -429,6 +429,37 @@ void YMBasicWidget::FileImport() ViewResult(); } +void YMBasicWidget::SaveFile() +{ + /* + QString strFilename = QFileDialog::getSaveFileName(0,"save file",QDir::currentPath(), + "csv files (*.csv);;All files (*.*)",new QString("Text files (*.csv)")); + if (strFilename.toLower().right(4) != QString(".csv")) + strFilename += ".csv"; + QFile file(strFilename); + if(!file.open(QFile::WriteOnly | QFile::Text)) return; + + QTextStream out(&file); + + STable* pTable = (STable*)((QTabWidget*)(m_ptwTable->currentWidget()))->currentWidget(); + int nCountIndex = pTable->columnCount() - 1; + int nKeywordIndex = pTable->columnCount() - 2; + + QString strCKeyword = m_pleCKeyword->text().trimmed(); + for (int i = 0; i < pTable->rowCount(); i++) + { + QString strKeyword = pTable->item(i, nKeywordIndex)->text().trimmed(); + int nCount = pTable->item(i, nCountIndex)->text().trimmed().toInt(); + for(int j = 0; j < nCount; j++) + { + out << strCKeyword << ";" << strKeyword << endl; + } + } + file.close(); + */ +} + + void YMBasicWidget::FileExport() { QString strFilename = QFileDialog::getSaveFileName(0,"Exoprt file",QDir::currentPath(), diff --git a/MorphereAnalyzer/ymbasicwidget.h b/MorphereAnalyzer/ymbasicwidget.h index 38867ac..3654149 100644 --- a/MorphereAnalyzer/ymbasicwidget.h +++ b/MorphereAnalyzer/ymbasicwidget.h @@ -38,7 +38,7 @@ public: QStringList getMorphereList(); bool getDateAll(); QString getUserDictList(); - + void SaveFile(); private: // Data diff --git a/MorphereAnalyzer/ymfilter.cpp b/MorphereAnalyzer/ymfilter.cpp index ce9fb60..51ac022 100644 --- a/MorphereAnalyzer/ymfilter.cpp +++ b/MorphereAnalyzer/ymfilter.cpp @@ -30,18 +30,27 @@ QMap YMFilter::RankFilterALL(QMap mapResult) { QString strkey = iterPos.key(); QStringList slkey = strkey.split("~!@", QString::SkipEmptyParts); + QString key = slkey.at(0).trimmed(); + int nLength = slkey.length(); - - qDebug() << slkey.at(0); - if(Result.contains(slkey.at(0).trimmed())) + for(int i = 1; i < nLength - 2 ; i++) { - Result[slkey.at(0).trimmed()].insertMulti(iterPos.value(), iterPos.key()); + 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(slkey.at(0).trimmed(), qLast); + Result.insert(key, qLast); } } @@ -139,7 +148,6 @@ QMap YMFilter::Exec(QMap mapResult) } return totalResult; - } diff --git a/MorphereAnalyzer/ymfilter.h b/MorphereAnalyzer/ymfilter.h index 5feb561..37519d5 100644 --- a/MorphereAnalyzer/ymfilter.h +++ b/MorphereAnalyzer/ymfilter.h @@ -20,7 +20,7 @@ protected: public: - QMap Exec(QMap mapResult); + virtual QMap Exec(QMap mapResult); void setParam(QMap mapParam); void clearParam(); YMFilter(); diff --git a/MorphereAnalyzer/ymfilterchildren.cpp b/MorphereAnalyzer/ymfilterchildren.cpp index e606f3e..028f2ad 100644 --- a/MorphereAnalyzer/ymfilterchildren.cpp +++ b/MorphereAnalyzer/ymfilterchildren.cpp @@ -18,6 +18,8 @@ YMFilter* YMFilterFactory::getFilter(QMap mapParam) { if(mapParam.value("Algorithm").trimmed() == "onedepth") return new YMOneDepthFilter(); + else if(mapParam.value("Algorithm").trimmed() == "twodepth") + return new YMTwoDepthFilter(); else return NULL; } @@ -169,3 +171,249 @@ QMap YMOneDepthFilter::RankFilterSeparated(QMap mapR } +/* + * 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; +} diff --git a/MorphereAnalyzer/ymfilterchildren.h b/MorphereAnalyzer/ymfilterchildren.h index da9763d..5904ca2 100644 --- a/MorphereAnalyzer/ymfilterchildren.h +++ b/MorphereAnalyzer/ymfilterchildren.h @@ -25,5 +25,23 @@ public: }; + +class YMTwoDepthFilter:public YMFilter +{ +protected: + QMap Extractor(QMap mapResult); + QMap KeywordLengthFilter(QMap mapResult); + QMap KeywordFilter(QMap mapResult); + QMap RankFilterSeparated(QMap mapResult); + QMap RankFilterALL(QMap mapResult); +public: + YMTwoDepthFilter(); + ~YMTwoDepthFilter(); + + QMap Exec(QMap mapResult); +}; + + + #endif // YMFILTERCHILDREN diff --git a/MorphereAnalyzer/ymonedepthwidget.cpp b/MorphereAnalyzer/ymonedepthwidget.cpp index e3ca857..6aa9dc2 100644 --- a/MorphereAnalyzer/ymonedepthwidget.cpp +++ b/MorphereAnalyzer/ymonedepthwidget.cpp @@ -15,6 +15,9 @@ #include #include #include +#include +#include +#include #define D_NOT_SELECT -1 @@ -966,6 +969,112 @@ void YMOneDepthWidget::SaveFile() file.close(); } +void YMOneDepthWidget::SaveFileSimple() +{ + QString strFilename = QFileDialog::getSaveFileName(0,"save file",QDir::currentPath(), + "csv files (*.csv);;All files (*.*)",new QString("Text files (*.csv)")); + if (strFilename.toLower().right(4) != QString(".csv")) + strFilename += ".csv"; + QFile file(strFilename); + if(!file.open(QFile::WriteOnly | QFile::Text)) return; + + QTextStream out(&file); + + STable* pTable = (STable*)((QTabWidget*)(m_ptwTable->currentWidget()))->currentWidget(); + int nCountIndex = pTable->columnCount() - 1; + int nKeywordIndex = pTable->columnCount() - 2; + + QString strCKeyword = m_pleCKeyword->text().trimmed(); + out << strCKeyword; + + for (int i = 0; i < pTable->rowCount(); i++) + { + QString strKeyword = pTable->item(i, nKeywordIndex)->text().trimmed(); + int nCount = pTable->item(i, nCountIndex)->text().trimmed().toInt(); + for(int j = 0; j < nCount; j++) + { + out << "," << strKeyword; + } + + } + out << endl; + file.close(); +} + +QMap YMOneDepthWidget::getResult() +{ + return m_mapResult; +} + + +void YMOneDepthWidget::TestUpload() +{ + //QMap mapResult = m_mapResult; + + QString strCKeyword = getCenterKeyword(); + //qDebug() << "executed"; + QString strjson = "{\n\t\"name\":\" " + strCKeyword + "\",\n"; + strjson += ("\t\"children\": [\n"); + + STable* pTable = (STable*)((QTabWidget*)(m_ptwTable->currentWidget()))->currentWidget(); + int nCountIndex = pTable->columnCount() - 1; + int nKeywordIndex = pTable->columnCount() - 2; + + for (int i = 0; i < pTable->rowCount(); i++) + { + QString strKeyword = pTable->item(i, nKeywordIndex)->text().trimmed(); + int nCount = pTable->item(i, nCountIndex)->text().trimmed().toInt(); + strjson += ("\t{\"name\": \"" + strKeyword + "\", \"size\": " + QString::number(nCount) + "},\n"); + } + strjson = strjson.trimmed(); + strjson = strjson.left(strjson.length() - 1); + strjson += "\n\t]\n}"; + + /* + QFile file("c:/data/jsontest.txt"); + if(!file.open(QFile::WriteOnly | QFile::Text)) return; + QTextStream out(&file); + + out << strjson; + + file.close(); + */ + + + + QSqlDatabase dbWeb = QSqlDatabase::addDatabase("QMYSQL"); + dbWeb.setHostName("db.big-bird.co.kr"); + dbWeb.setUserName("concepters"); + dbWeb.setPassword("con97996655"); + dbWeb.setDatabaseName("dbconcepters"); + + int nCompany = 90; + + if(!dbWeb.open()) + qDebug() << "DB open Failed"; + + + + QSqlQuery query(QSqlDatabase::database(dbWeb.connectionName())); + + QString strquery; + + strquery = "insert into stats_json (jdata, company_num) values ('" + strjson + "', " + QString::number(nCompany) + ")"; + + if(!query.exec(strquery.toUtf8())) + { + strquery = "update stats_json set jdata='" + strjson + "' where company_num=" + QString::number(nCompany); + if(!query.exec(strquery.toUtf8())) + { + qDebug() << query.lastError().text(); + } + } + + + dbWeb.close(); + + +} QString YMOneDepthWidget::getCenterKeyword() { diff --git a/MorphereAnalyzer/ymonedepthwidget.h b/MorphereAnalyzer/ymonedepthwidget.h index 24df3db..a214e02 100644 --- a/MorphereAnalyzer/ymonedepthwidget.h +++ b/MorphereAnalyzer/ymonedepthwidget.h @@ -41,6 +41,9 @@ public: QString getUserDictList(); QString getCenterKeyword(); void SaveFile(); + void SaveFileSimple(); + QMap getResult(); + void TestUpload(); private: // Data diff --git a/MorphereAnalyzer/ymorpherewidget.cpp b/MorphereAnalyzer/ymorpherewidget.cpp index c274786..8f6eba4 100644 --- a/MorphereAnalyzer/ymorpherewidget.cpp +++ b/MorphereAnalyzer/ymorpherewidget.cpp @@ -38,26 +38,32 @@ void YMorphereWidget::SaveFile() } + +void YMorphereWidget::SaveFileSimple() +{ + +} + +void YMorphereWidget::TestUpload() +{ + +} + + + void YMorphereWidget::Exec(int nTitleBody) { clearResult(); clearViewResult(); clearView(); - m_pYAlgorithm = YASingleton::getInstance(); + QMap mapParam = convertToParam(); + mapParam["TitleBody"] = QString::number(nTitleBody); + + m_pYAlgorithm = YAFactory::getInstance()->getYAlgorithm(mapParam); m_pYAlgorithm->init(); - QMap mapResult = convertToParam(); - mapResult["TitleBody"] = QString::number(nTitleBody); - m_pYAlgorithm->setParam(mapResult); + m_pYAlgorithm->setParam(mapParam); m_pYAlgorithm->Start(); m_mapResult = m_pYAlgorithm->getResult(); //qDebug() << m_mapResult.count(); - YMFilter* ymfilter = YMFilterFactory::getFilter(mapResult); - //qDebug() << "EXEC"; - if(ymfilter != NULL) - { - ymfilter->setParam(mapResult); - m_mapResult = ymfilter->Exec(m_mapResult); - } - delete ymfilter; ViewResult(); } diff --git a/MorphereAnalyzer/ymorpherewidget.h b/MorphereAnalyzer/ymorpherewidget.h index 9dea413..ecc3034 100644 --- a/MorphereAnalyzer/ymorpherewidget.h +++ b/MorphereAnalyzer/ymorpherewidget.h @@ -26,6 +26,8 @@ public: void Exec(int nTitleBody); virtual QMap convertToParam() = 0; virtual void SaveFile(); + virtual void SaveFileSimple(); + virtual void TestUpload(); }; #endif // YMORPHEREWIDGET diff --git a/MorphereAnalyzer/ymtwodepthwidget.cpp b/MorphereAnalyzer/ymtwodepthwidget.cpp new file mode 100644 index 0000000..a905b8e --- /dev/null +++ b/MorphereAnalyzer/ymtwodepthwidget.cpp @@ -0,0 +1,1332 @@ + +#include "ymtwodepthwidget.h" +#include "../Json/sjson.h" +#include "../common.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define D_NOT_SELECT -1 + +#define SAFE_DELETE(x) if(x != NULL) { delete x; x = NULL; } +#define SAFE_DELETEARRAY(x) if(x != NULL) { delete [] x; x = NULL; } +#define SAFE_RELEASE(x) if(x != NULL) { x->Release(); x = NULL; } + + +YMTwoDepthWidget::YMTwoDepthWidget(QWidget *parent) + :YMorphereWidget(parent) +{ + if(!setListMorphere(m_strlistMorphere, m_strlistMorphereko)) + { + m_strlistMorphere << "NNG" <<"NNP"<<"NNB"<<"NNBC"<<"NR"<<"NP"<<"VV"<<"VA"<<"VX"<<"VCP"<<"VCN"<<"MM"<<"MAG"<<"MAJ"<<"IC"<<"JKS"<<"JKC"<<"JKG"<<"JKO"<<"JKB"<<"JKV"<<"JKQ"<<"JX"<<"JC"<<"EP"<<"EF"<<"EC"<<"ETN"<<"ETM"<<"XPN"<<"XSN"<<"XSV"<<"XSA"<<"XR"<<"SF"<<"SE"<<"SSO"<<"SSC"<<"SC"<<"SY"<<"SL"<<"SH"<<"SN"; + m_strlistMorphereko << "NNG" <<"NNP"<<"NNB"<<"NNBC"<<"NR"<<"NP"<<"VV"<<"VA"<<"VX"<<"VCP"<<"VCN"<<"MM"<<"MAG"<<"MAJ"<<"IC"<<"JKS"<<"JKC"<<"JKG"<<"JKO"<<"JKB"<<"JKV"<<"JKQ"<<"JX"<<"JC"<<"EP"<<"EF"<<"EC"<<"ETN"<<"ETM"<<"XPN"<<"XSN"<<"XSV"<<"XSA"<<"XR"<<"SF"<<"SE"<<"SSO"<<"SSC"<<"SC"<<"SY"<<"SL"<<"SH"<<"SN"; + } + + QVBoxLayout *vMainLayout = new QVBoxLayout; + vMainLayout->setAlignment(Qt::AlignVCenter); + QVBoxLayout *vboxlayout = new QVBoxLayout; + + QGroupBox *gBox = setMorphereList(); + QGroupBox *gDate = setDate(); + QGroupBox *gFilter = setFilter(); + QGroupBox *gFilter2 = setFilter2(); + QGroupBox *gOther = setOther(); + QGroupBox *gSort = setSort(); + QHBoxLayout *hboxlayout = new QHBoxLayout; + QGroupBox *gDictionary = setDictionary(); + QGroupBox *gCenterKeyword = setCenterKeyword(); + + hboxlayout->addWidget(gBox,5); + + vboxlayout->addWidget(gDate,3); + //vboxlayout->addWidget(gFilter,3); + vboxlayout->addWidget(gSort,2); + vboxlayout->addWidget(gOther,2); + vboxlayout->addWidget(gDictionary,2); + + hboxlayout->addLayout(vboxlayout,5); + vMainLayout->addLayout(hboxlayout, 2); + + vMainLayout->addWidget(gCenterKeyword, 1); + vMainLayout->addWidget(gFilter, 1); + vMainLayout->addWidget(gFilter2, 1); + + + m_ptwData = new QTabWidget; + m_ptwData->setTabsClosable(true); + connect(m_ptwData,SIGNAL(tabCloseRequested(int)),this,SLOT(CloseTab(int))); + connect(m_ptwData,SIGNAL(tabBarDoubleClicked(int)),this,SLOT(DoubleClickTab(int))); + AddTable("Start"); + + vMainLayout->addWidget(m_ptwData, 8); + setLayout(vMainLayout); +} + +QGroupBox *YMTwoDepthWidget::setMorphereList() +{ + QVBoxLayout *vlayout = new QVBoxLayout; + QVBoxLayout *vlayout1 = new QVBoxLayout; + + QHBoxLayout *hlayout = new QHBoxLayout; + QGroupBox *groupBox = new QGroupBox(tr("Morphere List")); + + m_plwMorphereList = new QListWidget; + m_plwMorphereAdd = new QListWidget; + m_plwMorphereList->setSelectionMode(QAbstractItemView::MultiSelection); + m_plwMorphereAdd->setSelectionMode(QAbstractItemView::ExtendedSelection); + + + for(int i=0;isetData(Qt::UserRole, QVariant(m_strlistMorphere.at(i))); + } + + for(int i=0;isetData(Qt::UserRole, QVariant(m_strlistMorphere.at(i))); + } + + for(int i=0;icount();i++) + { + m_plwMorphereAdd->item(i)->setHidden(true); + } + + + QPushButton *ppbAdd = new QPushButton("Add"); + QPushButton *ppbDel = new QPushButton("Del"); + vlayout->addWidget(m_plwMorphereList); + vlayout->addWidget(ppbAdd); + + vlayout1->addWidget(m_plwMorphereAdd); + vlayout1->addWidget(ppbDel); + + connect(ppbAdd, SIGNAL(released()),this, SLOT(MorphereListAdd())); + connect(ppbDel, SIGNAL(released()),this, SLOT(MorphereListDel())); + + + + hlayout->addLayout(vlayout); + hlayout->addLayout(vlayout1); + + groupBox->setLayout(hlayout); + groupBox->setCheckable(true); + return groupBox; +} + + +QGroupBox *YMTwoDepthWidget::setDate() +{ + QHBoxLayout *hlayout = new QHBoxLayout; + QHBoxLayout *hlayout1 = new QHBoxLayout; + QVBoxLayout *vlayout = new QVBoxLayout; + + QGroupBox *groupBox = new QGroupBox(tr("Date")); + + m_pdeStart = new QDateEdit(QDate::currentDate()); + m_pdeEnd = new QDateEdit(QDate::currentDate()); + + m_pdeStart->setDateRange(QDate(2003, 5, 20),QDate::currentDate()); + m_pdeEnd->setDateRange(QDate(2003, 5, 20),QDate::currentDate()); + + QCalendarWidget *pCalender = new QCalendarWidget(); + m_pdeStart->setCalendarWidget(pCalender); + m_pdeStart->setCalendarPopup(true); + + m_pdeEnd->setCalendarWidget(pCalender); + m_pdeEnd->setCalendarPopup(true); + + m_pcbDate = new QComboBox; + m_pcbDate->addItems(QStringList() << "ALL" << "NotAll"); + + m_pcbPeriod = new QComboBox; + m_pcbPeriod->addItems(QStringList() << "None" << "1 Day" << "1 Week" << "1 Month"); + + hlayout->addWidget(m_pcbDate); + hlayout->addWidget(new QLabel("Start:")); + hlayout->addWidget(m_pdeStart); + hlayout->addWidget(new QLabel("End:")); + hlayout->addWidget(m_pdeEnd); + + hlayout1->addWidget(new QLabel("Period:")); + hlayout1->addWidget(m_pcbPeriod); + + vlayout->addLayout(hlayout); + vlayout->addLayout(hlayout1); + + vlayout->addLayout(hlayout); + vlayout->addLayout(hlayout1); + groupBox->setCheckable(true); + + groupBox->setLayout(vlayout); + + return groupBox; +} + +QGroupBox *YMTwoDepthWidget::setFilter() +{ + QHBoxLayout *hlayout = new QHBoxLayout; + QHBoxLayout *hlayout2 = new QHBoxLayout; + QHBoxLayout *hlayout3 = new QHBoxLayout; + QVBoxLayout *vlayout = new QVBoxLayout; + + + m_pleFilterRankALL = new QLineEdit; + m_pleFilterRankSeparated = new QLineEdit; + m_pleFilterKeyword = new QLineEdit; + m_pleFilterKeywordLength = new QLineEdit; + m_pleFilterExtractor = new QLineEdit; + + m_pleFilterKeywordLength->setValidator(new QIntValidator(1, 10)); + m_pleFilterRankALL->setValidator(new QIntValidator(1, 10000)); + m_pleFilterRankSeparated->setValidator(new QIntValidator(1, 10000)); + + hlayout->addWidget(new QLabel("RankALL: ")); + hlayout->addWidget(m_pleFilterRankALL); + hlayout->addWidget(new QLabel("RankSeparated: ")); + hlayout->addWidget(m_pleFilterRankSeparated); + hlayout->addWidget(new QLabel("Keyword Length: ")); + hlayout->addWidget(m_pleFilterKeywordLength); + + hlayout2->addWidget(new QLabel("KeywordFilter: ")); + hlayout2->addWidget(m_pleFilterKeyword); + + hlayout3->addWidget(new QLabel("Extract Keyword: ")); + hlayout3->addWidget(m_pleFilterExtractor); + + + vlayout->addLayout(hlayout3); + vlayout->addLayout(hlayout2); + vlayout->addLayout(hlayout); + QGroupBox *groupBox = new QGroupBox(tr("1Depth Filter")); + + groupBox->setCheckable(true); + + groupBox->setLayout(vlayout); + groupBox->setChecked(true); + return groupBox; +} + +QGroupBox *YMTwoDepthWidget::setFilter2() +{ + QHBoxLayout *hlayout = new QHBoxLayout; + QHBoxLayout *hlayout2 = new QHBoxLayout; + QHBoxLayout *hlayout3 = new QHBoxLayout; + QVBoxLayout *vlayout = new QVBoxLayout; + + + m_pleFilterRankALL2 = new QLineEdit; + m_pleFilterRankSeparated2 = new QLineEdit; + m_pleFilterKeyword2 = new QLineEdit; + m_pleFilterKeywordLength2 = new QLineEdit; + m_pleFilterExtractor2 = new QLineEdit; + + m_pleFilterKeywordLength2->setValidator(new QIntValidator(1, 10)); + m_pleFilterRankALL2->setValidator(new QIntValidator(1, 10000)); + m_pleFilterRankSeparated2->setValidator(new QIntValidator(1, 10000)); + + hlayout->addWidget(new QLabel("RankALL: ")); + hlayout->addWidget(m_pleFilterRankALL2); + hlayout->addWidget(new QLabel("RankSeparated: ")); + hlayout->addWidget(m_pleFilterRankSeparated2); + hlayout->addWidget(new QLabel("Keyword Length: ")); + hlayout->addWidget(m_pleFilterKeywordLength2); + + hlayout2->addWidget(new QLabel("KeywordFilter: ")); + hlayout2->addWidget(m_pleFilterKeyword2); + + hlayout3->addWidget(new QLabel("Extract Keyword: ")); + hlayout3->addWidget(m_pleFilterExtractor2); + + + vlayout->addLayout(hlayout3); + vlayout->addLayout(hlayout2); + vlayout->addLayout(hlayout); + QGroupBox *groupBox = new QGroupBox(tr("2Depth Filter")); + + groupBox->setCheckable(true); + + groupBox->setLayout(vlayout); + groupBox->setChecked(true); + return groupBox; +} + + + + +QGroupBox *YMTwoDepthWidget::setOther() +{ + QHBoxLayout *hlayout = new QHBoxLayout; + + m_pcbThread = new QComboBox; + + hlayout->addWidget(new QLabel("Thread:")); + hlayout->addWidget(m_pcbThread); + + m_pcbThread->addItems(QStringList() << "1" << "2" << "4" << "8"); + + QGroupBox *groupBox = new QGroupBox(tr("Other")); + groupBox->setCheckable(true); + + groupBox->setLayout(hlayout); + + return groupBox; +} + +QGroupBox *YMTwoDepthWidget::setSort() +{ + QHBoxLayout *hlayout = new QHBoxLayout; + + m_rbDateMorphere = new QRadioButton("Date/Morphere"); + m_rbMorphereDate = new QRadioButton("Morphere/Date"); + + + m_bgRadioGroup = new QButtonGroup; + + m_bgRadioGroup->addButton(m_rbMorphereDate); + m_bgRadioGroup->addButton(m_rbDateMorphere); + + m_rbMorphereDate->setChecked(true); + + hlayout->addWidget(m_rbMorphereDate); + hlayout->addWidget(m_rbDateMorphere); + + QGroupBox *groupBox = new QGroupBox(tr("Sort")); + groupBox->setCheckable(true); + + groupBox->setLayout(hlayout); + + return groupBox; +} + + +QGroupBox *YMTwoDepthWidget::setDictionary() +{ + QHBoxLayout *hlayout = new QHBoxLayout; + + m_pcbDictionary = new QComboBox; + + m_pcbDictionary->setEditable(true); + m_pcbDictionary->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + QPushButton* add = new QPushButton; + QPushButton* del = new QPushButton; + add->setText(tr("+")); + del->setText(tr("-")); + + //hlayout->addWidget(new QLabel(tr("User-Dict: "))); + hlayout->addWidget(m_pcbDictionary); + hlayout->addWidget(add); + hlayout->addWidget(del); + + connect(add, SIGNAL(released()),this, SLOT(AddDictionary())); + connect(del, SIGNAL(released()),this, SLOT(DelDictionary())); + + QGroupBox *groupBox = new QGroupBox(tr("User Dictionary")); + groupBox->setCheckable(true); + + groupBox->setLayout(hlayout); + + return groupBox; +} + + + +QGroupBox *YMTwoDepthWidget::setCenterKeyword() +{ + QHBoxLayout *hlayout = new QHBoxLayout; + + m_pleCKeyword = new QLineEdit; + + hlayout->addWidget(new QLabel("Center Keyword: ")); + hlayout->addWidget(m_pleCKeyword); + + QGroupBox *groupBox = new QGroupBox(tr("Center Keyword")); + + groupBox->setCheckable(true); + + groupBox->setLayout(hlayout); + groupBox->setChecked(true); + return groupBox; +} + + +void YMTwoDepthWidget::AddDictionary() +{ + QStringList strFilenames = QFileDialog::getOpenFileNames(0,"Dictionary file",QDir::currentPath(), + "dic files (*.dic);;All files (*.*)",new QString("Dictionary files (*.dic)")); + + foreach(QString strFilename, strFilenames) + { + QFile file(strFilename); + if (!file.open(QIODevice::ReadOnly)) return; + } + + + for(int i = 0; i < m_pcbDictionary->count(); i++) + { + if(strFilenames.contains(m_pcbDictionary->itemText(i))) + strFilenames.removeOne(m_pcbDictionary->itemText(i)); + } + + m_pcbDictionary->addItems(strFilenames); +} + +QString YMTwoDepthWidget::getUserDictList() +{ + QStringList strList; + + for(int i = 0; i < m_pcbDictionary->count();i++) + { + strList << m_pcbDictionary->itemText(i); + } + + return strList.join(","); +} + + + +void YMTwoDepthWidget::DelDictionary() +{ + m_pcbDictionary->removeItem(0); + qDebug() << getUserDictList(); +} + +bool YMTwoDepthWidget::isSortMorphereDateChecked() +{ + return m_rbMorphereDate->isChecked(); +} + +bool YMTwoDepthWidget::isSortDateMorphereChecked() +{ + return m_rbDateMorphere->isChecked(); +} + + +void YMTwoDepthWidget::MorphereListAdd() +{ + QList listitem = m_plwMorphereList->selectedItems(); + + foreach(QListWidgetItem *item, listitem) + { + for(int i = 0; i < m_plwMorphereAdd->count();i++) + { + if(item->data(Qt::UserRole) == m_plwMorphereAdd->item(i)->data(Qt::UserRole)) + m_plwMorphereAdd->item(i)->setHidden(false); + } + } +} + +void YMTwoDepthWidget::MorphereListDel() +{ + for(int i = m_plwMorphereAdd->count() - 1; i >= 0 ;i--) + { + if(m_plwMorphereAdd->item(i)->isSelected()) + { + m_plwMorphereAdd->item(i)->setHidden(true); + } + } +} + +QTableWidget *YMTwoDepthWidget::AddTable(QString _str) +{ + STable *pTable = new STable; + m_ptwData->addTab(pTable,_str); + return (QTableWidget *)pTable; +} + +void YMTwoDepthWidget::CloseTab(int index) +{ + ((STable*)(m_ptwData->widget(index)))->clear(); + m_ptwData->removeTab(index); +} + +void YMTwoDepthWidget::DoubleClickTab(int index) +{ + bool ok; + if (index < 0) return; + QString text = QInputDialog::getText(this,"Tab name change","Name : ", QLineEdit::Normal,m_ptwData->tabText(index), &ok); + if (ok) + { + m_ptwData->setTabText(index,text); + } +} + +void YMTwoDepthWidget::FileImport() +{ + QString strFilename = QFileDialog::getOpenFileName(0,"Import file",QDir::currentPath(), + "csv files (*.csv);;All files (*.*)",new QString("Text files (*.csv)")); + + QFile file(strFilename); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; + + clearResult(); + m_mapViewResult.clear(); + + //qDebug() << "clear is complete"; + + QTextStream in(&file); + + while(!in.atEnd()) + { + QString strLine = in.readLine(); + strLine = strLine.replace("\"",""); + //qDebug() << strLine; + QStringList strListLine = strLine.split(","); + + if(strListLine.size() != 4) + continue; + + //qDebug() << strListLine.at(4).trimmed().toInt(); + + QString strKey = strListLine.at(0).trimmed() + "~!@" + strListLine.at(1).trimmed() + "~!@" + strListLine.at(2).trimmed(); + m_mapResult.insert(strKey, strListLine.at(3).trimmed().toInt()); + } + + file.close(); + + for(QMap::iterator iterPos = m_mapResult.begin(); iterPos != m_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); + } + } + ViewResult(); +} + +void YMTwoDepthWidget::FileExport() +{ + QString strFilename = QFileDialog::getSaveFileName(0,"Exoprt file",QDir::currentPath(), + "csv files (*.csv);;All files (*.*)",new QString("Text files (*.csv)")); + if (strFilename.toLower().right(4) != QString(".csv")) + strFilename += ".csv"; + QFile file(strFilename); + if(!file.open(QFile::WriteOnly | QFile::Text)) return; + + QTextStream out(&file); + + + for (int i = 0; i < m_ptwData->count(); i++) + { + m_ptwData->setTabEnabled(i, true); + QTabWidget* p_childWidget = (QTabWidget*)(m_ptwData->widget(i)); + + for (int j = 0; j < p_childWidget->count(); j++) + { + p_childWidget->setTabEnabled(j, true); + STable *stable = (STable *) (p_childWidget->widget(j)); + for (int nCount = 0 ; nCount < stable->rowCount(); nCount++ ) + { + + QString str = stable->item(nCount,0)->text().trimmed() + "," + stable->item(nCount,1)->text().trimmed(); + out << m_ptwData->tabText(i).trimmed() << "," << p_childWidget->tabText(j).trimmed() << ","; + out << str << endl; + } + } + } + + file.close(); +} + +int YMTwoDepthWidget::getThread() +{ + return m_pcbThread->currentText().toInt(); +} + + +unsigned int YMTwoDepthWidget::getDateStart() +{ + return m_pdeStart->dateTime().toString("yyyy-MM-dd").replace("-","").trimmed().toInt(); +} + +unsigned int YMTwoDepthWidget::getDateEnd() +{ + return m_pdeEnd->dateTime().toString("yyyy-MM-dd").replace("-","").trimmed().toInt(); +} + +int YMTwoDepthWidget::getPeriod() +{ + return m_pcbPeriod->currentIndex(); +} + +QStringList YMTwoDepthWidget::getMorphereList() +{ + QStringList strList; + for(int i = 0; i < m_plwMorphereAdd->count();i++) + { + if(m_plwMorphereAdd->item(i)->isHidden()) + continue; + else + { + strList << m_plwMorphereAdd->item(i)->data(Qt::UserRole).toString(); + } + } + return strList; +} + +bool YMTwoDepthWidget::getDateAll() +{ + if(m_pcbDate->currentIndex() == 0) + return true; + else + return false; +} + +QTabWidget* YMTwoDepthWidget::getQTabWidget() +{ + return m_ptwData; +} + + +void YMTwoDepthWidget::MemClear() +{ + m_mapResult.clear(); + m_mapViewResult.clear(); +} + + +bool YMTwoDepthWidget::setListMorphere(QStringList& MorphereEN, QStringList& MorphereKO) +{ + QFile fHeader("morpherelist.txt"); + if (!fHeader.open(QIODevice::ReadOnly | QIODevice::Text)) return false; + + QTextStream in(&fHeader); + + QString str = in.readLine(); + + if(str.at(0) == '#') + { + } + else + { + qDebug() << "The wrong file is read"; + return false; + } + + while(!in.atEnd()) + { + str = in.readLine(); + QStringList strList = str.trimmed().split("@",QString::SkipEmptyParts); + if(strList.isEmpty()) + break; + if(strList.size() < 2) + return false; + MorphereEN << strList.at(0).trimmed().replace("\"","").trimmed(); + MorphereKO << strList.at(1).trimmed().replace("\"","").trimmed(); + } + + return true; +} + + +void YMTwoDepthWidget::RawFileExport() +{ + QString strFilename = QFileDialog::getSaveFileName(0,"Exoprt file",QDir::currentPath(), + "csv files (*.csv);;All files (*.*)",new QString("Text files (*.csv)")); + if (strFilename.toLower().right(4) != QString(".csv")) + strFilename += ".csv"; + QFile file(strFilename); + if(!file.open(QFile::WriteOnly | QFile::Text)) return; + + QTextStream out(&file); + + /* + out << "#Head#,"; + for (int nCount = 0;nCount < pCurrent->columnCount() ;nCount++ ) + out << pCurrent->horizontalHeaderItem(nCount)->text() << ","; + + m_pProgress->setRange(0,pCurrent->rowCount()-1); + */ + + for( QMap > >::iterator iterPos = m_mapViewResult.begin(); iterPos != m_mapViewResult.end(); iterPos++) + { + for(QMap >::iterator iterPos2 = iterPos.value().begin(); iterPos2 != iterPos.value().end(); iterPos2++) + { + QMapIterator i(m_mapViewResult[iterPos.key()][iterPos2.key()]); + i.toBack(); + while(i.hasPrevious()) + { + i.previous(); + out << "\"" << iterPos.key() << "\"" << ","; + out << "\"" << iterPos2.key() << "\"" << ","; + out << "\"" << i.value() << "\"" << ","; + out << "\"" << i.key() << "\"" << "\n"; + } + } + } + + file.close(); +} + + + +YMTwoDepthWidget::~YMTwoDepthWidget() +{ + +} + +void YMTwoDepthWidget::clearViewResult() +{ + +} + + + +void YMTwoDepthWidget::clearView() +{ + m_mapViewResult.clear(); + m_mapViewResult2.clear(); +} + +void YMTwoDepthWidget::SortViewResult() +{ + if(isSortDateMorphereChecked()) + { + for(QMap::iterator iterPos = m_mapResult.begin(); iterPos != m_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); + QString strMorphere2 = strlistKey.at(3); + QString strKeyword2 = strlistKey.at(4); + + m_mapViewResult[(strDate)]["ALLMORPHERE"].insertMulti(count, QString(strMorphere + "~!@" + strKeyword + "~!@" + strMorphere2 + "~!@" + strKeyword2 )); // added + if(m_mapViewResult.contains(strDate)) + { + if(m_mapViewResult.value(strDate).contains(strMorphere)) + { + m_mapViewResult[(strDate)][(strMorphere)].insertMulti(count, strKeyword + "~!@" + strMorphere2 + "~!@" + strKeyword2); + //m_mapViewResult[(strDate)]["ALLMORPHERE"].insertMulti(count, QString(strMorphere + "~!@" + strKeyword )); // added + } + else + { + QMap qLast; + qLast.insert(count, strKeyword + "~!@" + strMorphere2 + "~!@" + strKeyword2); + m_mapViewResult[(strDate)].insert(strMorphere, qLast); + + /* + qLast.clear(); //added + qLast.insert(count, QString(strMorphere + "~!@" + strKeyword));//added + m_mapViewResult[(strDate)].insert("ALLMORPHERE", qLast);//added + */ + } + } + else + { + QMap qLast; + qLast.insert(count , strKeyword + "~!@" + strMorphere2 + "~!@" + strKeyword2); + QMap > qMedium; + qMedium.insert(strMorphere, qLast); + m_mapViewResult.insert(strDate, qMedium); + /* + qLast.clear(); + qMedium.clear(); + qLast.insert(count, QString(strMorphere + "~!@" + strKeyword)); + qMedium.insert("ALLMORPHERE", qLast); + m_mapViewResult.insert(strDate, qMedium); + */ + } + } + } + else + { + for(QMap::iterator iterPos = m_mapResult.begin(); iterPos != m_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); + QString strMorphere2 = strlistKey.at(3); + QString strKeyword2 = strlistKey.at(4); + m_mapViewResult[("ALLMORPHERE")][(strDate)].insertMulti(count, QString(strMorphere + "~!@" + strKeyword + "~!@" + strMorphere2 + "~!@" + strKeyword2 )); + if(m_mapViewResult.contains(strMorphere)) + { + if(m_mapViewResult.value(strMorphere).contains(strDate)) + { + m_mapViewResult[(strMorphere)][(strDate)].insertMulti(count, strKeyword + "~!@" + strMorphere2 + "~!@" + strKeyword2 ); + //m_mapViewResult[("ALLMORPHERE")][(strDate)].insertMulti(count, QString(strMorphere + "~!@" + strKeyword )); + } + else + { + + QMap qLast; + qLast.insert(count, strKeyword + "~!@" + strMorphere2 + "~!@" + strKeyword2); + m_mapViewResult[(strMorphere)].insert(strDate, qLast); + /* + qLast.clear(); + qLast.insert(count, QString(strMorphere + "~!@" + strKeyword) ); + m_mapViewResult[("ALLMORPHERE")].insert(strDate, qLast); + */ + } + } + else + { + QMap qLast; + qLast.insert(count , strKeyword + "~!@" + strMorphere2 + "~!@" + strKeyword2); + QMap > qMedium; + qMedium.insert(strDate, qLast); + m_mapViewResult.insert(strMorphere, qMedium); + /* + qLast.clear(); + qMedium.clear(); + qLast.insert(count,QString(strMorphere + "~!@" + strKeyword)); + qMedium.insert(strDate, qLast); + m_mapViewResult.insert("ALLMORPHERE", qMedium); + */ + } + } + } +/* + for(QMap::iterator iterPos = m_mapResult.begin(); iterPos != m_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_mapViewResult2.contains(strDate)) + { + if(m_mapViewResult2.value(strDate).contains(count)) + { + m_mapViewResult2[(strDate)][(count)].insertMulti(strMorphere, strKeyword); + } + else + { + QMap qLast; + qLast.insert(strMorphere, strKeyword); + m_mapViewResult2[(strDate)].insert(count, qLast); + } + } + else + { + QMap qLast; + qLast.insert(strMorphere , strKeyword); + QMap > qMedium; + qMedium.insert(count, qLast); + m_mapViewResult2.insert(strDate, qMedium); + } + } +*/ +} + + +void YMTwoDepthWidget::ViewResult() +{ + SortViewResult(); + foreach(STable* ptable, m_lTable) + { + ptable->clear(); + delete ptable; + } + m_lTable.clear(); + + foreach(QTabWidget* pwidget, m_lTabWidget) + { + pwidget->clear(); + delete pwidget; + } + m_lTabWidget.clear(); + + + m_ptwTable = getQTabWidget(); + m_ptwTable->clear(); + + for( QMap > >::iterator iterPos = m_mapViewResult.begin(); iterPos != m_mapViewResult.end(); iterPos++) + { + QTabWidget* temp = new QTabWidget; + for(QMap >::iterator iterPos2 = iterPos.value().begin(); iterPos2 != iterPos.value().end(); iterPos2++) + { + + if( (iterPos2.key() == "ALLMORPHERE") || (iterPos.key() == "ALLMORPHERE") ) + { + int ncRow = 0; + + STable *pNew = new STable; + pNew->setColumnCount(5); + pNew->setRowCount(m_mapViewResult[iterPos.key()][iterPos2.key()].size()); + pNew->setHorizontalHeaderItem(0 ,new QTableWidgetItem("1D Morphere")); + pNew->setHorizontalHeaderItem(1 ,new QTableWidgetItem("1D Keyword")); + pNew->setHorizontalHeaderItem(2 ,new QTableWidgetItem("2D Morphere")); + pNew->setHorizontalHeaderItem(3 ,new QTableWidgetItem("2D Keyword")); + pNew->setHorizontalHeaderItem(4 ,new QTableWidgetItem("Count")); + + QMapIterator i(m_mapViewResult[iterPos.key()][iterPos2.key()]); + i.toBack(); + while(i.hasPrevious()) + { + i.previous(); + pNew->setItem(ncRow,0,new QTableWidgetItem(QString(i.value().split("~!@").at(0)))); + pNew->setItem(ncRow,1,new QTableWidgetItem(QString(i.value().split("~!@").at(1)))); + pNew->setItem(ncRow,2,new QTableWidgetItem(QString(i.value().split("~!@").at(2)))); + pNew->setItem(ncRow,3,new QTableWidgetItem(QString(i.value().split("~!@").at(3)))); + pNew->setItem(ncRow,4,new QTableWidgetItem(QString::number(i.key()))); + ncRow++; + } + temp->addTab(pNew, iterPos2.key()); + m_lTable << pNew; + + } + else + { + int ncRow = 0; + + STable *pNew = new STable; + pNew->setColumnCount(4); + pNew->setRowCount(m_mapViewResult[iterPos.key()][iterPos2.key()].size()); + pNew->setHorizontalHeaderItem(0 ,new QTableWidgetItem("1D Keyword")); + pNew->setHorizontalHeaderItem(1 ,new QTableWidgetItem("2D Morphere")); + pNew->setHorizontalHeaderItem(2 ,new QTableWidgetItem("2D Keyword")); + pNew->setHorizontalHeaderItem(3 ,new QTableWidgetItem("Count")); + + QMapIterator i(m_mapViewResult[iterPos.key()][iterPos2.key()]); + i.toBack(); + while(i.hasPrevious()) + { + i.previous(); + pNew->setItem(ncRow,0,new QTableWidgetItem(QString(i.value().split("~!@").at(0)))); + pNew->setItem(ncRow,1,new QTableWidgetItem(QString(i.value().split("~!@").at(1)))); + pNew->setItem(ncRow,2,new QTableWidgetItem(QString(i.value().split("~!@").at(2)))); + pNew->setItem(ncRow,3,new QTableWidgetItem(QString::number(i.key()))); + ncRow++; + } + temp->addTab(pNew, iterPos2.key()); + m_lTable << pNew; + } + + } + m_ptwTable->addTab(temp, iterPos.key()); + m_lTabWidget << temp; + } + + /* + QMap > >::iterator iterPosi = m_mapViewResult2.begin(); + for( QMap > >::iterator iterPos = m_mapViewResult.begin(); iterPos != m_mapViewResult.end(); iterPos++, iterPosi++) + { + QTabWidget* temp = new QTabWidget; + for(QMap >::iterator iterPos2 = iterPos.value().begin(); iterPos2 != iterPos.value().end(); iterPos2++) + { + int ncRow = 0; + + STable *pNew = new STable; + pNew->setColumnCount(2); + pNew->setRowCount(m_mapViewResult[iterPos.key()][iterPos2.key()].size()); + pNew->setHorizontalHeaderItem(0 ,new QTableWidgetItem("Keyword")); + pNew->setHorizontalHeaderItem(1 ,new QTableWidgetItem("Count")); + + QMapIterator i(m_mapViewResult[iterPos.key()][iterPos2.key()]); + i.toBack(); + while(i.hasPrevious()) + { + i.previous(); + pNew->setItem(ncRow,0,new QTableWidgetItem(QString(i.value()))); + pNew->setItem(ncRow,1,new QTableWidgetItem(QString::number(i.key()))); + ncRow++; + } + temp->addTab(pNew, iterPos2.key()); + m_lTable << pNew; + } + + { + int ncRow = 0; + + STable *pNew = new STable; + pNew->setColumnCount(3); + pNew->setRowCount(m_mapViewResult2[iterPosi.key()].size()); + pNew->setHorizontalHeaderItem(0 ,new QTableWidgetItem("Morphere")); + pNew->setHorizontalHeaderItem(1 ,new QTableWidgetItem("Keyword")); + pNew->setHorizontalHeaderItem(2 ,new QTableWidgetItem("Count")); + + QMapIterator> j(m_mapViewResult2[iterPosi.key()]); + j.toBack(); + while(j.hasPrevious()) + { + j.previous(); + for(QMap::iterator iterPosii = m_mapViewResult2[iterPosi.key()][j.key()].begin(); iterPosii != m_mapViewResult2[iterPosi.key()][j.key()].end(); iterPosii++) + { + pNew->setItem(ncRow,0,new QTableWidgetItem(QString(iterPosii.key()))); + pNew->setItem(ncRow,1,new QTableWidgetItem(QString(iterPosii.value()))); + pNew->setItem(ncRow,2,new QTableWidgetItem(QString::number(j.key()))); + ncRow++; + } + } + temp->addTab(pNew, "ALL"); + m_lTable << pNew; + } + + m_ptwTable->addTab(temp, iterPos.key()); + m_lTabWidget << temp; + } + */ +} + +void YMTwoDepthWidget::SaveFile() +{ + QString strFilename = QFileDialog::getSaveFileName(0,"save file",QDir::currentPath(), + "csv files (*.csv);;All files (*.*)",new QString("Text files (*.csv)")); + if (strFilename.toLower().right(4) != QString(".csv")) + strFilename += ".csv"; + QFile file(strFilename); + if(!file.open(QFile::WriteOnly | QFile::Text)) return; + + QTextStream out(&file); + QMap > mapResult; + + { + STable* pTable = (STable*)((QTabWidget*)(m_ptwTable->currentWidget()))->currentWidget(); + if(pTable->columnCount() < 4) + return; + int nCountIndex = pTable->columnCount() - 1; + int nTDKeywordIndex = pTable->columnCount() - 2; + int nODKeywordIndex = pTable->columnCount() - 4; + + for (int i = 0; i < pTable->rowCount(); i++) + { + QString strODKeyword = pTable->item(i, nODKeywordIndex)->text().trimmed(); + QString strTDKeyword = pTable->item(i, nTDKeywordIndex)->text().trimmed(); + int nCount = pTable->item(i, nCountIndex)->text().trimmed().toInt(); + if(mapResult.contains(strODKeyword)) + { + mapResult[strODKeyword].insert(strTDKeyword, nCount); + } + else + { + QMap qLast; + qLast.insert(strTDKeyword, nCount); + mapResult.insert(strODKeyword, qLast); + } + } + } + QString strCKeyword = m_pleCKeyword->text().trimmed(); + + for(QMap >::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++) + { + int sum = 0; + out << iterPos.key(); + for(QMap::iterator iterPos2 = iterPos.value().begin(); iterPos2 != iterPos.value().end() ; iterPos2++) + { + sum += iterPos2.value(); + for(int i = 0; i < iterPos2.value(); i++) + { + out << ";" << iterPos2.key(); + } + } + out << "\n"; + out << strCKeyword; + for(int i = 0; i < sum; i++) + { + out << ";" << iterPos.key(); + } + out << "\n"; + } + + file.close(); +} + +void YMTwoDepthWidget::SaveFileSimple() +{ + QString strFilename = QFileDialog::getSaveFileName(0,"save file",QDir::currentPath(), + "dl files (*.dl);;All files (*.*)",new QString("Text files (*.dl)")); + if (strFilename.toLower().right(3) != QString(".dl")) + strFilename += ".dl"; + QFile file(strFilename); + if(!file.open(QFile::WriteOnly | QFile::Text)) return; + QMap > mapResult; + + QTextStream out(&file); + QSet setKey; + { + STable* pTable = (STable*)((QTabWidget*)(m_ptwTable->currentWidget()))->currentWidget(); + if(pTable->columnCount() < 4) + return; + int nCountIndex = pTable->columnCount() - 1; + int nTDKeywordIndex = pTable->columnCount() - 2; + int nODKeywordIndex = pTable->columnCount() - 4; + + for (int i = 0; i < pTable->rowCount(); i++) + { + QString strODKeyword = pTable->item(i, nODKeywordIndex)->text().trimmed(); + QString strTDKeyword = pTable->item(i, nTDKeywordIndex)->text().trimmed(); + int nCount = pTable->item(i, nCountIndex)->text().trimmed().toInt(); + setKey.insert(strODKeyword); + setKey.insert(strTDKeyword); + + if(mapResult.contains(strODKeyword)) + { + mapResult[strODKeyword].insert(strTDKeyword, nCount); + } + else + { + QMap qLast; + qLast.insert(strTDKeyword, nCount); + mapResult.insert(strODKeyword, qLast); + } + } + } + + QString strCKeyword = m_pleCKeyword->text().trimmed(); + + out << "dl\nformat=edgelist1\nn=" + QString::number(setKey.size()) + "\ndata:\n"; + + setKey.clear(); + + for(QMap >::iterator iterPos = mapResult.begin(); iterPos != mapResult.end(); iterPos++) + { + int sum = 0; + + for(QMap::iterator iterPos2 = iterPos.value().begin(); iterPos2 != iterPos.value().end() ; iterPos2++) + { + sum += iterPos2.value(); + out << iterPos.key() << " " << iterPos2.key() << " " << iterPos2.value() << "\n"; + } + out << strCKeyword << " " << iterPos.key() << " " << sum << "\n"; + } + + file.close(); +} + +QMap YMTwoDepthWidget::getResult() +{ + return m_mapResult; +} + + +void YMTwoDepthWidget::TestUpload() +{ + //QMap mapResult = m_mapResult; + QMap > mapResult; + + QString strCKeyword = getCenterKeyword(); + //qDebug() << "executed"; + { + STable* pTable = (STable*)((QTabWidget*)(m_ptwTable->currentWidget()))->currentWidget(); + if(pTable->columnCount() < 4) + return; + int nCountIndex = pTable->columnCount() - 1; + int nTDKeywordIndex = pTable->columnCount() - 2; + int nODKeywordIndex = pTable->columnCount() - 4; + + for (int i = 0; i < pTable->rowCount(); i++) + { + QString strODKeyword = pTable->item(i, nODKeywordIndex)->text().trimmed(); + QString strTDKeyword = pTable->item(i, nTDKeywordIndex)->text().trimmed(); + int nCount = pTable->item(i, nCountIndex)->text().trimmed().toInt(); + + if(mapResult.contains(strODKeyword)) + { + mapResult[strODKeyword].insert(strTDKeyword, nCount); + } + else + { + QMap qLast; + qLast.insert(strTDKeyword, nCount); + mapResult.insert(strODKeyword, qLast); + } + } + } + + QString strjson = "{\n\t\"name\":\" " + strCKeyword + "\",\n"; + strjson += ("\t\"children\": [\n"); + + for(QMap >::iterator iterPos1 = mapResult.begin(); iterPos1 != mapResult.end(); iterPos1++) + { + int sum = 0; + for(QMap::iterator iterPos2 = iterPos1.value().begin(); iterPos2 != iterPos1.value().end(); iterPos2++) + { + sum += iterPos2.value(); + } + strjson += "\t{\n"; + + strjson += ("\t\t\"name\":\"" + iterPos1.key() + "\",\"size\":" + QString::number(sum) + ",\n"); + strjson += "\t\t\"children\": [\n"; + + + for(QMap::iterator iterPos2 = iterPos1.value().begin(); iterPos2 != iterPos1.value().end(); iterPos2++) + { + strjson += ("\t\t\t{\"name\": \"" + iterPos2.key() + "\", \"size\": " + QString::number(iterPos2.value()) + "},\n"); + } + strjson = strjson.trimmed(); + strjson = strjson.left(strjson.length() - 1); + strjson += "\n\t\t]\n\t},\n"; + } + strjson = strjson.trimmed(); + strjson = strjson.left(strjson.length() - 1); + strjson += "\n\t]\n}"; + + + + QFile file("c:/data/jsontest.txt"); + if(!file.open(QFile::WriteOnly | QFile::Text)) return; + QTextStream out(&file); + + out << strjson; + + file.close(); + + + + /* + QSqlDatabase dbWeb = QSqlDatabase::addDatabase("QMYSQL"); + dbWeb.setHostName("db.big-bird.co.kr"); + dbWeb.setUserName("concepters"); + dbWeb.setPassword("con97996655"); + dbWeb.setDatabaseName("dbconcepters"); + + int nCompany = 90; + + if(!dbWeb.open()) + qDebug() << "DB open Failed"; + + + + QSqlQuery query(QSqlDatabase::database(dbWeb.connectionName())); + + QString strquery; + + strquery = "insert into stats_json (jdata, company_num) values ('" + strjson + "', " + QString::number(nCompany) + ")"; + + if(!query.exec(strquery.toUtf8())) + { + strquery = "update stats_json set jdata='" + strjson + "' where company_num=" + QString::number(nCompany); + if(!query.exec(strquery.toUtf8())) + { + qDebug() << query.lastError().text(); + } + } + + + dbWeb.close(); + + */ +} + +QString YMTwoDepthWidget::getCenterKeyword() +{ + return m_pleCKeyword->text().trimmed(); +} + +QMap YMTwoDepthWidget::convertToParam() +{ + QMap mapParam; + mapParam.insert("Algorithm", "twodepth"); + + { + QString strMorphereList = getMorphereList().join(" "); + mapParam.insert("MorphereList",strMorphereList); + } + { + int nThread = getThread(); + mapParam.insert("Thread", QString::number(nThread)); + } + { + QString strUserDict = getUserDictList(); + if(strUserDict.trimmed().length() > 0) + mapParam.insert("UserDict", strUserDict); + } + { + if(getDateAll()) + mapParam.insert("DateALL", "true"); + else + mapParam.insert("DateALL", "false"); + } + { + mapParam.insert("DateStart", QString::number(getDateStart())); + mapParam.insert("DateEnd", QString::number(getDateEnd())); + } + { + mapParam.insert("Period", QString::number(getPeriod())); + } + { + mapParam.insert("CenterKeyword", getCenterKeyword()); + } + + { + if(!m_pleFilterExtractor->text().trimmed().isEmpty()) + mapParam.insert("Extractor", m_pleFilterExtractor->text().trimmed()); + } + { + if(!m_pleFilterKeyword->text().trimmed().isEmpty()) + mapParam.insert("KeywordFilter",m_pleFilterKeyword->text().trimmed()); + } + { + if(!m_pleFilterKeywordLength->text().trimmed().isEmpty()) + mapParam.insert("KeywordLengthFilter", m_pleFilterKeywordLength->text().trimmed()); + } + { + if(!m_pleFilterRankALL->text().trimmed().isEmpty()) + mapParam.insert("RankFilterAll", m_pleFilterRankALL->text().trimmed()); + } + + { + if(!m_pleFilterRankSeparated->text().trimmed().isEmpty()) + mapParam.insert("RankFilterSeparated", m_pleFilterRankSeparated->text().trimmed()); + } + + { + if(!m_pleFilterExtractor2->text().trimmed().isEmpty()) + mapParam.insert("Extractor2", m_pleFilterExtractor2->text().trimmed()); + } + { + if(!m_pleFilterKeyword2->text().trimmed().isEmpty()) + mapParam.insert("KeywordFilter2",m_pleFilterKeyword2->text().trimmed()); + } + { + if(!m_pleFilterKeywordLength2->text().trimmed().isEmpty()) + mapParam.insert("KeywordLengthFilter2", m_pleFilterKeywordLength2->text().trimmed()); + } + { + if(!m_pleFilterRankALL2->text().trimmed().isEmpty()) + mapParam.insert("RankFilterAll2", m_pleFilterRankALL2->text().trimmed()); + } + { + if(!m_pleFilterRankSeparated2->text().trimmed().isEmpty()) + mapParam.insert("RankFilterSeparated2", m_pleFilterRankSeparated2->text().trimmed()); + } + + + return mapParam; +} diff --git a/MorphereAnalyzer/ymtwodepthwidget.h b/MorphereAnalyzer/ymtwodepthwidget.h new file mode 100644 index 0000000..8519412 --- /dev/null +++ b/MorphereAnalyzer/ymtwodepthwidget.h @@ -0,0 +1,154 @@ +#ifndef YMTWODEPTHWIDGET +#define YMTWODEPTHWIDGET + +#include "ymorpherewidget.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "stable.h" +class YMTwoDepthWidget:public YMorphereWidget +{ + Q_OBJECT + +public: + YMTwoDepthWidget(QWidget *parent = 0); + ~YMTwoDepthWidget(); + void clearViewResult(); + void clearView(); + void ViewResult(); + QMap convertToParam(); + + //Morphere List + int getThread(); + unsigned int getDateStart(); + unsigned int getDateEnd(); + int getPeriod(); + QStringList getMorphereList(); + bool getDateAll(); + QString getUserDictList(); + QString getCenterKeyword(); + void SaveFile(); + void SaveFileSimple(); + QMap getResult(); + void TestUpload(); + +private: + // Data + QListWidget *m_plwData; + // Date + QCalendarWidget *m_pcw; + QDateEdit *m_pdeStart; + QDateEdit *m_pdeEnd; + //QPushButton *m_ppbInsertCalc; + //QComboBox *m_pcbDateCatalog; + // + QTabWidget *m_ptwData; + // + QProgressBar *m_pProgress; + // Column + QVector m_vecColumn; + // MorphereList + QListWidget *m_plwMorphereList; + QListWidget *m_plwMorphereAdd; + + QComboBox *m_pcbDate; + QComboBox *m_pcbPeriod; + + QLineEdit *m_pleFilterRankALL; + QLineEdit *m_pleFilterRankSeparated; + QLineEdit *m_pleFilterKeyword; + QLineEdit *m_pleFilterKeywordLength; + QLineEdit *m_pleFilterExtractor; + + + QLineEdit *m_pleFilterRankALL2; + QLineEdit *m_pleFilterRankSeparated2; + QLineEdit *m_pleFilterKeyword2; + QLineEdit *m_pleFilterKeywordLength2; + QLineEdit *m_pleFilterExtractor2; + + + QComboBox *m_pcbThread; + QComboBox *m_pcbSort; + + QListWidgetItem **m_plwiMorphere; + QStringList m_strlistMorphere; + QStringList m_strlistMorphereko; + + QRadioButton *m_rbDateMorphere; + QRadioButton *m_rbMorphereDate; + QButtonGroup *m_bgRadioGroup; + + QComboBox *m_pcbDictionary; + QList m_lTable; + QList m_lTabWidget; + QTabWidget* m_ptwTable; + + + QMap > > m_mapViewResult; + QMap > > m_mapViewResult2; + + QString m_strCKeyword; + QLineEdit *m_pleCKeyword; + + +public: + struct m_mapKey + { + QString strDate; + QString strMorphere; + QString strKeyword; + }; + + + +private: + QGroupBox *setMorphereList(); + QGroupBox *setDate(); + QGroupBox *setFilter(); + QGroupBox *setFilter2(); + + QGroupBox *setOther(); + QGroupBox *setSort(); + QGroupBox *setDictionary(); + QGroupBox *setCenterKeyword(); + + void SortViewResult(); + + QTableWidget *AddTable(QString _str); + + +public slots: + void CloseTab(int index); + void DoubleClickTab(int index); + void FileImport(); + void FileExport(); + void RawFileExport(); + void MemClear(); + void MorphereListAdd(); + void MorphereListDel(); + void AddDictionary(); + void DelDictionary(); + bool setListMorphere(QStringList& MorphereEN, QStringList& MorphereKO); + QTabWidget* getQTabWidget(); + bool isSortMorphereDateChecked(); + bool isSortDateMorphereChecked(); + + +}; + +#endif // YMTWODEPTHWIDGET +