htmlからの本文抽出

27
HTML (id:tarao) [email protected] (id:tarao) HTML

Upload: lintaro-ina

Post on 25-Jan-2017

2.515 views

Category:

Technology


0 download

TRANSCRIPT

HTMLからの本文抽出

伊奈林太郎 (id:tarao)

京都大学大学院情報学研究科

[email protected]

伊奈林太郎 (id:tarao) HTML からの本文抽出

自己紹介—専門とか

専門 プログラミング言語 (の設計?)• λ計算• 型理論• 証明支援システム /定理自動証明

研究 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 からの本文抽出

トピック

• 背景

• 実演

• アルゴリズム解説

• 発展

伊奈林太郎 (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 からの本文抽出

トピック

• 背景

• 実演

• アルゴリズム解説

• 発展

伊奈林太郎 (id:tarao) HTML からの本文抽出

背景

どうして本文抽出?

伊奈林太郎 (id:tarao) HTML からの本文抽出

背景—エントリーページ

伊奈林太郎 (id:tarao) HTML からの本文抽出

背景—検索対象

本文を抽出している場合 (Googleブログ検索)

伊奈林太郎 (id:tarao) HTML からの本文抽出

背景—検索対象

本文を抽出していない場合 (Technoratiブログ検索)

伊奈林太郎 (id:tarao) HTML からの本文抽出

背景

既存の方法ではダメ?

伊奈林太郎 (id:tarao) HTML からの本文抽出

背景—既存のアプローチ

• HTML::ContentExtractor• HTML::TreeBuilderを使っているので遅い• ゴミが多く残る

• HTML::Content::ContentExtractor• トークンに分解しないといけない

⇒日本語には不向き

• Webstemmer• ニュースサイトに強い

• レイアウトが似た系統でないと抽出できない

⇒一般のサイトで十分な性能が出るわけではない

伊奈林太郎 (id:tarao) HTML からの本文抽出

今回の手法

• 正規表現だけで高速に

• “本文らしさ”をヒューリスティックに判定

伊奈林太郎 (id:tarao) HTML からの本文抽出

今回の手法

• 正規表現だけで高速に

• “本文らしさ”をヒューリスティックに判定

むずかしい話はあとで

伊奈林太郎 (id:tarao) HTML からの本文抽出

トピック

• 背景

• 実演

• アルゴリズム解説

• 発展

伊奈林太郎 (id:tarao) HTML からの本文抽出

実演

使い方

use HTML::ExtractContent;

my $extractor = HTML::ExtractContent->new;

my $content = $extractor->extract($html)->as_text;

# or ->as_html;

デモ

伊奈林太郎 (id:tarao) 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 からの本文抽出

トピック

• 背景

• 実演

• アルゴリズム解説

• 発展

伊奈林太郎 (id:tarao) HTML からの本文抽出

発展—業務レベルで使うために

• ヒューリスティクスではうまくいかない場合がある

• 他のもっと確実な方法と組み合わせるとよい

• 複数の抽出エンジンを用意する

• Chain of Responsibility抽出エンジンを順に試して成功したものの結果を返す

ヒューリスティクスに頼るのは最後

• エンジンの追加を簡単にできるようにする

フレームワーク++

伊奈林太郎 (id:tarao) HTML からの本文抽出

発展—あると便利な抽出エンジン

• APIを使って説明部分を取得(e.g. ニコニコ動画, YouTube, Amazon)

• 特定サイトに特化してルールベースで抽出

• GoogleAdsenseの情報を使う• フィードを使う

• 複数試して一番良い結果を選択するメタエンジン

伊奈林太郎 (id:tarao) HTML からの本文抽出

おわり