mirror of
https://github.com/there4/markdown-resume.git
synced 2024-12-03 08:59:35 -05:00
Add 'stats' command
Very, very rudimentary frequency analysis of the resume text.
This commit is contained in:
parent
9ebc5d669a
commit
483c262619
@ -44,6 +44,7 @@ at the [blog post for the project][blog].
|
|||||||
list Lists commands
|
list Lists commands
|
||||||
pdf Generate a PDF from a markdown file
|
pdf Generate a PDF from a markdown file
|
||||||
selfupdate Updates md2resume.phar to the latest version.
|
selfupdate Updates md2resume.phar to the latest version.
|
||||||
|
stats Generate a word frequency analysis of your resume
|
||||||
templates List available templates
|
templates List available templates
|
||||||
version Show current version information
|
version Show current version information
|
||||||
|
|
||||||
|
BIN
bin/md2resume
BIN
bin/md2resume
Binary file not shown.
@ -38,6 +38,7 @@ class Resume extends Application
|
|||||||
$this->add(new Command\HtmlCommand());
|
$this->add(new Command\HtmlCommand());
|
||||||
$this->add(new Command\PdfCommand());
|
$this->add(new Command\PdfCommand());
|
||||||
$this->add(new Command\SelfUpdateCommand());
|
$this->add(new Command\SelfUpdateCommand());
|
||||||
|
$this->add(new Command\StatsCommand());
|
||||||
$this->add(new Command\TemplatesCommand());
|
$this->add(new Command\TemplatesCommand());
|
||||||
$this->add(new Command\VersionCommand());
|
$this->add(new Command\VersionCommand());
|
||||||
|
|
||||||
|
97
src/Resume/Command/StatsCommand.php
Normal file
97
src/Resume/Command/StatsCommand.php
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
<?php
|
||||||
|
namespace Resume\Command;
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
|
class StatsCommand extends Command
|
||||||
|
{
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this
|
||||||
|
->setName('stats')
|
||||||
|
->setDescription('Generate a word frequency analysis of your resume')
|
||||||
|
->addArgument(
|
||||||
|
'source',
|
||||||
|
InputArgument::REQUIRED,
|
||||||
|
'Source markdown document'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
|
{
|
||||||
|
$this->app = $this->getApplication();
|
||||||
|
$source = $input->getArgument('source');
|
||||||
|
|
||||||
|
$text = file_get_contents($source);
|
||||||
|
$text = $this->stripCommon($text);
|
||||||
|
$analysis = array(
|
||||||
|
'single' => $this->buildStats($text, 1),
|
||||||
|
'double' => $this->buildStats($text, 2),
|
||||||
|
'triple' => $this->buildStats($text, 3),
|
||||||
|
);
|
||||||
|
|
||||||
|
$template = $this->app->twig->loadTemplate('frequency.twig');
|
||||||
|
$view = $template->render($analysis);
|
||||||
|
$output->write($view, true, $this->app->outputFormat);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function stripCommon($content)
|
||||||
|
{
|
||||||
|
$content = preg_replace("/(,|\"|\.|\?|:|!|;|#|-|>|{|\*| - )/", " ", $content);
|
||||||
|
$content = preg_replace("/\n/", " ", $content);
|
||||||
|
$content = preg_replace("/\s\s+/", " ", $content);
|
||||||
|
$content = explode(" ", $content);
|
||||||
|
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// source: https://github.com/benbalter/Frequency-Analysis/blob/master/frequency-analysis.php
|
||||||
|
private function buildStats($input, $num)
|
||||||
|
{
|
||||||
|
$results = array();
|
||||||
|
|
||||||
|
foreach ($input as $key => $word) {
|
||||||
|
$phrase = '';
|
||||||
|
|
||||||
|
//look for every n-word pattern and tally counts in array
|
||||||
|
for ($i=0; $i < $num; $i++) {
|
||||||
|
if ($i != 0) {
|
||||||
|
$phrase .= ' ';
|
||||||
|
}
|
||||||
|
if (!empty($input[$key+$i])) {
|
||||||
|
$phrase .= strtolower($input[$key+$i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!isset( $results[$phrase])) {
|
||||||
|
$results[$phrase] = 1;
|
||||||
|
} else {
|
||||||
|
$results[$phrase]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($num == 1) {
|
||||||
|
//clean boring words
|
||||||
|
$a = explode(
|
||||||
|
" ",
|
||||||
|
"the of and to a in that it is was i for on you he be with as by " .
|
||||||
|
"at have are this not but had his they from she which or we an there " .
|
||||||
|
"her were one do been all their has would will what if can when so my"
|
||||||
|
);
|
||||||
|
foreach ($a as $banned) {
|
||||||
|
unset($results[$banned]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//sort, clean, return
|
||||||
|
array_multisort($results, SORT_DESC);
|
||||||
|
unset($results[""]);
|
||||||
|
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* End of file StatsCommand.php */
|
24
src/Resume/Templates/frequency.twig
Normal file
24
src/Resume/Templates/frequency.twig
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
————————————————————————————————————————————————————————————————————————————————
|
||||||
|
<heading> Word Frequency Analysis </heading>
|
||||||
|
————————————————————————————————————————————————————————————————————————————————
|
||||||
|
|
||||||
|
<comment>Triple Word Phrases:</comment>
|
||||||
|
{% for phrase, frequency in triple %}
|
||||||
|
{% if frequency > 1%}
|
||||||
|
{{frequency|style("info")|pad(3, "right")}} {{phrase}}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<comment>Double Word Phrases:</comment>
|
||||||
|
{% for phrase, frequency in double %}
|
||||||
|
{% if frequency > 1%}
|
||||||
|
{{frequency|style("info")|pad(3, "right")}} {{phrase}}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<comment>Single Words:</comment>
|
||||||
|
{% for phrase, frequency in single %}
|
||||||
|
{% if frequency > 1%}
|
||||||
|
{{frequency|style("info")|pad(3, "right")}} {{phrase}}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
Loading…
x
Reference in New Issue
Block a user