HTML 解析用ライブラリ

大量の HTML 文書を解析するために作成したライブラリとツールです.HTML 文書を解析して protocol buffers に変換したり,テキスト部分を抽出したり,リンクを抽出したりできます.入出力の文字コードUTF-8 を想定しています.

HTML 文書の解析といっても,テキスト要素とタグ要素への切り分け程度の機能しか持っていません.処理速度については,解析結果の格納に protocol buffers を使っているため,あまり速くありません.std::string のオブジェクトを大量に生成しているのが原因の一つだと思われます.とはいえ,lxml などと比べても大きな差はないと予想します(未確認).

ビルドとインストールについては,configure + make の組み合わせで大丈夫なはずです.ただし,(無駄に)dawgdic を使っているため,dawgdic を先にインストールしておく必要があります.

./configure
make
make check
make install

インストールされるのは,以下のツール & ライブラリ & ヘッダです.

  • ツール
    • kaze-html-parser
      • HTML 文書を受け取って,protocol buffers を出力します.
    • kaze-html-renderer
      • HTML 文書もしくは protocol buffers を受け取り,HTML 文書を出力します.入力が HTML 文書の場合,一度 protocol buffers に変換してから HTML 文書に戻します.
    • kaze-link-extractor
      • HTML 文書もしくは protocol buffers を受け取り,リンクを抽出して,protocol buffers もしくはテキストとして出力します.出力される内容は,対応するタグ,リンク先の URL,アンカーテキストです.
      • 詳しくは kaze-link-extractor -h をご覧ください.
    • kaze-text-extractor
      • HTML 文書もしくは protocol buffers を受け取り,テキスト部分のみを出力します.連続する空白や改行を取り除く機能を持っています.
    • kaze-url-normalizer
      • URL のリストを受け取り,適当に正規化します.
  • ライブラリ
    • libkaze.a
      • 上記ツール群の中身です.
  • ヘッダ
    • html-parser.h
      • kaze-html-parser の中身です.
    • html-renderer.h
      • kaze-html-renderer の中身です.
    • link-extractor.h
      • kaze-link-extractor の中身です.
    • text-extractor.h
      • kaze-text-extractor の中身です.
    • html.pb.h
      • protocol buffers のヘッダです.

最後に,protocol buffers は以下のように定義されています.とてもシンプルです.

package kaze;

message Html
{
optional string url = 1;
repeated Item item = 2;
}

message Item
{
optional string text = 1;
optional Tag tag = 2;
}

message Tag
{
optional string name = 1;
repeated Option option = 2;
}

message Option
{
optional string key = 1;
optional string value = 2;
}

message Node
{
optional string url = 1;
repeated Link link = 2;
}

message Link
{
optional string url = 1;
optional Tag tag = 2;
optional string anchor = 3;
}

# 余談ですが,ライブラリに kaze と命名した理由は,その時点において風邪気味だったからです.