Files
clients/MorphereAnalyzer/ymnxnmatrixwidget.cpp
admin 85c47edea3 effectui 추가
형태소분석기 숫자 정렬 추가
batch run 시 결과값이 올바르게 나오지 않는 현상 디버깅

git-svn-id: svn://192.168.0.12/source@297 8346c931-da38-4b9b-9d4c-e48b93cbd075
2016-10-06 07:54:45 +00:00

1079 lines
32 KiB
C++

#include "ymnxnmatrixwidget.h"
#include "../Json/sjson.h"
#include "../common.h"
#include <QGroupBox>
#include <QButtonGroup>
#include <QLabel>
#include <QSqlQuery>
#include <QDebug>
#include <QFile>
#include <QFileDialog>
#include <QTextCodec>
#include <QMessageBox>
#include <QSqlError>
#include <QMenuBar>
#include <QInputDialog>
#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; }
YMNxNMatrixWidget::YMNxNMatrixWidget(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";
}
m_strName = "nxnmatrix";
QVBoxLayout *vMainLayout = new QVBoxLayout;
vMainLayout->setAlignment(Qt::AlignVCenter);
QVBoxLayout *vboxlayout = new QVBoxLayout;
QGroupBox *gData = setData();
QGroupBox *gBox = setMorphereList();
QGroupBox *gDate = setDate();
QGroupBox *gFilter = setFilter();
QGroupBox *gOther = setOther();
QGroupBox *gSort = setSort();
QHBoxLayout *hboxlayout = new QHBoxLayout;
QGroupBox *gDictionary = setDictionary();
QGroupBox *gMatrixKeyword = setMatrixKeyword();
//hboxlayout->addWidget(gBox,5);
vboxlayout->addWidget(gData,3);
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->addWidget(gMatrixKeyword, 1);
vMainLayout->addLayout(hboxlayout, 2);
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 *YMNxNMatrixWidget::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;i<m_strlistMorphere.size();i++)
{
QListWidgetItem* pitem = new QListWidgetItem(m_strlistMorphereko.at(i), m_plwMorphereList);
pitem->setData(Qt::UserRole, QVariant(m_strlistMorphere.at(i)));
}
for(int i=0;i<m_strlistMorphere.size();i++)
{
QListWidgetItem* pitem = new QListWidgetItem(m_strlistMorphereko.at(i), m_plwMorphereAdd);
pitem->setData(Qt::UserRole, QVariant(m_strlistMorphere.at(i)));
}
for(int i=0;i<m_plwMorphereAdd->count();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 *YMNxNMatrixWidget::setDate()
{
QHBoxLayout *hlayout = new QHBoxLayout;
QHBoxLayout *hlayout1 = new QHBoxLayout;
QHBoxLayout *hlayout2 = 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");
m_pleDates = new QLineEdit;
m_pleDates->setValidator(new QIntValidator(1, 100));
m_pcbDuring = new QComboBox;
m_pcbDuring->addItems(QStringList() << "None" << "Days" << "Weeks" << "Months" << "Years");
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);
hlayout2->addWidget(new QLabel("Recent:"));
hlayout2->addWidget(m_pleDates);
hlayout2->addWidget(m_pcbDuring);
vlayout->addLayout(hlayout2);
vlayout->addLayout(hlayout);
vlayout->addLayout(hlayout1);
groupBox->setCheckable(true);
groupBox->setLayout(vlayout);
return groupBox;
}
QGroupBox *YMNxNMatrixWidget::setFilter()
{
QHBoxLayout *hlayout = new QHBoxLayout;
m_pleKeyword = new QLineEdit;
m_pleTop = new QLineEdit;
hlayout->addWidget(new QLabel("Top: <"));
hlayout->addWidget(m_pleTop);
hlayout->addWidget(new QLabel("Keyword:"));
hlayout->addWidget(m_pleKeyword);
QGroupBox *groupBox = new QGroupBox(tr("Filter"));
groupBox->setCheckable(true);
groupBox->setLayout(hlayout);
groupBox->setChecked(false);
return groupBox;
}
QGroupBox *YMNxNMatrixWidget::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 *YMNxNMatrixWidget::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);
m_rbDateMorphere->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 *YMNxNMatrixWidget::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 *YMNxNMatrixWidget::setMatrixKeyword()
{
QHBoxLayout *hlayout = new QHBoxLayout;
m_pleMKeyword = new QLineEdit;
m_pcbCountMethod = new QComboBox;
m_pcbCountMethod->addItems(QStringList() << "Duplicate" << "NonDuplicate");
hlayout->addWidget(new QLabel("Matrix Keywords: "));
hlayout->addWidget(m_pleMKeyword);
hlayout->addWidget(new QLabel("CountMethod: "));
hlayout->addWidget(m_pcbCountMethod);
QGroupBox *groupBox = new QGroupBox(tr("Matrix Keywords"));
groupBox->setCheckable(true);
groupBox->setLayout(hlayout);
groupBox->setChecked(true);
return groupBox;
}
void YMNxNMatrixWidget::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 YMNxNMatrixWidget::getUserDictList()
{
QStringList strList;
for(int i = 0; i < m_pcbDictionary->count();i++)
{
strList << m_pcbDictionary->itemText(i);
}
return strList.join(",");
}
void YMNxNMatrixWidget::DelDictionary()
{
m_pcbDictionary->removeItem(0);
qDebug() << getUserDictList();
}
bool YMNxNMatrixWidget::isSortMorphereDateChecked()
{
return m_rbMorphereDate->isChecked();
}
bool YMNxNMatrixWidget::isSortDateMorphereChecked()
{
return m_rbDateMorphere->isChecked();
}
void YMNxNMatrixWidget::MorphereListAdd()
{
QList<QListWidgetItem *> 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 YMNxNMatrixWidget::MorphereListDel()
{
for(int i = m_plwMorphereAdd->count() - 1; i >= 0 ;i--)
{
if(m_plwMorphereAdd->item(i)->isSelected())
{
m_plwMorphereAdd->item(i)->setHidden(true);
}
}
}
QTableWidget *YMNxNMatrixWidget::AddTable(QString _str)
{
STable *pTable = new STable;
m_ptwData->addTab(pTable,_str);
return (QTableWidget *)pTable;
}
void YMNxNMatrixWidget::CloseTab(int index)
{
((STable*)(m_ptwData->widget(index)))->clear();
m_ptwData->removeTab(index);
}
void YMNxNMatrixWidget::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 YMNxNMatrixWidget::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<QString, int>::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<int, QString> qLast;
qLast.insert(count, strKeyword);
m_mapViewResult[(strDate)].insert(strMorphere, qLast);
}
}
else
{
QMap<int, QString> qLast;
qLast.insert(count , strKeyword);
QMap<QString, QMap<int, QString> > qMedium;
qMedium.insert(strMorphere, qLast);
m_mapViewResult.insert(strDate, qMedium);
}
}
ViewResult();
*/
}
void YMNxNMatrixWidget::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 YMNxNMatrixWidget::getThread()
{
return m_pcbThread->currentText().toInt();
}
unsigned int YMNxNMatrixWidget::getDateStart()
{
return m_pdeStart->dateTime().toString("yyyy-MM-dd").replace("-","").trimmed().toInt();
}
unsigned int YMNxNMatrixWidget::getDateEnd()
{
return m_pdeEnd->dateTime().toString("yyyy-MM-dd").replace("-","").trimmed().toInt();
}
int YMNxNMatrixWidget::getPeriod()
{
return m_pcbPeriod->currentIndex();
}
QStringList YMNxNMatrixWidget::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 YMNxNMatrixWidget::getDateAll()
{
if(m_pcbDate->currentIndex() == 0)
return true;
else
return false;
}
QTabWidget* YMNxNMatrixWidget::getQTabWidget()
{
return m_ptwData;
}
void YMNxNMatrixWidget::MemClear()
{
m_mapResult.clear();
m_mapViewResult.clear();
}
bool YMNxNMatrixWidget::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 YMNxNMatrixWidget::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<QString,QMap<QString,QMap<int, QString> > >::iterator iterPos = m_mapViewResult.begin(); iterPos != m_mapViewResult.end(); iterPos++)
{
for(QMap<QString, QMap<int, QString> >::iterator iterPos2 = iterPos.value().begin(); iterPos2 != iterPos.value().end(); iterPos2++)
{
QMapIterator<int, QString> 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();
*/
}
YMNxNMatrixWidget::~YMNxNMatrixWidget()
{
}
void YMNxNMatrixWidget::clearViewResult()
{
}
void YMNxNMatrixWidget::clearView()
{
m_mapViewResult.clear();
}
void YMNxNMatrixWidget::setParam(QString strJson)
{
SJson json;
{
int nThread = json.Get(strJson, "Thread").toInt();
for(int i = 0; i < m_pcbThread->count(); i++)
{
//qDebug() << m_pcbThread->itemData(i).toInt();
if(m_pcbThread->itemText(i).trimmed().toInt() == nThread)
{
m_pcbThread->setCurrentIndex(i);
break;
}
}
}
{
QString strCountMethod = json.Get(strJson, "CountMethod").trimmed();
for(int i = 0; i < m_pcbCountMethod->count(); i++)
{
//qDebug() << m_pcbThread->itemData(i).toInt();
if(m_pcbCountMethod->itemText(i).trimmed().compare(strCountMethod) == 0)
{
m_pcbCountMethod->setCurrentIndex(i);
break;
}
}
}
{
QString strRecentPeriod = json.Get(strJson, "RecentPeriod").trimmed();
for(int i = 0; i < m_pcbDuring->count(); i++)
{
//qDebug() << m_pcbThread->itemData(i).toInt();
if(m_pcbDuring->itemText(i).trimmed().compare(strRecentPeriod) == 0)
{
m_pcbDuring->setCurrentIndex(i);
break;
}
}
}
{
int nPeriod = json.Get(strJson, "Period").toInt();
m_pcbPeriod->setCurrentIndex(nPeriod);
}
{
int nBodyTitle = json.Get(strJson, "TitleBody").toInt();
m_pcbData->setCurrentIndex(nBodyTitle);
}
{
QString strDateAll = json.Get(strJson, "DateALL").trimmed();
if(strDateAll.compare("true",Qt::CaseInsensitive) == 0)
{
m_pcbDate->setCurrentIndex(0);
}
else
{
m_pcbDate->setCurrentIndex(1);
}
}
{
QString strRecentDate = json.Get(strJson, "RecentDate");
m_pleDates->setText(strRecentDate);
}
{
m_pdeStart->setDate(QDate::fromString(json.Get(strJson,"DateStart"),"yyyyMMdd"));
m_pdeEnd->setDate(QDate::fromString(json.Get(strJson,"DateEnd"),"yyyyMMdd"));
}
{
QString mKeyword = json.Get(strJson, "MatrixKeyword");
m_pleMKeyword->setText(mKeyword);
}
}
void YMNxNMatrixWidget::SortViewResult()
{
/*
if(isSortDateMorphereChecked())
{
for(QMap<QString, int>::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<int, QString> qLast;
qLast.insert(count, strKeyword);
m_mapViewResult[(strDate)].insert(strMorphere, qLast);
}
}
else
{
QMap<int, QString> qLast;
qLast.insert(count , strKeyword);
QMap<QString, QMap<int, QString> > qMedium;
qMedium.insert(strMorphere, qLast);
m_mapViewResult.insert(strDate, qMedium);
}
}
}
else
{
for(QMap<QString, int>::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(strMorphere))
{
if(m_mapViewResult.value(strMorphere).contains(strDate))
{
m_mapViewResult[(strMorphere)][(strDate)].insertMulti(count, strKeyword);
}
else
{
QMap<int, QString> qLast;
qLast.insert(count, strKeyword);
m_mapViewResult[(strMorphere)].insert(strDate, qLast);
}
}
else
{
QMap<int, QString> qLast;
qLast.insert(count , strKeyword);
QMap<QString, QMap<int, QString> > qMedium;
qMedium.insert(strDate, qLast);
m_mapViewResult.insert(strMorphere, qMedium);
}
}
}
*/
for(QMap<QString, int>::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(strKeyword, count);
}
else
{
QMap<QString, int> qLast;
qLast.insert(strKeyword, count);
m_mapViewResult[(strDate)].insert(strMorphere, qLast);
}
}
else
{
QMap<QString, int> qLast;
qLast.insert(strKeyword, count);
QMap<QString, QMap<QString, int> > qMedium;
qMedium.insert(strMorphere, qLast);
m_mapViewResult.insert(strDate, qMedium);
}
}
}
void YMNxNMatrixWidget::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<QString,QMap<QString,QMap<QString, int> > >::iterator iterPos = m_mapViewResult.begin(); iterPos != m_mapViewResult.end(); iterPos++)
{
//QTabWidget* temp = new QTabWidget;
STable *pNew = new STable;
pNew->setColumnCount(m_mapViewResult[iterPos.key()].size() + 1);
pNew->setRowCount(m_mapViewResult[iterPos.key()].size() + 1);
int ncRow = 0;
for(int i = 0; i <= m_mapViewResult[iterPos.key()].size(); i++)
pNew->setHorizontalHeaderItem(i ,new STableWidgetItem(QString::number(i)));
pNew->setItem(ncRow, 0, new STableWidgetItem(QString("")));
for(QMap<QString, QMap<QString, int> >::iterator iterPos2 = iterPos.value().begin(); iterPos2 != iterPos.value().end(); iterPos2++)
{
QMapIterator<QString, int> i(m_mapViewResult[iterPos.key()][iterPos2.key()]);
int j = 1;
while(i.hasNext())
{
i.next();
pNew->setItem(ncRow, j++, new STableWidgetItem(QString(i.key())));
}
}
ncRow++;
for(QMap<QString, QMap<QString, int> >::iterator iterPos2 = iterPos.value().begin(); iterPos2 != iterPos.value().end(); iterPos2++)
{
pNew->setItem(ncRow, 0, new STableWidgetItem(QString(iterPos2.key())));
int j = 1;
//i.toBack();
//while(i.hasPrevious())
QMapIterator<QString, int> i(m_mapViewResult[iterPos.key()][iterPos2.key()]);
while(i.hasNext())
{
i.next();
pNew->setItem(ncRow,j++,new STableWidgetItem(QString::number(i.value())));
}
ncRow++;
//temp->addTab(pNew, iterPos2.key());
}
m_ptwTable->addTab(pNew, iterPos.key());
m_lTable << pNew;
}
/*
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<QString,QMap<QString,QMap<QString,int> > >::iterator iterPos = m_mapViewResult.begin(); iterPos != m_mapViewResult.end(); iterPos++)
{
QTabWidget* temp = new QTabWidget;
for(QMap<QString, QMap<QString, int> >::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<QString, int> i(m_mapViewResult[iterPos.key()][iterPos2.key()]);
while(i.hasNext())
{
i.next();
pNew->setItem(ncRow,0,new QTableWidgetItem(QString(i.key())));
pNew->setItem(ncRow,1,new QTableWidgetItem(QString::number(i.value())));
ncRow++;
}
temp->addTab(pNew, iterPos2.key());
m_lTable << pNew;
}
m_ptwTable->addTab(temp, iterPos.key());
m_lTabWidget << temp;
}
*/
}
void YMNxNMatrixWidget::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*)(m_ptwTable->currentWidget());
for (int i = 0; i < pTable->rowCount(); i++)
{
QString strLine;
for(int j = 0; j < pTable->columnCount(); j++)
{
strLine += (pTable->item(i, j)->text().trimmed() + ";");
}
strLine = strLine.left(strLine.length() - 1);
out << strLine << endl;
}
file.close();
}
QGroupBox *YMNxNMatrixWidget::setData()
{
QHBoxLayout *hlayout = new QHBoxLayout;
m_pcbData = new QComboBox;
m_pcbData->addItems(QStringList() << "Title" << "Body" << "Title+Body" << "PlatformTitle");
m_pcbData->setCurrentIndex(2);
hlayout->addWidget(new QLabel("Data: "));
hlayout->addWidget(m_pcbData);
QGroupBox *groupBox = new QGroupBox(tr("Data"));
groupBox->setCheckable(true);
groupBox->setLayout(hlayout);
groupBox->setChecked(true);
return groupBox;
}
QString YMNxNMatrixWidget::getMatrixKeyword()
{
return m_pleMKeyword->text().trimmed();
}
QMap<QString, QString> YMNxNMatrixWidget::convertToParam()
{
QMap<QString, QString> mapParam;
mapParam.insert("Algorithm", "nxnmatrix");
/*
{
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("MatrixKeyword", getMatrixKeyword());
}
{
mapParam.insert("CountMethod", m_pcbCountMethod->currentText().trimmed());
}
{
mapParam.insert("RecentDate", m_pleDates->text().trimmed());
mapParam.insert("RecentPeriod", m_pcbDuring->currentText().trimmed());
}
{
mapParam.insert("TitleBody", QString::number(m_pcbData->currentIndex()));
}
{
mapParam.insert("Article",QString::number(((STable *)m_pTabWidget->currentWidget())->getArticleSelect()));
}
return mapParam;
}