Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Read down for what it does.
- var laveshtien_strings = [
- "Photos in $in",
- "Photos near $in",
- "Photos by $user",
- "Photos tagged $tag",
- "Sort by $",
- "$term"
- ];
- // DONT EVEN ASK ITS PORTED FROM SOME CODE
- // WHICH WAS IN THIS FORM already :-(
- function levDist(s, t) {
- var d = []; //2d matrix
- // Step 1
- var n = s.length;
- var m = t.length;
- if (n == 0) return m;
- if (m == 0) return n;
- //Create an array of arrays in javascript (a descending loop is quicker)
- for (var i = n; i >= 0; i--) d[i] = [];
- // Step 2
- for (var i = n; i >= 0; i--) d[i][0] = i;
- for (var j = m; j >= 0; j--) d[0][j] = j;
- // Step 3
- for (var i = 1; i <= n; i++) {
- var s_i = s.charAt(i - 1);
- // Step 4
- for (var j = 1; j <= m; j++) {
- //Check the jagged ld total so far
- if (i == j && d[i][j] > 4) return n;
- var t_j = t.charAt(j - 1);
- var cost = (s_i == t_j) ? 0 : 1; // Step 5
- //Calculate the minimum
- var mi = d[i - 1][j] + 1;
- var b = d[i][j - 1] + 1;
- var c = d[i - 1][j - 1] + cost;
- if (b < mi) mi = b;
- if (c < mi) mi = c;
- d[i][j] = mi; // Step 6
- //Damerau transposition
- if (i > 1 && j > 1 && s_i == t.charAt(j - 2) && s.charAt(i - 2) == t_j) {
- d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + cost);
- }
- }
- }
- // Step 7
- return d[n][m];
- }
- // So the other person wants to write code once in a while
- // but reads most of it
- // just to make sure she doesn't calls me asking whats going on in here
- // wrote this amazing name
- // Gotta love sublime for autoType
- function removePossibleKeywordsAndCalculateLevDistanceUsing(lavQueryString, searchString){
- var tokens = lavQueryString.split(" "),
- inputWordArray = searchString.split(" "),
- tokensInputString = {},
- token = '',
- output = {
- score: Infinity,
- tokens:{}
- },
- shouldWeCallTheLev = true;
- for( var i = 0; i < tokens.length; i++ ){
- if( inputWordArray.length < tokens.length ){
- shouldWeCallTheLev = false;
- break;
- }
- if( tokens[i].indexOf("$") === -1){
- continue;
- }
- token = tokens[i].replace("$","");
- output.tokens[token] = inputWordArray[i];
- tokens[i] = inputWordArray[i] = '';
- }
- if( shouldWeCallTheLev ){
- output.score = levDist( tokens.join(" "), inputWordArray.join(" "));
- }
- return output;
- }
- function getBestLavMatch(string){
- var results = laveshtien_strings.map(function(lav){
- return removePossibleKeywordsAndCalculateLevDistanceUsing(lav, string);
- });
- results = results.sort(function(a, b){
- return a.score - b.score;
- });
- return results[0];
- }
- // path search
- exports.search = function(req, res, next){
- if( req.service.allowsSearch === false){
- return res.json({
- status_code: 403,
- message: "Method Not Supported for this service",
- });
- }
- var lavResult = getBestLavMatch(req.query.q);
- if( levResult && levResult.score < 5 ){
- service.search(levResult.tokens).done(function(snResult){
- res.json({
- status_code: 200,
- message: 'Ok',
- data: snResult
- });
- }).fail(errorResponder(res));
- return;
- }
- // Implement suggestions here
- next ();
- }
- /// Read but didn't understood whats happening ?
- // Takes strings like Photos in Jabalpur, etc
- // Makes a kvp of them that i call later
- // Dirty deeds done dirt cheap
Advertisement
Add Comment
Please, Sign In to add comment