Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

HTMLからの本文抽出

5 702 vues

Publié le

2009-03-22 @Kansai.pm

HTML::ExtractContent (Perl) の話。
http://search.cpan.org/dist/HTML-ExtractContent/lib/HTML/ExtractContent.pm

Publié dans : Technologie
  • Soyez le premier à commenter

HTMLからの本文抽出

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

×