htmlからの本文抽出
TRANSCRIPT
自己紹介—専門とか
専門 プログラミング言語 (の設計?)• λ計算• 型理論• 証明支援システム /定理自動証明
研究 Javaに動的型を入れて LLっぽくする(でも Java嫌い)
言語 普段よく使うものC++ かれこれ 10年ほどOCaml 研究室での公用語
Ruby シェルスクリプト代わりに
Perl まだ半年くらい
JavaScript 定理自動証明器を書いたり
TEX このスライドも
伊奈林太郎 (id:tarao) HTML からの本文抽出
自己紹介— Perlとの出会い
2001年 掲示板CGIを改造するためにPerlに触れるPerl嫌い病を発症Perlから逃げまわる日々が続く
伊奈林太郎 (id:tarao) HTML からの本文抽出
自己紹介— Perlとの出会い
2001年 掲示板CGIを改造するためにPerlに触れるPerl嫌い病を発症Perlから逃げまわる日々が続く
2008年 はてなインターンに参加
Perlオブジェクト指向の正しい作法を学ぶPerl嫌い病が治った勢いでCPAN Authorに
伊奈林太郎 (id:tarao) HTML からの本文抽出
自己紹介— Perlとの出会い
2001年 掲示板CGIを改造するためにPerlに触れるPerl嫌い病を発症Perlから逃げまわる日々が続く
2008年 はてなインターンに参加
Perlオブジェクト指向の正しい作法を学ぶPerl嫌い病が治った勢いでCPAN Authorに
2009年 なぜか Kansai.pmで発表Perlに詳しい人たちにフルボッコにされる (?)
伊奈林太郎 (id:tarao) HTML からの本文抽出
References
Lintaro Ina.HTML::ExtractContent.http://search.cpan.org/dist/HTML-ExtractContent/.
Shuyo Nakatani.ExtractContent.http://rubyforge.org/projects/extractcontent/.
伊奈林太郎 (id:tarao) HTML からの本文抽出
背景—既存のアプローチ
• HTML::ContentExtractor• HTML::TreeBuilderを使っているので遅い• ゴミが多く残る
• HTML::Content::ContentExtractor• トークンに分解しないといけない
⇒日本語には不向き
• Webstemmer• ニュースサイトに強い
• レイアウトが似た系統でないと抽出できない
⇒一般のサイトで十分な性能が出るわけではない
伊奈林太郎 (id:tarao) HTML からの本文抽出
実演
使い方
use HTML::ExtractContent;
my $extractor = HTML::ExtractContent->new;
my $content = $extractor->extract($html)->as_text;
# or ->as_html;
デモ
伊奈林太郎 (id:tarao) HTML からの本文抽出
アルゴリズム—基本アイディア
1 明らかに要らないタグは削ぎ落とす
2 HTMLを適当なブロック要素ごとに分割3 分割された各ブロックにスコアをつける
• 本文っぽさでスコア増
• 本文っぽくなさでスコア減
4 つながっているブロックをまとめてクラスタにする
• ブロックのスコアの合計がクラスタのスコア
5 スコアの一番高いクラスタが本文
伊奈林太郎 (id:tarao) HTML からの本文抽出
アルゴリズム—本文っぽさ
本文っぽさ
• 句読点がいっぱいあると本文っぽい
• テキストノードの文字列が長いと本文っぽい
本文っぽくなさ
• リンクばっかり並んでるところは本文っぽくない
伊奈林太郎 (id:tarao) HTML からの本文抽出
アルゴリズム—ブロックのつながり判定
本文が 1ブロックとは限らないので適度につなげる• 高スコアのブロックが連続したらクラスタっぽい
• スコアの低いブロックがきたらクラスタの切れ目っぽい
(ただし直前のブロックのスコアの高さにも配慮)
例:低A
高B
高C
低D
低E
高 F
低G ←低いけれど F が超高スコアなので切れ目にしない
高 I
⇒クラスタは {B, C}, {F, G, I}
伊奈林太郎 (id:tarao) HTML からの本文抽出
アルゴリズム—傾斜配点
ブログなどで,コメントは本文より低い点にしたい• 上にある方が本文っぽいということにする
• スコアは下にいくほど減衰
⇒下にいくほどクラスタの切れ目と見なされやすい
例:低A
高B
高C
低D
低E
低 F ←減衰して低スコアに低G
低 I ←減衰して低スコアに⇒クラスタは {B, C}
伊奈林太郎 (id:tarao) HTML からの本文抽出
発展—業務レベルで使うために
• ヒューリスティクスではうまくいかない場合がある
• 他のもっと確実な方法と組み合わせるとよい
• 複数の抽出エンジンを用意する
• Chain of Responsibility抽出エンジンを順に試して成功したものの結果を返す
ヒューリスティクスに頼るのは最後
• エンジンの追加を簡単にできるようにする
フレームワーク++
伊奈林太郎 (id:tarao) HTML からの本文抽出
発展—あると便利な抽出エンジン
• APIを使って説明部分を取得(e.g. ニコニコ動画, YouTube, Amazon)
• 特定サイトに特化してルールベースで抽出
• GoogleAdsenseの情報を使う• フィードを使う
• 複数試して一番良い結果を選択するメタエンジン
伊奈林太郎 (id:tarao) HTML からの本文抽出