-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
63 lines (47 loc) · 2.25 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
var natural = require('natural');
var wordnet = new natural.WordNet();
var when = require('when');
var _ = require('lodash');
var word = process.argv[2] || 'rodent';
wordnet.lookup(word, function(synsets) {
if (!synsets || !synsets.length) {
console.log('No synsets found.');
return;
}
//-- Take only the most relevant synsets --
var relevant = _(synsets)
// wrap into object and calculate levenshtein distance
.map(function(synset) { return { val: synset, distance: natural.LevenshteinDistance(word, synset.lemma) }; })
.sortBy('distance')
.filter(function(i) { return i.distance < 4; })
// unwrap
.pluck('val').value();
_.forEach(relevant, function(synset) {
// console.log('LOOKUP: %j', synset);
var callback = function(theSynset, relatedSynsets) {
_.forEach(relatedSynsets, function(relatedSynset) {
console.log('%s (%s; %s) ==[%s]==> %s (%s; %s)', theSynset.lemma, theSynset.synsetOffset, theSynset.pos, relatedSynset.pointerSymbol, relatedSynset.lemma, relatedSynset.synsetOffset, relatedSynset.pos);
findRelatedSynsets(relatedSynset, callback);
});
};
findRelatedSynsets(synset, callback);
});
});
function findRelatedSynsets(synset, cb) {
var filteredPointers = synset.ptrs;
filteredPointers = synset.ptrs.filter(function(ptr) {
return ptr.pointerSymbol === "@"; // only Hypernyms
// @see the pointer symbol table at https://wordnet.princeton.edu/wordnet/man/wnsearch.3WN.html
// return _.contains(['@', '!', '&', '^', ';', '-'], ptr.pointerSymbol);
});
wordnet.loadSynonyms([], [], _.clone(filteredPointers), function(relatedSynsets) {
_.forEach(relatedSynsets, function(relatedSynset) {
var symbol = _.find(filteredPointers, function(p) {
return p.synsetOffset === relatedSynset.synsetOffset;
}).pointerSymbol;
relatedSynset.pointerSymbol = symbol;
// console.log('%s (%s; %s) ==[%s]==> %s (%s; %s)', synset.lemma, synset.synsetOffset, synset.pos, symbol, relatedSynset.lemma, relatedSynset.synsetOffset, relatedSynset.pos);
});
cb(synset, relatedSynsets);
});
}