Perlを使用したテキスト処理

2012.01.11

テキストの読み込み

■ ファイルを開く

### 選択テキスト各行を連結して読み込む
open (TEXT, "../files/$FORM{'text'}");
while(<TEXT>){
  unless ($_ =~ "-----------"){
  $lines .= $_;
  }
}

$FORM{'text'} にはテキストファイル名が入っている。このファイルの中身をTEXTというファイルハンドルを介して読み込む。while 以下ではテキストファイルの中身を一行ずつ読み込みながら結合して $lines に入れていく。unless はこのとき読み込む行の選択条件を示す。ここでは「-----------」という(紙媒体では)ページ区切りを示す行を読み込まないという条件を設定している。

■ フォームから取得

投稿フォームに入力され submit で送られたものを取得するには CGI について述べたページで例を提示した。参照先はこちら

■ Webページから取得

RSSなどXML形式のものをはじめ、Webページ上のテキストデータを取得するには CGI について述べたページで例を提示した。参照先はこちら

データの整形

上記いずれのケースでも最終的には $lines などの変数にテキストデータを格納する。ここから必要な部分を抽出するには以下の方法を使う。

■ 置換

#### 短縮URLの処理
$lines =~ s/(http:\/\/t.co\/)(\w+?)\b/<a href="$1$2">$1$2<\/a>/g;

カッコでくくった部分にマッチした内容が冒頭から順に特殊変数$1、$2...に入っていく。上記の例では短縮URL文字列(httpから始まり何か区切り記号が出て来るまでの文字の連なり)にマッチしたものにリンクを作成して元の文字列と置き換えている。

■ 検索語の前後抽出

while ($lines =~ /$term/gi){
  $pre = substr ($`, $span*(-1));
  $post = substr ($', 0, $span);
  print OUT "$pre $& $post\n";
}

$term には検索語が入る。$span にはその前後の文字数が入る。OUT は print の出力先ファイルハンドル。$`($PREMATCH)は最後に成功したパターンマッチで一致した部分の前の文字列が入る。$'($POSTMATCH)はマッチ部分の後ろの文字列。$&($MATCH)はマッチした文字列のこと。これら三つは正規表現にかかわる特殊変数である。substr は部分文字列を取り出す変数。

▼研究関連メモ目次へ戻る

Copyright(c)2005-2012 ccoe@mac.com Allrights reserved.