in reply to Re: retain longest multi words units from hash
in thread retain longest multi words units from hash

OK supposing you have at most 4 words in a group (otherwise expand $max_del)

use strict; use warnings; use Data::Dump qw/pp dd/; use feature 'say'; my %hash = ( 'rendition' => '3', 'automation' => '2', 'saturation' => '3', 'mass creation' => 2, 'automation technology' => 2, 'automation technology process' => 3 ); # prepare sub-slices my @slices; my $max_del = 3; for my $del ( 0 .. $max_del ) { for my $i (0 .. $del) { for my $l ( $i .. $del) { push @{ $slices[$del] }, [$i .. $l] unless $i==0 and $l == $del; # exclude identity } } } sub partitions { my $group =shift; my @words = split / /,$group; return map { join " ", @words[@$_] } @{$slices[$#words]} } delete @hash{ partitions($_) } for keys %hash ; say "Result: ", pp \%hash; say "# --- tests"; say '@slices = ', pp \@slices; say "partitions('automation technology process limit') = " , pp partitions('automation technology process limit');

Result: { "automation technology process" => 3, "mass creation" => 2, "rendition" => 3, "saturation" => 3, } # --- tests @slices = [ [], [[0], [1]], [[0], [0, 1], [1], [1, 2], [2]], [[0], [0, 1], [0, 1, 2], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3]], ] partitions('automation technology process limit') = ( "automation", "automation technology", "automation technology process", "technology", "technology process", "technology process limit", "process", "process limit", "limit", )

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery FootballPerl is like chess, only without the dice