1 | var async = require('async');
|
2 | var fs = require('fs');
|
3 | var path = require('path');
|
4 |
|
5 |
|
6 | var AFINN_PATH = path.resolve(__dirname, 'AFINN-en-165.txt');
|
7 | var EMOJI_PATH = path.resolve(__dirname, 'Emoji_Sentiment_Data_v1.0.csv');
|
8 | var RESULT_PATH = path.resolve(__dirname, 'build.json');
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | function processEmoji(hash, callback) {
|
17 |
|
18 | fs.readFile(EMOJI_PATH, 'utf8', function (err, data) {
|
19 | if (err) return callback(err);
|
20 |
|
21 |
|
22 | data = data.split(/\n/);
|
23 |
|
24 |
|
25 | for (var i in data) {
|
26 | var line = data[i].split(',');
|
27 |
|
28 |
|
29 | if (i == 0) continue;
|
30 | if (line.length !== 9) continue;
|
31 |
|
32 |
|
33 | var emoji = String.fromCodePoint(line[1]);
|
34 | var occurences = line[2];
|
35 | var negCount = line[4];
|
36 | var posCount = line[6];
|
37 | var score = (posCount / occurences) - (negCount / occurences);
|
38 | var sentiment = Math.floor(5 * score);
|
39 |
|
40 |
|
41 | if (Number.isNaN(sentiment)) continue;
|
42 | if (sentiment === 0) continue;
|
43 |
|
44 |
|
45 | hash[emoji] = sentiment;
|
46 | }
|
47 |
|
48 | callback(null, hash);
|
49 | });
|
50 | }
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 | function processAFINN(hash, callback) {
|
59 |
|
60 | fs.readFile(AFINN_PATH, 'utf8', function (err, data) {
|
61 | if (err) return callback(err);
|
62 |
|
63 |
|
64 | data = data.split(/\n/);
|
65 |
|
66 |
|
67 | for (var i in data) {
|
68 | var line = data[i].split(/\t/);
|
69 |
|
70 |
|
71 | if (line[0] === '') continue;
|
72 |
|
73 |
|
74 | hash[line[0]] = Number(line[1]);
|
75 | }
|
76 |
|
77 | callback(null, hash);
|
78 | });
|
79 | }
|
80 |
|
81 |
|
82 |
|
83 |
|
84 |
|
85 |
|
86 |
|
87 | function finish(hash, callback) {
|
88 | var result = JSON.stringify(hash, null, 4);
|
89 | fs.writeFile(RESULT_PATH, result, function (err) {
|
90 | if (err) return callback(err);
|
91 | callback(null, hash);
|
92 | });
|
93 | }
|
94 |
|
95 |
|
96 | async.waterfall([
|
97 | function (cb) {
|
98 | cb(null, {});
|
99 | },
|
100 | processEmoji,
|
101 | processAFINN,
|
102 | finish
|
103 | ], function(err, result) {
|
104 | if (err) throw new Error(err);
|
105 | process.stderr.write(
|
106 | 'Complete: ' +
|
107 | Object.keys(result).length +
|
108 | ' entries.\n'
|
109 | );
|
110 | });
|