Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

HTMLからの本文抽出

5.827 Aufrufe

Veröffentlicht am

2009-03-22 @Kansai.pm

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

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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. おわり

×