Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80722 views
1
var fastLevenshtein = require('../levenshtein.min').get,
2
levenshtein = require('levenshtein'),
3
levenshteinEditDistance = require('levenshtein-edit-distance'),
4
levenshteinComponent = require('levenshtein-component'),
5
levenshteinDeltas = require('levenshtein-deltas'),
6
natural = require('natural').LevenshteinDistance;
7
8
9
10
/* The first 100 words from Letterpress: https://github.com/atebits/Words */
11
source = Array(11).join([
12
'aa',
13
'aah',
14
'aahed',
15
'aahing',
16
'aahs',
17
'aal',
18
'aalii',
19
'aaliis',
20
'aals',
21
'aardvark',
22
'aardvarks',
23
'aardwolf',
24
'aardwolves',
25
'aargh',
26
'aarrgh',
27
'aarrghh',
28
'aarti',
29
'aartis',
30
'aas',
31
'aasvogel',
32
'aasvogels',
33
'ab',
34
'aba',
35
'abac',
36
'abaca',
37
'abacas',
38
'abaci',
39
'aback',
40
'abacs',
41
'abacterial',
42
'abactinal',
43
'abactinally',
44
'abactor',
45
'abactors',
46
'abacus',
47
'abacuses',
48
'abaft',
49
'abaka',
50
'abakas',
51
'abalone',
52
'abalones',
53
'abamp',
54
'abampere',
55
'abamperes',
56
'abamps',
57
'aband',
58
'abanded',
59
'abanding',
60
'abandon',
61
'abandoned',
62
'abandonedly',
63
'abandonee',
64
'abandonees',
65
'abandoner',
66
'abandoners',
67
'abandoning',
68
'abandonment',
69
'abandonments',
70
'abandons',
71
'abandonware',
72
'abandonwares',
73
'abands',
74
'abapical',
75
'abas',
76
'abase',
77
'abased',
78
'abasedly',
79
'abasement',
80
'abasements',
81
'abaser',
82
'abasers',
83
'abases',
84
'abash',
85
'abashed',
86
'abashedly',
87
'abashes',
88
'abashing',
89
'abashless',
90
'abashment',
91
'abashments',
92
'abasia',
93
'abasias',
94
'abasing',
95
'abask',
96
'abatable',
97
'abate',
98
'abated',
99
'abatement',
100
'abatements',
101
'abater',
102
'abaters',
103
'abates',
104
'abating',
105
'abatis',
106
'abatises',
107
'abator',
108
'abators',
109
'abattis',
110
'abattises',
111
'abattoir',
112
'abattoirs'
113
].join('|')).split('|');
114
115
116
117
/**
118
* The actual test loop.
119
* @param {Function} fn Levenshtein distance function.
120
*/
121
var loop = function(fn) {
122
var iterator = -1,
123
previousValue = '',
124
value,
125
dist;
126
127
while (value = source[++iterator]) {
128
dist = fn(previousValue, value);
129
previousValue = value;
130
}
131
};
132
133
134
/** @type {Object} Test config */
135
module.exports = {
136
name: 'Implementation comparison',
137
onComplete: function() {
138
console.log('Benchmark done.');
139
},
140
tests: [
141
{
142
name: 'levenshtein-edit-distance',
143
fn: function() {
144
loop(levenshteinEditDistance);
145
}
146
},
147
{
148
name: 'levenshtein-component',
149
fn: function() {
150
loop(levenshteinComponent);
151
}
152
},
153
{
154
name: 'levenshtein-deltas',
155
fn: function() {
156
loop(function(v1,v2) {
157
return new levenshteinDeltas.Lev(v1,v2).distance();
158
});
159
}
160
},
161
{
162
name: 'natural',
163
fn: function() {
164
loop(natural);
165
}
166
},
167
{
168
name: 'levenshtein',
169
fn: function() {
170
loop(levenshtein);
171
}
172
},
173
{
174
name: 'fast-levenshtein',
175
fn: function() {
176
loop(fastLevenshtein);
177
}
178
},
179
]
180
};
181
182
183
184