私は個々のスペース文字で文を分割し、次にこれらの用語をハッシュのキーと照合しています。用語が100%類似している場合にのみ一致が得られ、同じ単語の複数の出現に一致する可能性のある完全な正規表現を見つけるのに苦労しています。例えば。「拮抗薬」という用語があるとしましょう。「拮抗薬」という用語と完全に一致しますが、拮抗薬、拮抗薬または前拮抗薬、水力拮抗薬などとは一致しません。また、MCFなどの単語の出現に一致する正規表現が必要です。 -7MCF7またはMC-F7で特殊文字などの効果を消音します。
これは私が今まで持っているコードです。コメントされた部分は私が苦労しているところです。
(注:ハッシュ内の用語は、単語の語根形式に変換されます)。
use warnings;
use strict;
use Drug;
use Stop;
open IN, "sample.txt" or die "cannot find sample";
open OUT, ">sample1.txt" or die "cannot find sample";
while (<IN>) {
chomp $_;
my $flag = 0;
my $line = lc $_;
my @full = ();
if ( $line =~ /<Sentence.*>(.*)<\/Sentence>/i ) {
my $string = $1;
chomp $string;
$string =~ s/,/ , /g;
$string =~ s/\./ \. /g;
$string =~ s/;/ ; /g;
$string =~ s/\(/ ( /g;
$string =~ s/\)/ )/g;
$string =~ s/\:/ : /g;
$string =~ s/\::/ :: )/g;
my @array = split / /, $string;
foreach my $word (@array) {
chomp $word;
if ( $word =~ /\,|\;|\.|\(|\)/g ) {
push( @full, $word );
}
if ( $Stop_words{$word} ) {
push( @full, $word );
}
if ( $Values{$word} ) {
my $term = "<Drug>$word<\/Drug>";
push( @full, $term );
}
else {
push( @full, $word );
}
# if($word=~/.*\Q$Values{$word}\E/i)#Changed this
# {
# $term="<Drug>$word</$Drug>";
# print $term,"\n";
# push(@full,$term);
# }
}
}
my $mod_str = join( " ", @full );
print OUT $mod_str, "\n";
}