SE Can't Code

A Tokyo based Software Engineer. Not System Engineer :(

GoogleCustomSearchAPIでカテゴリー辞書を自動生成。

ナイーブベイズの学習用途として、まずはGoogleCustomSearchAPIを利用して文書カテゴリーを定義づける単語辞書を作った。最初は自分の手で静的に一つ一つ作っていこうとしたけれど、実際に辞書を手で作っていくと膨大な時間がかかってしまうことになり、僕はカテゴリー二つ目くらいで心が折れてしまった。

まず作りたかった辞書としては、自分で定めたカテゴリー(ex, スポーツ野球など)に対して頻出度の高い単語一覧というものになったので、「もうGoogle検索のTOP10ぐらいに出てくるWebページをクロールすればいいんじゃね?」ということで自動生成に走った。APIがあるだろうと思って調べてみたら、GoogleCustomSearchAPIというGoogle先生が提供しているAPIがあり、こいつにクエリキーワードを投げると上位10位の情報をJSONとかでギュッとしてくれるということで利用することにした。

ただし、GoogleCustomSearchAPIは無料枠に制約があって、なかなか辞書を作るには厳しかった。

GoogleCustomSearchAPIの制約(1日100リクエスト)
  • 1ページ10件
  • 10ページまでしか取得できない


実際に網羅性のあるカテゴリー辞書を作成しようとしてみると、僕の場合はカテゴリー数が200件ほどとなった。1カテゴリーは10ページぐらいから生成したかったので、単純に考えると1日あたり作成できるカテゴリーは10件となり、素直にAPIを叩いていると20日間かかってしまう。このAPIを叩くためにはGoogleアカウントに紐づくAPIKeyが必要となるが、このAPIを沢山作ってなんとかカテゴリー辞書を作らないといけないくて、結局面倒くさかった。それでも手で辞書を生成するよりマシなので、APIKeyを複数作ってなんとか辞書を作った。

以下のコードでカテゴリーに紐づく文字の集合が作られる。辞書の生成では前回記事のWebページスクレイピングを用いて単語の抽出を行っている。


ナイーブベイズの学習用途として生成する辞書なので、カテゴリーに対しては事前確率(全文書中カテゴリーに属する文書の割合)を算出し、単語に対しては単語の出現確率を算出している。前者に関しては、今回テスト用で一つのカテゴリーのみを対象としているため1となる。

,category,catParam,word,wordParam
1,IT関連ハッカソン,1,月,0.017478152
2,IT関連ハッカソン,1,ため,0.026217228
3,IT関連ハッカソン,1,的,0.014981273
4,IT関連ハッカソン,1,開発,0.04619226
5,IT関連ハッカソン,1,氏,0.013732834
6,IT関連ハッカソン,1,ハッカソン,0.169787765
7,IT関連ハッカソン,1,の,0.029962547
8,IT関連ハッカソン,1,フォロー,0.013732834
9,IT関連ハッカソン,1,勉強,0.037453184
10,IT関連ハッカソン,1,開催,0.104868914
11,IT関連ハッカソン,1,イノベーション,0.019975031
12,IT関連ハッカソン,1,ファッション,0.013732834
13,IT関連ハッカソン,1,会,0.04619226
14,IT関連ハッカソン,1,者,0.036204744
15,IT関連ハッカソン,1,参加,0.037453184
16,IT関連ハッカソン,1,年,0.021223471
17,IT関連ハッカソン,1,よう,0.029962547
18,IT関連ハッカソン,1,エンジニア,0.013732834
19,IT関連ハッカソン,1,Day,0.018726592
20,IT関連ハッカソン,1,禅,0.013732834
21,IT関連ハッカソン,1,関西,0.042446941
22,IT関連ハッカソン,1,企業,0.061173533
23,IT関連ハッカソン,1,IT,0.036204744
24,IT関連ハッカソン,1,分野,0.012484395
25,IT関連ハッカソン,1,世界,0.018726592
26,IT関連ハッカソン,1,方,0.013732834
27,IT関連ハッカソン,1,こと,0.034956305
28,IT関連ハッカソン,1,BEAMS,0.014981273
29,IT関連ハッカソン,1,日本,0.021223471
30,IT関連ハッカソン,1,Hack,0.018726592


今回は「IT関連ハッカソン」というカテゴリーで辞書を生成してみたが、ハッカソン・勉強・ITといった単語の出現確率が高く出ている。ゴミとなる単語が含まれているが、単語抽出の精度を上げれば、辞書としても良い感じになっていくと思われる。というか、この辞書を生成した後、ナイーブベイズで辞書も自動的に更新していくようにすればよくて、このGoogleCustomSearchAPIを叩いた生成方法は最初の一発のみとなるイメージ。

こんな感じでカテゴリーリストに作成したいカテゴリー名を入れてあげれば、ガンガン辞書にカテゴリーが埋まっていく。のだが、APIの制約があるために悲しい結果となる。(カテゴリー率を再計算する必要があるので。)Googleアカウントを自動作成してAPIKeyを作れればいいが、それやるとReCAPTCHAbot認定されて弾かれることになるので、現実的ではなくやめた。僕にReCAPTCHAを突破するスキルはまだないので。



ReCAPTCHA突破できるスキルがあったら海外逃亡出来るだろうか。
勉強のモチベーションが海外逃亡になっている今日この頃。

Remove all ads