Skip to content

Commit bc5e29d

Browse files
author
Brian Vaughn
committed
Refactored TfIdfSearchIndex change to fix test while (hopefully) still preserving previous scope optimization
1 parent 3f80a09 commit bc5e29d

File tree

2 files changed

+25
-10
lines changed

2 files changed

+25
-10
lines changed

source/SearchIndex/TfIdfSearchIndex.js

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,20 @@ export class TfIdfSearchIndex implements ISearchIndex {
112112
var tokenToIdfCache = this._tokenToIdfCache;
113113
var uidFieldName = this._uidFieldName;
114114

115-
function calculateIdf(token : string, documents : Array<Object>) : number {
115+
var calculateTfIdf = this._createCalculateTfIdf();
116+
117+
// Return documents sorted by TF-IDF
118+
return documents.sort((documentA, documentB) =>
119+
calculateTfIdf(tokens, documentB, corpus) -
120+
calculateTfIdf(tokens, documentA, corpus)
121+
);
122+
}
123+
124+
_createCalculateIdf () : Function {
125+
var tokenMap = this._tokenMap;
126+
var tokenToIdfCache = this._tokenToIdfCache;
127+
128+
return function calculateIdf(token : string, documents : Array<Object>) : number {
116129
if (!tokenToIdfCache[token]) {
117130
var numDocumentsWithToken:number = tokenMap[token] && tokenMap[token].$numDocumentOccurrences || 0;
118131

@@ -121,8 +134,14 @@ export class TfIdfSearchIndex implements ISearchIndex {
121134

122135
return tokenToIdfCache[token];
123136
}
137+
}
124138

125-
function calculateTfIdf(tokens : Array<string>, document : Object, documents : Array<Object>) : number {
139+
_createCalculateTfIdf () : Function {
140+
var tokenMap = this._tokenMap;
141+
var uidFieldName = this._uidFieldName;
142+
var calculateIdf = this._createCalculateIdf();
143+
144+
return function calculateTfIdf(tokens : Array<string>, document : Object, documents : Array<Object>) : number {
126145
var score:number = 0;
127146

128147
for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {
@@ -145,11 +164,5 @@ export class TfIdfSearchIndex implements ISearchIndex {
145164

146165
return score;
147166
}
148-
149-
// Return documents sorted by TF-IDF
150-
return documents.sort((documentA, documentB) =>
151-
calculateTfIdf(tokens, documentB, corpus) -
152-
calculateTfIdf(tokens, documentA, corpus)
153-
);
154167
}
155168
};

source/SearchIndex/TfIdfSearchIndex.test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ describe('Search', function() {
4141
};
4242

4343
var assertIdf = function(term, numDocumentsWithToken) {
44-
expect(search.searchIndex._calculateIdf(term, search._documents)).toEqual(calculateIdf(numDocumentsWithToken));
44+
var _calculateIdf = search.searchIndex._createCalculateIdf();
45+
expect(_calculateIdf(term, search._documents)).toEqual(calculateIdf(numDocumentsWithToken));
4546
};
4647

4748
it('should handle special words like "constructor"', function () {
@@ -79,7 +80,8 @@ describe('Search', function() {
7980
};
8081

8182
var assertTfIdf = function(terms, document, expectedTfIdf) {
82-
expect(search.searchIndex._calculateTfIdf(terms, document, search._documents)).toEqual(expectedTfIdf);
83+
var _calculateTfIdf = search.searchIndex._createCalculateTfIdf();
84+
expect(_calculateTfIdf(terms, document, search._documents)).toEqual(expectedTfIdf);
8385
};
8486

8587
describe('TF-IDF', function() {

0 commit comments

Comments
 (0)