조성현

person you might know --> test version

...@@ -108,7 +108,7 @@ void GraphItem::read_more() ...@@ -108,7 +108,7 @@ void GraphItem::read_more()
108 boost::put(vertex_name, *graph, *vi, node_label); 108 boost::put(vertex_name, *graph, *vi, node_label);
109 boost::put(vertex_record, *graph, *vi, 0); 109 boost::put(vertex_record, *graph, *vi, 0);
110 110
111 - qDebug() << "** index: " << i << ", name: " << node_label.c_str(); 111 + //qDebug() << "** index: " << i << ", name: " << node_label.c_str();
112 112
113 //node type 설정 113 //node type 설정
114 if (boost::regex_match(node_label, paper_reg)) { 114 if (boost::regex_match(node_label, paper_reg)) {
...@@ -268,13 +268,64 @@ void GraphItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, ...@@ -268,13 +268,64 @@ void GraphItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
268 } 268 }
269 } 269 }
270 270
271 -void GraphItem::path_highlighting(std::string start, std::string end) 271 +void GraphItem::might_know()
272 { 272 {
273 - //path highlight 273 + // 알 수도 있는 연구원 찾기
274 - //nodeList, edgeList 속성을 수정 274 + vertex_iterator vi, vi_end, vtarget;
275 + Graph::adjacency_iterator ai, ai_end;
276 + vector<string> might_know_vec;
277 +
278 + auto label = get(vertex_name, *graph);
279 + auto nodeType = get(vertex_type, *graph);
280 +
281 + // 회색 색칠
282 + for (auto& n : nodeList) {
283 + if (n->getLabel().toStdString() != TARGET_AUTHOR_NAME) {
284 + n->setColor(QColor(Qt::lightGray));
285 + } else {
286 + n->setColor(QColor(Qt::blue));
287 + }
288 + }
289 +
290 + // find target node
291 + for (boost::tie(vi, vi_end) = boost::vertices(*graph); vi!=vi_end; ++vi) {
292 + if (label[*vi] == std::string(TARGET_AUTHOR_NAME)) {
293 + vtarget = vi;
294 + break;
295 + }
296 + }
297 +
298 + // bfs
299 + //std::queue<vertex_iterator> q;
300 + //q.push(vtarget);
301 + //while (!q.empty()) {
302 + // /*auto next_vi = q.front();
303 + // q.pop();
304 +
305 + // if (nodeType[*next_vi] == NODE_TYPE::NODE_PAPER)
306 + // continue;
307 +
308 + // for (boost::tie(ai, ai_end) = boost::adjacent_vertices(*next_vi, *graph);
309 + // ai != ai_end; ++ai) {
310 + // if (nodeType[*ai] == NODE_TYPE::NODE_PAPER)
311 + // continue;
312 + // else
313 + // q.push(ai);
314 + // }*/
315 + //}
316 +
317 + for (boost::tie(ai, ai_end) = boost::adjacent_vertices(*vtarget, *graph);
318 + ai != ai_end;
319 + ++ai) {
320 + might_know_vec.push_back(label[*ai]);
321 + }
322 +
323 + // highlight
275 for (auto& n: nodeList) { 324 for (auto& n: nodeList) {
276 - if (n->getLabel() == QString("Seongsoo Park")) { 325 + if (std::find(might_know_vec.begin(), might_know_vec.end(), n->getLabel().toStdString())
277 - n->setColor(QColor(255, 0, 0)); 326 + != might_know_vec.end()) {
327 + //found
328 + n->setColor(Qt::red);
278 } 329 }
279 } 330 }
280 } 331 }
...@@ -318,20 +369,24 @@ void GraphItem::topK_highlight() ...@@ -318,20 +369,24 @@ void GraphItem::topK_highlight()
318 int record_cnt = 0; 369 int record_cnt = 0;
319 for (boost::tie(ai, ai_end) = boost::adjacent_vertices(*vi, *graph); 370 for (boost::tie(ai, ai_end) = boost::adjacent_vertices(*vi, *graph);
320 ai != ai_end; ++ai) { 371 ai != ai_end; ++ai) {
321 - if (nodeType[*vi] == NODE_TYPE::NODE_PAPER) { 372 + if (nodeType[*ai] == NODE_TYPE::NODE_PAPER) {
322 ++record_cnt; 373 ++record_cnt;
323 } 374 }
324 } 375 }
325 376
326 boost::put(vertex_record, *graph, *vi, record_cnt); 377 boost::put(vertex_record, *graph, *vi, record_cnt);
327 heap.push(make_pair(record_cnt, nodeLabel[*vi])); 378 heap.push(make_pair(record_cnt, nodeLabel[*vi]));
379 +
380 + //qDebug() << record_cnt;
328 } 381 }
329 382
330 //get top K records 383 //get top K records
331 pair<int, string> topk_arr[TOP_K]; 384 pair<int, string> topk_arr[TOP_K];
332 for (int i = 0; i < TOP_K; ++i) { 385 for (int i = 0; i < TOP_K; ++i) {
333 topk_arr[i] = heap.pop(); 386 topk_arr[i] = heap.pop();
387 + qDebug() << "topk["<<i<<"] = " << topk_arr[i].first << ", " << QString::fromStdString(topk_arr[i].second);
334 } 388 }
389 +
335 390
336 for (auto& n: nodeList) { 391 for (auto& n: nodeList) {
337 auto label = n->getLabel(); 392 auto label = n->getLabel();
...@@ -343,8 +398,6 @@ void GraphItem::topK_highlight() ...@@ -343,8 +398,6 @@ void GraphItem::topK_highlight()
343 } 398 }
344 } 399 }
345 } 400 }
346 -
347 - //delete[] topk_arr;
348 } 401 }
349 402
350 //event handler 403 //event handler
......
...@@ -26,7 +26,7 @@ public: ...@@ -26,7 +26,7 @@ public:
26 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; 26 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
27 27
28 //methods 28 //methods
29 - void path_highlighting(std::string start, std::string end); 29 + void might_know();
30 void reset_color(); 30 void reset_color();
31 void topK_highlight(); 31 void topK_highlight();
32 32
......
...@@ -17,7 +17,7 @@ MainWindow::MainWindow(QWidget *parent) ...@@ -17,7 +17,7 @@ MainWindow::MainWindow(QWidget *parent)
17 statusBar()->showMessage(message); 17 statusBar()->showMessage(message);
18 18
19 setMinimumSize(160, 160); 19 setMinimumSize(160, 160);
20 - resize(800, 600); 20 + resize(1200, 650);
21 } 21 }
22 22
23 MainWindow::~MainWindow() 23 MainWindow::~MainWindow()
...@@ -44,9 +44,9 @@ void MainWindow::createActions() ...@@ -44,9 +44,9 @@ void MainWindow::createActions()
44 readMoreAct->setStatusTip(tr("read more lines from file")); 44 readMoreAct->setStatusTip(tr("read more lines from file"));
45 connect(readMoreAct, &QAction::triggered, this, &MainWindow::read_more); 45 connect(readMoreAct, &QAction::triggered, this, &MainWindow::read_more);
46 46
47 - testHighlightAct = new QAction(tr("Highlight"), this); 47 + mightKnowAct = new QAction(tr("Might know"), this);
48 - testHighlightAct->setStatusTip(tr("Highlighting node")); 48 + mightKnowAct->setStatusTip(tr("highlight a research you might know"));
49 - connect(testHighlightAct, &QAction::triggered, this, &MainWindow::test_highlighting); 49 + connect(mightKnowAct, &QAction::triggered, this, &MainWindow::might_know);
50 topkAct = new QAction(tr("topK"), this); 50 topkAct = new QAction(tr("topK"), this);
51 topkAct->setStatusTip(tr("highlight who was top k papers")); 51 topkAct->setStatusTip(tr("highlight who was top k papers"));
52 connect(topkAct, &QAction::triggered, this, &MainWindow::topk); 52 connect(topkAct, &QAction::triggered, this, &MainWindow::topk);
...@@ -61,7 +61,7 @@ void MainWindow::createMenus() ...@@ -61,7 +61,7 @@ void MainWindow::createMenus()
61 fileMenu->addAction(readMoreAct); 61 fileMenu->addAction(readMoreAct);
62 62
63 actionMenu = menuBar()->addMenu(tr("&Actions")); 63 actionMenu = menuBar()->addMenu(tr("&Actions"));
64 - actionMenu->addAction(testHighlightAct); 64 + actionMenu->addAction(mightKnowAct);
65 actionMenu->addAction(topkAct); 65 actionMenu->addAction(topkAct);
66 actionMenu->addAction(resetColorAct); 66 actionMenu->addAction(resetColorAct);
67 } 67 }
...@@ -75,12 +75,9 @@ void MainWindow::read_more() ...@@ -75,12 +75,9 @@ void MainWindow::read_more()
75 graphWidget->read_more(); 75 graphWidget->read_more();
76 } 76 }
77 77
78 -void MainWindow::test_highlighting() 78 +void MainWindow::might_know()
79 { 79 {
80 - /*QMessageBox::information(this, "test", 80 + graphWidget->might_know();
81 - "test: "+QString::number(11));*/
82 - graphWidget->path_highlight();
83 - //graphWidget->update();
84 } 81 }
85 82
86 void MainWindow::topk() 83 void MainWindow::topk()
......
...@@ -22,7 +22,7 @@ private: ...@@ -22,7 +22,7 @@ private:
22 QMenu *fileMenu; 22 QMenu *fileMenu;
23 QAction *readMoreAct; 23 QAction *readMoreAct;
24 QMenu *actionMenu; 24 QMenu *actionMenu;
25 - QAction *testHighlightAct; 25 + QAction *mightKnowAct;
26 QAction *topkAct; 26 QAction *topkAct;
27 QAction *resetColorAct; 27 QAction *resetColorAct;
28 28
...@@ -32,7 +32,7 @@ private: ...@@ -32,7 +32,7 @@ private:
32 32
33 private slots: 33 private slots:
34 void read_more(); 34 void read_more();
35 - void test_highlighting(); 35 + void might_know();
36 void topk(); 36 void topk();
37 void reset_color(); 37 void reset_color();
38 }; 38 };
......
...@@ -54,9 +54,9 @@ void PaperGraphWidget::read_more() ...@@ -54,9 +54,9 @@ void PaperGraphWidget::read_more()
54 scene->update(); 54 scene->update();
55 } 55 }
56 56
57 -void PaperGraphWidget::path_highlight() 57 +void PaperGraphWidget::might_know()
58 { 58 {
59 - graphItem->path_highlighting(std::string(""), std::string("")); 59 + graphItem->might_know();
60 scene->update(); 60 scene->update();
61 } 61 }
62 62
......
...@@ -16,7 +16,7 @@ public: ...@@ -16,7 +16,7 @@ public:
16 16
17 //main window slots 17 //main window slots
18 void read_more(); 18 void read_more();
19 - void path_highlight(); 19 + void might_know();
20 void topk(); 20 void topk();
21 void reset_color(); 21 void reset_color();
22 22
......
...@@ -105,12 +105,14 @@ namespace { ...@@ -105,12 +105,14 @@ namespace {
105 /* visualization */ 105 /* visualization */
106 const int NODE_SIZE = 4; 106 const int NODE_SIZE = 4;
107 const int LAYOUT_MODE = GRAPH_LAYOUT::RANDOM_LAYOUT; 107 const int LAYOUT_MODE = GRAPH_LAYOUT::RANDOM_LAYOUT;
108 - const int SCREEN_SIZE = 1000; 108 + const int SCREEN_SIZE = 500;
109 - const int READ_LINE_UNIT = 5; //한 번에 몇 라인을 읽을지 109 + const int READ_LINE_UNIT = 20; //한 번에 몇 라인을 읽을지
110 110
111 /* topK */ 111 /* topK */
112 - const int TOP_K = 10; //상위 몇 개 아이템에 대해 highlight 할 지 112 + const int TOP_K = 5; //상위 몇 개 아이템에 대해 highlight 할 지
113 113
114 + /* a research you might know */
115 + const char* TARGET_AUTHOR_NAME = "Shuichi Itoh";
114 } 116 }
115 117
116 /* boost */ 118 /* boost */
......