Advent Calendar 2016を眺めていると、「個人で作ったものを発表していいよー」という素敵なカレンダーがあったので便乗して紹介させて頂きます。
事の発端
皆さん、IT関連の情報収集ってどうしてますか?
とりあえずいろんなニュースサイトを回ったりQiitaの投稿を見てみたり、最近でしたらニュースのキュレーションサービスなどを利用している方も多いでしょうか。
私もあれやこれやと登録しているうちに、頭もメールボックスも新着通知もパンクしてしまったので、「簡単にでいいからニュースと最近の動向が確認できるツールをくれ!」と思い立った結果、自分用ツールを作ることにしました。
作ってみた
まだ工事中な部分もありますが、基本的にはニュースの一覧化や今注目されている単語が表示されるようになっています。
また、過去の情報を遡ってどんなニュースが話題になっていたかを記録していく試みを行っています。
現在お試しとして公開している集計結果でも10月には”VR”や”MacBook”、”Surface”などがピックアップされていることがわかり、12月に入ってからは”DeNA”の”WELQ”などが話題に上がっている様子が見られます。
ということでまだ高度な分析などを行っているわけではないですが、ちょっとニュースや最新の流行を確認したいなぁ~という方はぜひご利用ください。
開発の話
と、ここまででは本当に宣伝しただけの内容になってしまうので、少し開発(というよりライブラリ紹介)の話を。
クローリングとスクレイピング
最新のニュース情報を取得するために各サイトを回っています。
更に後々分析するために本文部分をスクレイピングによって取得しています。
その時利用しているのがphpqueryというライブラリです。
すごくお手軽に使えておすすめです。
#ライブラリ読み込み
require_once("./phpQuery-onefile.php");
#読み込む
$doc = phpQuery::newDocumentFile("http://xxxxx");
#セレクターで指定できます
$text = ($doc["#id_name"]->find(".class_name")->find("> p")->text());
形態素解析もどき
単語単位に集計を行うので文章を単語ごとに分解しなくてはいけません。
形態素解析と呼ばれたりする操作で、有名なライブラリにMeCabがあります。
が、結局形態素解析ライブラリは使いませんでした。
IT系では新しい用語やカタカナ語がポンポン出てくるため、形態素解析用の単語辞書にないものが多く、変に分解されることが多くありました。
そこで何も考えずに漢字・ひらがな・カタカナ・アルファベットの区切り目で分断するだけのほうがむしろきれいに単語分解できました。
スコアリング
注目されている単語を抽出するために、現在の人気度を定義する計算を行っています。
こういった文章内の単語の評価としてTF-IDFという指標がよく使われます。
TF-IDFでは文章全体と注目する文章内でのその単語の出現傾向に着目していますが、これを真似て文章全体での出現回数や配信サイト別の出現回数、前日との差などを盛り込んで計算しています。
参考
集計・グラフ・レポーティング
集計やレポーティングにはR Markdownを利用しています。サクッと集計やグラフを作成してHTMLに出力できるので非常に便利です(R使いの方限定になってしまいますが)。
折れ線グラフはdygraph、ワードクラウド(タグクラウド)作成にはjQCloudを利用しています。
どれも可視化が簡単にできるありがたいライブラリです。
ざっくりとではありますが、作ったものの紹介がてらライブラリ等を紹介させて頂きました。
サイトもまだまだ発展途上ですし、「ニュースキュレーションサービスなんていくらでもあるじゃん」と言われそうではありますが、”技術者は自分で作ってなんぼ(?)”の精神で作ってみました。
「よし自分もなにか作ってみよう」とモチベーションアップになる方が少しでもいればいいなぁ…。