QiitaAPIと日本語形態素解析APIを使ってQiitaで人気のワードを探そう!

こんにちは、GMOアドマーケティング TAXEL開発部のy-otakiです。

今回は、QiitaAPI + Yahooの日本語形態素解析API を用いて、Qiitaで流行りのワードを抽出してみようと思います!

この記事でやること

  • QiitaAPI + Yahooの日本語形態素解析API を用いて、Qiitaの記事タイトルの形態素解析を行う。
  • GAS上でAPIを動かし、その結果をシートに出力する。
  • 結果の解析を行い、形態素解析によって記事タイトルに含まれやすいワードを抽出し、考察する。

QiitaAPIで記事名を取得しよう!

  1. アクセストークンを発行しましょう
    まずはアクセストークンの発行を行います。
    今回は記事名さえ取得すれば問題ないので、read_qiitaのスコープだけ有効にしておきましょう。
    また、アクセストークンは発行後に画面を切り替えると再表示出来なくなるので注意が必要です。
  2. APIを叩いてみましょう
    さっそく、APIを叩いてみましょう。
    XXXXXXXXXの箇所には作成したアクセストークンを入れてください。

    $ curl -H 'Authorization: Bearer XXXXXXXXXXXXXX' 'https://qiita.com/api/v2/items'

    正しく実行出来ていれば、記事のタイトル……だけでなく中身も含めてすべてが表示されているかと思います。
    これだと今回の目的には適していませんから、記事名だけを取得するように変更したいですね。

    取得した情報の加工を行うために、コードを書くことにします。
    今回は内容からしてシートへの書き出し等も行いたいので、Google Apps Scriptを利用します。
    適当にGoogleスプレッドシートを作成し、スクリプトエディタを開きましょう。

  3. GASでAPIを叩こう
    今回は、下記コードのようなやり方でGASからAPIを叩きました。
    APIのパラメータに関しては、QiitaAPIの公式ドキュメントを参考にしてください。
    今回はテストですので、”per_page=10″ で記事を10件だけ取得するようにしています。
    qiitaApiTestを叩いた時の出力結果は、Qiitaの記事名やURLが表示されてしまう都合上、このブログには載せられないのですが……だいたい下記のような形で出力されるかと思います。 これでQiitaAPIの記事名一覧を取得する方法が解りました。
    次は、これを文字列解析して、頻出する単語を取り出していきます。

Yahooの日本語解析APIで形態素解析してみよう!

Yahooの日本語形態素解析APIを利用して、記事名一覧を解析していきます。
    1. アプリケーションIDを取得する
      こちらの手順に従って、アプリケーションIDを取得します。
  1. とりあえず叩いてみよう
    まずは出来るだけ少ないコードでAPIへのリクエストを行ってみました。
    出力結果 取れてはいるようですが、XMLで返ってくるため非常に分かり辛いです。
    このままでは扱い辛いので、加工などまで行うコードに書き換えてみました。
  2. こちらのmorphologicalAnalysisApiTestを叩いてみた結果はこんな感じです! 悪く無さそうな感じがしますね!
    少なくとも、どの語がどれだけ出現したのかは正しく取れていそうです。
    あとはこれを先程の記事名に対して行えば、それっぽい結果が得られるはず!

ふたつのAPIをくっつけてみよう!

取得した記事名を日本語解析APIに流し込みます。
冒頭に書いた通り、今回の目的はQiitaで流行っているワードを抽出することです。
何をもって流行りのワードとするかは突き詰めれば変わってきそうですが、
今回は単純に形態素の出現数で考えることにします。

日本語解析APIのなかで形態素の出現数は算出されていますから、QiitaAPIで取得した記事名をすべてくっつけて日本語解析APIに流せば……とも思ったのですがリクエストが大きすぎると叱られてしまいました。
すべてを一度に解析するのは難しそうなので、下記のように100記事タイトルごとに解析を掛けて、後から集計をする形で進めていきます。

コードは下記の通りです。 こちらを実行すると、各形態素ごとの結果が山のように出てくるかと思います。
それでは、結果を確認してみましょう。

結果を確認してみよう!

上記のコードそのままで実行した場合(記事数最大1000件/新着順)、
記事タイトルに含まれる形態素の上位30件は下記の通りでした。
……なるほど。さっぱり参考になりませんね!
ぼんやりと、javascriptが流行ってるのかなー、くらいのことしかわかりません。

もしかして、QiitaAPIで記事を取得する際のパラメータが悪いのでしょうか。
今回のコードだと page: 1~10, per_page: 100 で指定していますから、最新1000件の記事を解析している筈です。
ドキュメントによると、queryを指定することでQiitaの記事検索ページと同じように検索出来るようです。
いろいろと指定して試してみました。

query=title:コロナ

記事タイトル最大1000件を解析したうち、形態素の上位30件を提示します。


おぉ偏った。コロナは “新型コロナ” や “コロナウイルス” のような文言で書くことが多いでしょうから、上位3件は非常に納得のいく結果です。
あとは、みなさんどういう”サイト”で情報を確認するのかですとか、”分析”やら”可視”、”予測”あたりの記事を投稿していらっしゃることがわかります。”Python”を使った記事が多いようですね。

query=title:GMO



こちらに関しては、記事件数が55件と少なかったので、目視での確認も行ってみました。
“クラウド”が多く出てきているのは、GMOクラウドVPSやGMOアプリクラウドの設定に関する記事が多いため。
次点で印象に残る決済関係(“あおぞら”、”ネット”、”銀行”、”決済”など)に関しては、GMOあおぞらネットさんが公開している sunabarAPIを試してみた記事が多いためのようです。
目視確認と計算結果がおおよそ紐付いているので、それなりに正しく計算出来ていそうな気がします。

query=tag:Javascript



1000記事中に60記事も”React”が付いているのが特徴的でしょうか。
“Nodejs”(コード中で.を除去したので、正確にはNode.js)が上の方に出てきてるのも面白いです。
注目を浴びている関連技術を探すのに使えるかもしれません。

おわりに

形態素解析って結構めんどうなイメージがありましたが、APIを使うと楽に出来るもんですね!
分析対象の抽出方法を上手いこと調整すれば、より精度が上げられそうです。
今回はQiitaの記事を対象にしましたが、TwitterAPIを使ってつぶやきを抽出したり、小説をまるまる一冊分解析したりしてみても楽しそうです。今後も機会があったら色々と遊んでみようと思います。

それでは、ありがとうございました!