次へ: 6.3 記事本文の取得部分 上へ: 6 各部分の構成 前へ: 6.1 タイトルの取得部分 (PDF ファイル: awkhtml.pdf)

6.2 見出し部分の取得部分

次に、3 節の 2. の見出しの部分の取得は 以下のようにします。
  ##### 見出し部分の取得 #####
  ($0 ~ / CONTENTS_TITLE_TABLE/){
      # 不要な行の読み飛ばし
      while($0 !~ /<font size/)
        if(getline<=0){ errorexit=2; exit }
      # headline に行を保存
      headline=$0
      while(headline !~ /<\/small>/){
          if(getline<=0){ errorexit=3; exit }
          headline = headline $0
      }
      # 不要なタグ (font,small) を削除
      gsub(/<\/?font[^>]*>/,"",headline)
      sub(/[ \t]*<small>[ \t]*/,"",headline)
      sub(/[ \t]*<\/small>.*/,"",headline)
      while($0 !~ /\/CONTENTS_TITLE_TABLE/)
        if(getline<=0){ errorexit=4; exit }
      next
  }
これは、``CONTENTS_TITLE_TABLE'' というキーワードが そこにしか使われていないのでできることなのですが、 ここでは以下のようなことを行っています。
  1. まず最初の while() 文で必要な部分に達するまでの行の読み飛ばし、 つまり、``<font size'' という文字列に出会うまでは getline を 繰り返す
  2. 出会ったらそれを headline に保存し、 それに ``</small>'' が含まれていなければ、 複数行で構成されている可能性を考えて、 再び getline で headline を追加していく
  3. headline から不要なタグ (font, small) を削除
  4. ``/CONTENTS_TITLE_TABLE'' というキーワードに出会うまで 行の読み飛ばしを行う

今回のタグの削除は、<font>, </font> タグは gsub() で、 <small>, </small> タグは sub() で行っていますが、 font の方はそのタグのみを削除し、 small の方はその前後のゴミも削除するようにそうしています。 なお、この文字列には <b>, </b> タグも含まれるのですが、 これは出力用に残しておくことにします。

なお、<font> の削除で、 「<\/?font[^>]*>」という正規表現を使っていますが、この後半部分は

を意味しています。 <font> は、実際には <font size=+1> のように 使われていてオプションが含まれているので、 それも一緒に削除するために
<font とその後に続く > 以外の文字列と その後の >
をこれで表現しています。


次へ: 6.3 記事本文の取得部分 上へ: 6 各部分の構成 前へ: 6.1 タイトルの取得部分
竹野茂治@新潟工科大学
2006年8月14日