#!/usr/bin/perl -w
#
# A example which takes in text file and represents each word as a
# node and places edges where the nodes are used together.
use strict;
use lib '../lib';
use GraphViz;
my $graph = GraphViz->new(layout => 'neato', directed => 0, concentrate => 1, epsilon => 0.001, random_start => 1, no_overlap => 1m);
open(IN, shift || '../README');
my @words;
while (<IN>) {
tr/[^A-Za-z]+/ /cs;
push @words, split(/\s+/, lc);
}
@words = grep { ! /^\s*$/ } @words;
my %words;
my $lastword = shift @words;
foreach my $word (@words) {
$words{$lastword}{$word}++;
$lastword = $word;
}
foreach my $left (keys %words) {
foreach my $right (keys %{$words{$left}}) {
if ($words{$left}{$right} == 1) {
$graph->add_edge($left => $right, weight => $words{$left}{$right} - 1);
} else {
$graph->add_edge($left => $right);
}
}
}
#warn $graph->_as_debug;
$graph->as_png("text.png");
#print $graph->as_text;