Допустим, у меня есть текстовое предложение:
$body = 'the quick brown fox jumps over the lazy dog';
, и я хочу перевести это предложение в хэш «ключевых слов», но я хочу разрешить ключевые слова из нескольких слов;У меня есть следующее, чтобы получить ключевые слова из одного слова:
$words{$_}++ for $body =~ m/(\w+)/g;
После этого у меня есть хэш, который выглядит следующим образом:
'the' => 2,
'quick' => 1,
'brown' => 1,
'fox' => 1,
'jumps' => 1,
'over' => 1,
'lazy' => 1,
'dog' => 1
Следующий шаг, так что яможет получить ключевые слова из 2 слов, это следующее:
$words{$_}++ for $body =~ m/(\w+ \w+)/g;
Но это получает только каждую "другую" пару;выглядит так:
'the quick' => 1,
'brown fox' => 1,
'jumps over' => 1,
'the lazy' => 1
Мне также нужно смещение в одно слово:
'quick brown' => 1,
'fox jumps' => 1,
'over the' => 1
Есть ли более простой способ сделать это, чем следующий?
my $orig_body = $body;
# single word keywords
$words{$_}++ for $body =~ m/(\w+)/g;
# double word keywords
$words{$_}++ for $body =~ m/(\w+ \w+)/g;
$body =~ s/^(\w+)//;
$words{$_}++ for $body =~ m/(\w+ \w+)/g;
$body = $orig_body;
# triple word keywords
$words{$_}++ for $body =~ m/(\w+ \w+ \w+)/g;
$body =~ s/^(\w+)//;
$words{$_}++ for $body =~ m/(\w+ \w+ \w+)/g;
$body = $orig_body;
$body =~ s/^(\w+ \w+)//;
$words{$_}++ for $body =~ m/(\w+ \w+ \w+)/g;