mirror of
https://github.com/JuanCanham/HackMyResume.git
synced 2024-12-23 13:47:22 +00:00
Add baseline keyword analysis.
This commit is contained in:
parent
b3fb2c7130
commit
46c7fa9838
@ -221,8 +221,14 @@ Definition of the FRESHResume class.
|
||||
*/
|
||||
FreshResume.prototype.keywords = function() {
|
||||
var flatSkills = [];
|
||||
this.skills && this.skills.length &&
|
||||
(flatSkills = this.skills.map(function(sk) { return sk.name; }));
|
||||
if( this.skills ) {
|
||||
if( this.skills.sets ) {
|
||||
flatSkills = flatSkills.concat( this.skills.sets.map(function(sk) { return sk.name; }) );
|
||||
}
|
||||
else if( this.skills.list ) {
|
||||
flatSkills = flatSkills.concat( this.skills.list.map(function(sk) { return sk.name; }) );
|
||||
}
|
||||
}
|
||||
return flatSkills;
|
||||
},
|
||||
|
||||
|
70
src/inspectors/keyword-inspector.js
Normal file
70
src/inspectors/keyword-inspector.js
Normal file
@ -0,0 +1,70 @@
|
||||
/**
|
||||
Keyword analysis for HackMyResume.
|
||||
@license MIT. See LICENSE.md for details.
|
||||
@module keyword-inspector.js
|
||||
*/
|
||||
|
||||
|
||||
|
||||
(function() {
|
||||
|
||||
|
||||
|
||||
var _ = require('underscore');
|
||||
var FluentDate = require('../core/fluent-date');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Analyze the resume's use of keywords.
|
||||
@class keywordInspector
|
||||
*/
|
||||
var keywordInspector = module.exports = {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
A unique name for this inspector.
|
||||
*/
|
||||
moniker: 'keyword-inspector',
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Run the Keyword Inspector on a resume.
|
||||
@method run
|
||||
@return An collection of statistical keyword data.
|
||||
*/
|
||||
run: function( rez ) {
|
||||
|
||||
// http://stackoverflow.com/a/2593661/4942583
|
||||
function regex_quote(str) {
|
||||
return (str + '').replace(/[.?*+^$[\]\\(){}|-]/ig, "\\$&");
|
||||
};
|
||||
|
||||
var searchable = '';
|
||||
rez.transformStrings( [], function trxString( key, val ) {
|
||||
searchable += val;
|
||||
});
|
||||
|
||||
return rez.keywords().map(function(kw) {
|
||||
var regex = new RegExp( regex_quote( kw ), 'ig');
|
||||
var myArray, count = 0;
|
||||
while ((myArray = regex.exec( searchable )) !== null) {
|
||||
count++;
|
||||
}
|
||||
return {
|
||||
name: kw,
|
||||
count: count
|
||||
};
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
}());
|
@ -47,26 +47,40 @@ Implementation of the 'analyze' verb for HackMyResume.
|
||||
var safeFormat =
|
||||
(rez.meta && rez.meta.format && rez.meta.format.startsWith('FRESH')) ?
|
||||
'FRESH' : 'JRS';
|
||||
|
||||
var padding = 20;
|
||||
log(chalk.cyan('Analyzing ') + chalk.cyan.bold(safeFormat) +
|
||||
chalk.cyan(' resume: ') + chalk.cyan.bold(resumeObject.file));
|
||||
var info = _.mapObject( nlzrs, function(val, key) {
|
||||
return val.run( resumeObject.rez );
|
||||
});
|
||||
|
||||
log(chalk.cyan('\nTotals: '));
|
||||
log(chalk.cyan('\nSECTIONS (') + chalk.cyan.bold(_.keys(info.totals).length) + chalk.cyan('):\n'));
|
||||
var pad = require('string-padding');
|
||||
_.each( info.totals, function(tot, key) {
|
||||
log(chalk.cyan(pad(key + ': ',17)) + chalk.cyan.bold(pad(tot.toString(),4)));
|
||||
log(chalk.cyan(pad(key + ': ',20)) + chalk.cyan.bold(pad(tot.toString(),4)));
|
||||
});
|
||||
|
||||
log();
|
||||
log(chalk.cyan('Gaps: ') + chalk.cyan.bold(info.gaps.length) +
|
||||
chalk.cyan(' [') + info.gaps.map(function(g) {
|
||||
log(chalk.cyan('GAPS (') + chalk.cyan.bold(info.gaps.length) + chalk.cyan('):\n'));
|
||||
log(chalk.cyan(pad('Lengths: ', padding + 3)) + info.gaps.map(function(g) {
|
||||
var clr = 'green';
|
||||
if( g.duration > 35 ) clr = 'yellow';
|
||||
if( g.duration > 90 ) clr = 'red';
|
||||
return chalk[clr].bold(g.duration);
|
||||
}).join(', ') + chalk.cyan(']') );
|
||||
return chalk[clr].bold( g.duration) ;
|
||||
}).join(', ') );
|
||||
|
||||
|
||||
var tot = 0;
|
||||
log();
|
||||
log( chalk.cyan('KEYWORDS (') + chalk.cyan.bold( info.keywords.length ) +
|
||||
chalk.cyan('):\n\n') +
|
||||
info.keywords.map(function(g) {
|
||||
tot += g.count;
|
||||
return chalk.cyan( pad(g.name + ': ', padding) ) + chalk.cyan.bold( pad( g.count.toString(), 4 )) + chalk.cyan(' mentions');
|
||||
}).join('\n'));
|
||||
|
||||
console.log(chalk.cyan( pad('TOTAL: ', padding) ) + chalk.white.bold( pad( tot.toString(), 4 )) + chalk.cyan(' mentions'));
|
||||
}
|
||||
|
||||
|
||||
@ -77,7 +91,8 @@ Implementation of the 'analyze' verb for HackMyResume.
|
||||
function _loadInspectors() {
|
||||
return {
|
||||
totals: require('../inspectors/totals-inspector'),
|
||||
gaps: require('../inspectors/gap-inspector')
|
||||
gaps: require('../inspectors/gap-inspector'),
|
||||
keywords: require('../inspectors/keyword-inspector')
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user