for each item in items:
for each keyword in item.keywords:
frequency{keyword}++
for each item in items:
sort keywords by frequency
push hierarchy{sorted keywords}, item
####
item = 1, keywords = a b c
item = 2, keywords = b c
item = 3, keywords = d b
##
##
a = 1, b = 3, c = 2, d = 1
##
##
b/c/2
b/c/a/1
b/d/3
##
##
my @items;
push @items, { name => 1, keywords => [ qw( b ) ] },
{ name => 2, keywords => [ qw( b c ) ] },
{ name => 3, keywords => [ qw( b c ) ] },
{ name => 4, keywords => [ qw( b d ) ] },
{ name => 5, keywords => [ qw( e ) ] },
{ name => 6, keywords => [ qw( e f ) ] };
my %freq;
for (@items) {
for (@{ $_->{keywords} }) {
$freq{$_}++;
}
}
my @nodes;
for (@items) {
my @keywords = sort { $freq{$b} <=> $freq{$a} }
@{ $_->{keywords} };
my $path = join "/", @keywords, $_->{name};
push @nodes, $path;
}
print "$_\n" for sort @nodes