Advertisement

HTMLからの本文抽出

Software Engineer at Hatena
Jan. 8, 2016
Advertisement

More Related Content

Slideshows for you(20)

Advertisement

Similar to HTMLからの本文抽出(20)

Advertisement

Recently uploaded(20)

HTMLからの本文抽出

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