0

特定の用語がハッシュキーに含まれているかどうか、ハッシュ値でタグ付けされているかどうかを確認しようとしています。私のコードは完全一致を識別しますが、用語がわずかに異なる場合は失敗します。また、完全一致の場合、コードは一致した用語に、関連する値ではなくすべての値をタグ付けします。

%Drugs = ('tamoxifen' => tablet,
        'docotaxel' => capsule,
        '5-hydroxycin' => IDK,);

$sentence="tamoxifen 4-hydroxytamoxifen tamoxifen-incoded pre-docotaxel Drugs";
@sentence=split/ /,$sentence;
@array=();
foreach $word(@sentence)
{
    chomp $word;
    for $keys(keys %Drugs)
    {
        if($Drugs{$word})
        {
            $term="<$Drugs{$keys}>$word<$Drugs{$keys}>";
            push(@array,$term);
        }
        elsif($word=~/.*$Drugs{$keys}$/i)
        {
            $term="<$Drugs{$keys}>$word<$Drugs{$keys}>";
            push(@array,$term);
        }
    }
    foreach $Bio(@array)
    {
        print "$Bio\n";
    }

出力文が欲しい:

<tablet>tamoxifen</tablet> <tablet>4-hydroxytamoxifen</tablet> <tablet>tamoxifen-incoded<tablet> <capsule>pre-docotaxel<capsule> Drugs.(Here Drugs didn't match and hence it is left untagged)  
4

1 に答える 1

2

完全一致をチェックしていましたが、予想に基づいて、 $key に対して $word を正規表現する必要がありました

これを試してください - >

%Drugs = ('tamoxifen' => tablet,
        'docotaxel' => capsule,
        '5-hydroxycin' => IDK,);

$sentence="tamoxifen 4-hydroxytamoxifen tamoxifen-incoded pre-docotaxel Drugs";
@sentence=split/ /,$sentence;
@array=();
foreach $word(@sentence)
{
    chomp $word;
    for $keys(keys %Drugs)
    {
        if($word=~/.*$keys$/i)#Changed this
        {
            $term="<$Drugs{$keys}>$word<$Drugs{$keys}>";
            push(@array,$term);
        }
        elsif($word=~/.*$Drugs{$keys}$/i)
        {
            $term="<$Drugs{$keys}>$word<$Drugs{$keys}>";
            push(@array,$term);
        }
    }
}
foreach $Bio(@array)
  {
     print "$Bio\n";
  }

アップデート


新しい要件に基づく

%Drugs = ('tamoxifen' => tablet,
        'docotaxel' => capsule,
        '5-hydroxycin' => IDK,);

$sentence="tamoxifen 4-hydroxytamoxifen tamoxifen-incoded pre-docotaxel Drugs";
@sentence=split/ /,$sentence;
@array=();
foreach $word(@sentence)
{
    chomp $word;
    my $flag= 0; #using a flag, I am sure there are PLENTY of ways better than this :)
    for $keys(keys %Drugs)
    {

        if($word=~/.*$keys$/i)#Changed this
        {
            $term="<$Drugs{$keys}>$word<$Drugs{$keys}>";
            push(@array,$term);
            $flag++;
        }
        elsif($word=~/.*$Drugs{$keys}$/i)
        {
            $term="<$Drugs{$keys}>$word<$Drugs{$keys}>";
            push(@array,$term);
            $flag++;
        }

    }
    push (@array,$word) if $flag==0;
}
foreach $Bio(@array)
  {
     print "$Bio\n";
  }
于 2012-10-24T21:01:29.930 に答える