British National Corpus のタグを取り除いて検索・出力する


British National Corpus (BNC) のデータは以下のような形式をしている。

   <s n="163"><w NN2>Letters <w VM0>would <w VBI>be <w AJ0>welcome<c PUN>.

文の境界,語の品詞などがタグにより示されるので,単なるテキストから成るものより,詳細な条件を付けて検索することができ,便利である。しかし,タグがあるために,逆に検索が難しくなることもある。このような場合,タグを削除したデータを別に用意し,それを対象に検索を行うと処理が簡単に済む。

下のスクリプトの例では,$_ には手を加えずにタグ部分だけを削除したコピー ($no_tags) を対象に検索を行ない,出力は $_ としている。つまり,検索はタグなしで,出力はタグ付きで行うことになる。

   ------------------------------------------------------------
   while (<>) {

      $no_tags =  $_;                   #レコードのコピーを作る
      $no_tags =~ s/<[^>]*>//g;         #タグを削除する

      if($no_tags =~ m/\bso that\b/i){  #検索はタグなしで
         print $_;                      #出力はタグ付きで
      }

   }
   ------------------------------------------------------------