最近作ろうとしているものにだんだんと必要になって来た「HTMLの本文抽出」。
例えばスマートニュースやPocketなどでのみられる「最適化された記事表示」。 昨今のモバイル回線事情を鑑みるに、UXを追求するとどうしても欲しくなってくる。
他の場面でも必要だったりする。それは検索エンジンや記事分類の前処理としての本文抽出。 HTMLからタグやCSSやJavaScriptを抜くのはもちろんだが、 いわゆるUIパーツのHTMLを省いて記事本体のみを抽出できると、検索精度があがる。 例えば、カレンダーパーツが設置されていたりすると、どのページでも「1月」が引っかかりしてしまい、本当に「1月」について述べている記事が埋もれてしまう。
世の中では至る所で必要となる技術なので、いくつか手法がweb上に載っていることを期待して調査してみる。 読んだページをあげてみる。
- PythonでブログのHTMLから本文抽出 2015
- まとめてくれてる有難い
- readability
- arc90labs-readabilityのポート
- Goose
- Gooseというオープンソースの本文抽出ライブラリがあるようだ。
- HTMLからの本文抽出
- HTMLをブロックに分けて、ブロックごとにスコアをつけて本文を判定するみたい
- スコアは、句読点が多いとか、本文が長いとかそういう観点で決めるみたい
- 単純アルゴリズムで言語に依存しないHTML本文抽出 sweepy.py(Python)
- CRF を使った Web 本文抽出
- 機械学習と絡める
- snacktory
- Readability のJava clone. ちょっと改良も入っているっぽい
- Webstemmer
- レイアウト情報を元に使う。クローラ付き
所感では、readability・extracontentあたりは実装がそこまででかくないので(どちらもpythonで3000行程度)、 この辺を実際に試してみて、精度が良さそうならrustポーティングして利用する感じでいきたい。 本文抽出の段階で機会学習を使うのは今の段階ではオーバスペックかな。
どうでもいいけど、画像が多くて本文が少なく抽出しづらいということで「しょこたんブログ」が本文抽出で有名なのはツボだった。