Working : add textrank
added modules : multiset-jaccard, textrank-node, async, mecab-ya
Showing
3 changed files
with
80 additions
and
2 deletions
... | @@ -56,5 +56,8 @@ app.use(function(err, req, res, next) { | ... | @@ -56,5 +56,8 @@ app.use(function(err, req, res, next) { |
56 | }); | 56 | }); |
57 | }); | 57 | }); |
58 | 58 | ||
59 | +app.listen(process.env.PORT||3000, function(){ | ||
60 | + console.log ("Server is running at 3000"); | ||
61 | +}); | ||
59 | 62 | ||
60 | module.exports = app; | 63 | module.exports = app; | ... | ... |
... | @@ -6,13 +6,17 @@ | ... | @@ -6,13 +6,17 @@ |
6 | "start": "node ./bin/www" | 6 | "start": "node ./bin/www" |
7 | }, | 7 | }, |
8 | "dependencies": { | 8 | "dependencies": { |
9 | + "async": "^2.1.2", | ||
9 | "body-parser": "~1.15.1", | 10 | "body-parser": "~1.15.1", |
10 | "cookie-parser": "~1.4.3", | 11 | "cookie-parser": "~1.4.3", |
11 | "debug": "~2.2.0", | 12 | "debug": "~2.2.0", |
12 | "express": "~4.13.4", | 13 | "express": "~4.13.4", |
13 | "jade": "~1.11.0", | 14 | "jade": "~1.11.0", |
15 | + "mecab-ya": "^0.1.1", | ||
14 | "morgan": "~1.7.0", | 16 | "morgan": "~1.7.0", |
17 | + "multiset-jaccard": "^0.1.1", | ||
15 | "node-readability": "^2.2.0", | 18 | "node-readability": "^2.2.0", |
16 | - "serve-favicon": "~2.3.0" | 19 | + "serve-favicon": "~2.3.0", |
20 | + "textrank-node": "^0.1.9" | ||
17 | } | 21 | } |
18 | } | 22 | } | ... | ... |
1 | var express = require('express'); | 1 | var express = require('express'); |
2 | var router = express.Router(); | 2 | var router = express.Router(); |
3 | +var read = require('node-readability'); | ||
4 | +var jaccard = require('multiset-jaccard'); | ||
5 | +var mecab = require('mecab-ya'); | ||
6 | +var textrank = require('textrank-node'); | ||
7 | +var ranker = new textrank(); | ||
8 | +var async = require('async'); | ||
3 | 9 | ||
4 | /* GET home page. */ | 10 | /* GET home page. */ |
5 | router.get('/', function(req, res, next) { | 11 | router.get('/', function(req, res, next) { |
6 | - res.render('index', { title: 'Express' }); | 12 | + |
13 | + var text = "박근혜 대통령과 새누리당 친박 지도부가 도널드 트럼프의 미국 대통령 당선을 계기로 정국 반전을 꾀하고 있다. 이른바 ‘트럼프 리스크’를 부각하며 내부가 분열하면 난국을 헤쳐갈 수 없다고 바람잡이에 나선 것이다. 박 대통령은 어제 트럼프 당선자와의 통화에서 그의 방한을 요청하며 “만나기를 고대한다”고 말했다. 이정현 새누리당 대표는 박 대통령이 군통수권도 총리에게 넘겨야 한다는 문재인 전 민주당 대표의 발언을 반헌법적인 발상이라고 역공했다. 새누리당은 또 간담회 등을 개최하면서 ‘트럼프 비상체제’를 내세우고 있다. 박 대통령과 친박 지도부가 트럼프 문제를 내세워 위기를 덮으려는 것이다."; | ||
14 | + | ||
15 | + var sentences = ranker.splitToSentences(text); | ||
16 | + var graph = new Array(); | ||
17 | + // 1st para in async.each() is the array of items | ||
18 | + async.each(sentences, | ||
19 | + // 2nd param is the function that each item is passed to | ||
20 | + function(sentence, callback){ | ||
21 | + // Call an asynchronous function, often a save() to DB | ||
22 | + var sentenceSimilarity = new Array(); | ||
23 | + | ||
24 | + async.each(sentences, function(sentence_2, callback_2) { | ||
25 | + mecab.nouns(sentence, function(err, result) { | ||
26 | + mecab.nouns(sentence_2, function(err, result_2) { | ||
27 | + console.log("result : " , result); | ||
28 | + console.log("result2: " , result_2); | ||
29 | + var index = jaccard.index(result, result_2); | ||
30 | + sentenceSimilarity.push(index); | ||
31 | + callback_2(); | ||
32 | + }); | ||
33 | + }); | ||
34 | + }, | ||
35 | + function(err) { | ||
36 | + graph.push(sentenceSimilarity); | ||
37 | + callback(); | ||
38 | + }); | ||
39 | + }, | ||
40 | + // 3rd param is the function to call when everything's done | ||
41 | + function(err){ | ||
42 | + // All tasks are done now | ||
43 | + var Rank = ranker.getTextRank(graph).probabilityNodes; | ||
44 | + var selectedIndex = ranker.getSelectedIndex(Rank, 3); | ||
45 | + var result = ''; | ||
46 | + for(var i = 0; i < 3; i++){ | ||
47 | + for(var j = 0; j < sentences.length; j++){ | ||
48 | + if(selectedIndex[i] === j){ | ||
49 | + result += sentences[j] + ' '; | ||
50 | + } | ||
51 | + } | ||
52 | + } | ||
53 | + | ||
54 | + return res.render('index', { title: result }); | ||
55 | + } | ||
56 | + ); | ||
57 | + | ||
58 | + | ||
59 | +}); | ||
60 | + | ||
61 | +// 다른 요약기에 비해 얼마나 성능 향상이 있었는지 확인하기 위함. | ||
62 | +router.get('/read', function(req, res, next) { | ||
63 | + read('http://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=104&sid2=232&oid=421&aid=0002379859', function(err, article, meta) { | ||
64 | + | ||
65 | + // Title | ||
66 | + console.log(article.title); | ||
67 | + // Main Article | ||
68 | + console.log(article.content); | ||
69 | + | ||
70 | + res.json({ | ||
71 | + title : article.title, | ||
72 | + content : article.content | ||
73 | + }, function(){ | ||
74 | + // Close article to clean up jsdom and prevent leaks | ||
75 | + article.close(); | ||
76 | + }); | ||
77 | +}); | ||
7 | }); | 78 | }); |
8 | 79 | ||
9 | module.exports = router; | 80 | module.exports = router; | ... | ... |
-
Please register or login to post a comment