kakakakakku blog

Weekly Tech Blog: Keep on Learning!

PHPで正規表現を使ってニュースから発言を抽出する_1

正規表現をしっかりと理解しておく必要があると感じて,先週ぐらいからやり始めた.
とりあえず"ニュース記事から発言を抽出して,その発言をした人物を特定する"ことを目標にして頑張っている.
言語はPHP
現在作成できているコードは以下.

「」の中を抽出するのだが,全てが発言ではないので,その後に発言判定語(発言した,強調した...etc)を追加して判定している.

$news = "ニュース本文";
if(preg_match("/((.*)は|も|が).*(「.*」)と(発言した|強調した|言った|表明した|語った|述べた|述べ|訴えた|約束した|示した).*。/",$news,$str)){
  echo "一致しました : ".$str[2]." ".$str[3]." ".$str[4];
}else{
  echo "一致しません";
}


例として【官房長官会見】「そういう話、あるのかな」 英UFO目撃証言(15日午前)- MSN産経ニュースの1段落目をニュース本文とすると

一致しました : 町村信孝官房長官「どういう内容か分からないが、そういう話はあるのかなと思う」述べた

という出力が得られる.
町村信孝官房長官が発言したことを正しく抽出することができている.


しかし当選同期で町村氏に檄 - MSN産経ニュースの3段落目をニュース本文とすると何も一致しない.これは

「ほにゃらら」との見通しを示した。

という末尾で"示した"という発言判定語に"見通しを"というおまけが付いていて,これを網羅してないからである.


このおまけをいろいろ収集して正規表現に含めることである程度解決できるように思えるが,効率が悪いことは明らか.
正規表現が大きくなるのもスマートじゃない.
何か解決案があれば教えて頂きたいと思います.