use strict; use warnings; use Text::LevenshteinXS; use Graph; my $data = lc qq[Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Mauris vulputate nunc. Pellentesque pretium. Nam tortor. Vivamus sed eros ut arcu consectetuer auctor. Nunc ultrices nisi. Phasellus congue sem quis nulla. Sed consequat. Etiam consectetuer. Sed ultricies libero at magna commodo nonummy. Sed quis arcu. Integer massa lectus, ultrices non, faucibus eget, sagittis eget, lacus. ]; my @words = $data =~ m/\w+/g; my $g = Graph::Undirected->new; for my $i (0 .. $#words) { for my $j ($i+1 .. $#words) { $g->add_weighted_edge( @words[$i,$j], distance(@words[$i,$j]) ); } } my $apsp = $g->all_pairs_shortest_paths; my ($center, $radius) = (undef, 1_000_000); for (@words) { my $x = $apsp->vertex_eccentricity($_); ($center, $radius) = ($_, $x) if $x < $radius; } print "$center ($radius)\n";