UNPKG

2.9 kBJavaScriptView Raw
1var async = require('async');
2var fs = require('fs');
3var path = require('path');
4
5// File paths
6var AFINN_PATH = path.resolve(__dirname, 'AFINN-en-165.txt');
7var EMOJI_PATH = path.resolve(__dirname, 'Emoji_Sentiment_Data_v1.0.csv');
8var RESULT_PATH = path.resolve(__dirname, 'build.json');
9
10/**
11 * Read emoji data from original format (CSV).
12 * @param {object} hash Result hash
13 * @param {Function} callback Callback
14 * @return {void}
15 */
16function processEmoji(hash, callback) {
17 // Read file
18 fs.readFile(EMOJI_PATH, 'utf8', function (err, data) {
19 if (err) return callback(err);
20
21 // Split data by new line
22 data = data.split(/\n/);
23
24 // Iterate over dataset and add to hash
25 for (var i in data) {
26 var line = data[i].split(',');
27
28 // Validate line
29 if (i == 0) continue; // Label
30 if (line.length !== 9) continue; // Invalid
31
32 // Establish sentiment value
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 // Validate score
41 if (Number.isNaN(sentiment)) continue;
42 if (sentiment === 0) continue;
43
44 // Add to hash
45 hash[emoji] = sentiment;
46 }
47
48 callback(null, hash);
49 });
50}
51
52/**
53 * Read AFINN data from original format (TSV).
54 * @param {object} hash Result hash
55 * @param {Function} callback Callback
56 * @return {void}
57 */
58function processAFINN(hash, callback) {
59 // Read file
60 fs.readFile(AFINN_PATH, 'utf8', function (err, data) {
61 if (err) return callback(err);
62
63 // Split data by new line
64 data = data.split(/\n/);
65
66 // Iterate over dataset and add to hash
67 for (var i in data) {
68 var line = data[i].split(/\t/);
69
70 // Validate line
71 if (line[0] === '') continue;
72
73 // Add to hash
74 hash[line[0]] = Number(line[1]);
75 }
76
77 callback(null, hash);
78 });
79}
80
81/**
82 * Write sentiment score hash to disk.
83 * @param {object} hash Result hash
84 * @param {Function} callback Callback
85 * @return {void}
86 */
87function 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// Execute build process
96async.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});