Python
スクレイピング
自然言語処理
機械学習
scikit-learn

記事のスクレイピングを機械学習で自動化

スクレイピングの自動化とは、抽出箇所の選択等で人手を介さず、URL(またはhtmlのファイルパス)を渡すだけで抽出する技術です。今回は、コンテンツ抽出のdomベースモデルをパッケージ化したので、紹介します。


仕様概要

urlまたはhtmlのファイルパスを渡すと、その記事の本文(タイトルを除く)を抽出する。

対応しているWebページの種類は、ニュース記事、ブログ記事、Wikipediaなど。


事前準備

まず、事前準備としてMeCabをインストールしておいてください。

git clone https://github.com/taku910/mecab && \

cd mecab/mecab && \
./configure --enable-utf8-only && \
make && \
make check && \
make install && \
pip install --no-cache-dir mecab-python3 && \
ldconfig && \
cd ../mecab-ipadic && \
./configure --with-charset=utf8 && \
make && \
make install


インストール

git clone https://github.com/sugiyamath/domextract

cd domextract
python setup.py install


使い方

urlを指定して抽出します。(extractメソッドにis_url=Falseというパラメータを渡せばhtmlファイルでもできる)

from domextract import Extractor

ext = Extractor()
print(ext.extract("https://mainichi.jp/articles/20181020/k00/00e/030/229000c"))

出力

' 【ワシントン会川晴之】トランプ米大統領は19日夜、サウジの発表について「大きな第一歩だ」と述べ、サウジが真相究明に向けた努力を続けていることを評価した。滞在先の西部アリゾナ州で記者団の質問に答えた。一方、サウジへの制裁実施の可能性を記者団に問われたトランプ氏は「多分そうなるだろう」と答え、早急に議会と調整する考えも表明した。  【画像】監視カメラが捉えた皇太子の警護担当とみられる男性 <王室知り尽くしたカショギ氏一部王族の助言役も> <「王室の関与」米主要紙報道で広がる波紋> <サウジ不明記者「最後のコラム」で訴えたこと> <反政府記者「失踪」の闇サウジ政府は真相を語れ> <不明記者、アップルウオッチで録音か殺害時の音声>  トランプ氏は、2日の事件発生以来、サウジが武器購入や米国への投資など450億ドル(約5兆円)の商談を約束していることを理由に、サウジへの批判を慎重に避け続けてきた。人権よりもビジネスを優先する形だったが、サウジとトルコ両国を訪問したポンペオ国務長官から詳細な報告を受けた18日以後に発言のトーンを変えた。   トランプ氏は、米国も国際的な批判を招く可能性があることを考慮し、サウジ政府の事件への関与が認められた場合には「非常に厳しい措置を取る」と制裁実施を明言した。ただ、記者団に対する発言の中で武器売却の中止は望まない意向も示している。   議会では超党派の議員が、サウジへの厳しい対応を求めている。米国製武器の売却停止のほか、戦闘機への空中給油や情報提供などイエメン空爆を実施中のサウジ軍への支援打ち切りなどを求める声が強まっている。   これに対しトランプ氏は19日も「サウジは偉大な同盟国だ。米国に巨額の投資をしている。エネルギー供給面でも世界2位。こうしたことを考慮しなければならない」と述べた。厳しい制裁を実施した場合、サウジが中国やロシア製武器を購入したり、原油輸出量の削減に踏み切ったりすれば、世界経済に混乱を招く可能性があると警戒しているからだ。   トランプ政権は昨年5月の初外遊先にサウジを選ぶなど、サウジと密接な関係を築いてきた。ビジネス面だけでなく、敵視するイランの封じ込めを実現するにはサウジが欠かせないパートナーと位置づけている。  文字サイズ 小 中 大 印刷 シェア'

不要なデータが含まれることがありますが、それなりの精度です。


リンク

https://github.com/sugiyamath/domextract <- バグがあったらissueを書いてください。暇があったら対応します。


追記


2018-10-20 12:52

ランダムフォレストを使っていますが、時代とともにモデルが役に立たなくなる可能性もあるので、モデルを更新したい場合はフォークしてアノテーションして自分で訓練してください。