我在单个空格字符处拆分句子,然后将这些术语与哈希键进行匹配。只有当术语 100% 相似时,我才会得到匹配,并且我正在努力寻找一个完美的正则表达式,它可以匹配多个相同单词的出现。例如。让我们考虑一下我有一个术语“拮抗剂”,现在它与术语“拮抗剂”完全匹配,但无法与拮抗剂、拮抗剂或前拮抗剂、水拮抗剂等匹配。我还需要一个正则表达式来匹配诸如 MCF 之类的词的出现-7 配合MCF7或MC-F7消音特殊字符等效果。
这是我到目前为止的代码;thr 评论部分是我苦苦挣扎的地方。
(注意:散列中的术语是词根形式)。
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";
}