単純アルゴリズムで言語に依存しないHTML本文抽出 sweepy.py(Python)

なんか前にも書いたことがあるようなネタ. 全言語に対応したHTMLからメインコンテンツを抽出するPythonスクリプトです. ソースはここにあります.

これ結構しっかりやりたいので,ここから拡張していこうというベーススクリプトです. アルゴリズムは非常に単純で,各divを

len(cleaned_html) / len(html)

を用いてスコア付けします.でもこれだと当然body要素などのでかいものが採用されてしまうので,一工夫. 候補はhtmlタグの子供(子孫は含まない)にあたるdivとします. スコアは子供の合計値を重み付けて足したものにします. 上のスコアだとpタグなんかがかなり高い値になります. つまりpタグを含むdivは値が高くなります. しかし,このままではまだでかい要素のスコアが高くなってしまいます. そこで,子孫から先祖にたどっていくなかで,スコアがどんどん減少するようにします. つまりでかい要素はpタグなんかにたどり着くのにかなり階層を降りることになり,でかい要素のスコアは小さくなります. そして,この子孫から先祖にたどって行く中でのスコアの減少率をパラメータkとして与えて少し自由度のある設計になっております. 初期設定だと,kは2.2に設定してあります.

これである程度良さそうなHTML本文抽出が可能になりました. ご覧頂くとわかるように,このアルゴリズムでは,言語に依存した情報(句読点や,ストップワードなど)を一切使用していません. よって,全言語に対応したものと言うことができると思います(精度はkに依存しますが).

お気づきのように,記事がある程度長くないとこいつはうまく動きません. なので,動画を貼付けているだけのサイトなんかには歯が立ちません. でもまぁ,僕の目的には使えそうなので,記事を対象とした方向性で改良を進めていきたいと思います.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中