私は文を個々の単語に分割するコードに取り組んでいます。次に、単語はハッシュキーに対して検索されて存在します。私のコードは100%同一の用語を返します。一致した後、一致するキーに対応する値で文の単語にタグを付けます。問題は、コードタグの用語ですが、ランダムな値では、私が期待するものではありません。また、用語とハッシュキーが類似しているが、100%同一ではない場合があります。用語をキーと一致させるために、正規表現を作成するにはどうすればよいですか。注:ハッシュキーをルート形式にステム処理しました。私はいくつかの例を提供します:文の用語が相乗的または反相乗的であり、私のハッシュキーがSynergである場合、上記の用語をSynergとどのように一致させることができますか。
私のコードは次のとおりです。
open IN, "C:\\Users\\Desktop\\TM\\clean_cells.txt" or die "import file absent";
my %hash=();
use Tie::IxHash;
tie %hash => "Tie::IxHash";
while(<IN>)
{
chomp $_;
$line=lc $_;
@Organs=split/\t/, $line;
$hash{$Organs[0]}=$Organs[1];
}
$Sentence="Lymphoma is Lymph Heart and Lung";
@list=split/ /,$Sentence;
@array=();
foreach $term(@list)
{
chomp $term;
for $keys(keys %hash)
{
if($hash{$term})
{
$cell="<$hash{$keys}>$term<\/$hash{$keys}>";
push(@array, $cell);
}
elsif($term=~m/\b\Q$keys(\w+)\E\b/)
{
$cell="<$hash{$keys}>$term<\/$hash{$keys}>";
push(@array, $cell);
}
elsif($term=~m/\b\Q(\w+)$keys\E\b/)
{
$cell="<$hash{$keys}>$term<\/$hash{$keys}>";
push(@array, $cell);
}
elsif($term=~m/\b\Q(\w+)$keys(\w+)\E\b/)
{
$cell="<$hash{$keys}>$term<\/$hash{$keys}>";
push(@array, $cell);
}
}
}
print @array;
for example: hash looks like this: %hash={
TF1 => Lymph
Thoracic_duct => Lymph
SK-MEL-1 => Lymph
Brain => Brain
Cerebellum => Brain
};
So if the term TF1 is found it should be substituted to Lymph TF1 /Lymph