Абзац грамматики Perl

Допустим, у меня есть текстовое предложение:

$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;
5
задан Glen Solsberry 18 August 2010 в 20:58
поделиться