0

さまざまなキーワードを含むハッシュがあります。ここで、文字列内のこれらのキーワードの数を見つけたいと思います。

foreach ループを使用してコードの一部を書きました。

use strict;
use warnings;

my $string = "The invitro experiments are conducted on human liver microsom. "
          . " These liver microsom can be cultured in rats.";

my %hash = (
    "human"     => 1,
    "liver"     => 1,
    "microsom"  => 1,
);

for my $nme (keys %hash){
        # Some code which I am not sure
}

期待される出力:human:1; liver:2; microsom:3

誰かがこれで私を助けることができますか?

ありがとう

4

3 に答える 3

1

次のスニペットで十分です。

#!/usr/bin/perl -w

use strict;

my $string="The invitro experiments are conducted on human liver microsom. These liver   microsom can be cultured in rats.";

my %hash = (
'human' => 1,
'liver' => 1,
'microsom' => 1,
);

my @words = split /\b/, $string;

my %seen;

for (@words) {
    if ($_ eq 'human' or $_ eq 'liver' or $_ eq 'microsom') {
        $seen{$_}++;
    }
}

for (keys %hash) {
    print "$_: $seen{$_}\n";
}
于 2012-09-17T19:06:37.067 に答える
0

おそらくこれを行うための最良の方法ではありませんが、うまくいくはずです。

my $string = "The invitro experiments are conducted on human liver microsom. These liver microsom can be cultured in rats.";

my %hash = (
    'human' => 1,
    'liver' => 1,
    'microsom' => 1,
);

foreach my $nme (keys %hash){
    $hash{$nme} = scalar @{[$string =~ /$nme/g]};
    print "$hash{$nme}\n";
}
于 2012-09-17T19:17:01.603 に答える
0

それは宿題ですか?:) まあ、ハッシュ内の単語数と文字列 ( string ) 内の単語数に依存しますが、ハッシュを反復するか、文字列内の単語を反復し、見つかったときに適切な値をインクリメントします。すべての単語をチェックする必要があるため、「0」とマークされたリストと、ゼロ以上のマークが付けられたリストで終了します。

于 2012-09-17T18:25:24.223 に答える