2016-11-10

Wikipediaを使って関連キーワード抽出プログラムを作ってみる

関連キーワードが必要になった

現在取り組んでいるプロジェクトの中で、キーワードを入力すると関連するキーワードを

「このキーワードもおすすめですよ」

という具合で表示する機能が必要になりました。

はじめはGoolgeのSuggestを利用すればいいかなと安易に考えていたのですが、この方法では関連するキーワードではなく、追加キーワードの提案という形になってしまいます。

実際の例をご覧ください ⇛ 「明石家さんま」をGoogle Suggestで検索

そうではなく、結果としては「明石家さんま」で検索すると「ビートたけし」や「タモリ」などといった関連するキーワードを取得したかったのでGoogle Suggest の利用は見送ることにしました。
(また、Googleに限らずAPIなどの提供は廃止されるリスクが常につきまとうという理由もありました。)

おもしろいアプローチを見つける

そこで、他の方法はないかとネットを探っているとひとつおもしろいアプローチをしている人がいました。それが以下のページです。

 [Yahoo!WebAPI+TwitterAPI]2つのAPIを組み合わせて関連キーワード抽出ツールを作ってみる

※ブログ記事、カッコ良かったのでオマージュさせていただきました。m_ _m


このページが提案している方法は以下になります。

1.まず Twitter API を使って検索したいキーワードのツイートを取得
2.Yahoo API のキーフレーズ抽出を使ってそのツイートから共通するキーワードを取得する
3.頻出する言葉が関連キーワード

つまり、検索するキーワードと一緒に使われている言葉を抽出するというアプローチです。

早速やってみた、、、しかし!

なるほど。
賢い人がいるものだなと感心し、実際に私もこのアプローチを試してみました。

・・・が!
結果はうまくいきませんでした。

なぜなら、現在Twitter に投稿されるものは無差別投稿しているものも多く、全く関連しないキーワードばかりが抽出されてしまったからです。

しかし、一緒に使われている言葉を抽出するというアプローチ自体はとても良い方法なのでなんとかTwitter以外の方法で考えてみることにしました。

YoutubeやHatena...
どれも納得できるような結果にはなりませんでした。

加えて、やはりAPIはそのうちにサービスが終了してしまうリスクも心にひっかかりこれら方法も断念しました。

そうだ wikipedia を使おう

そして、最終的に考えだしたのが Wikipedia を利用する方法でした。
流れとしては以下になります。

1.検索キーワードのことが書かれたwikipedia のページを読み込む
2.共通するキーワードを抽出(サイト内リンクのテキストを正規表現を使って取得)
3.集計して数が多いものを関連キーワードとする

この方法だと、APIが終了することはないですし読み込むページも1ページのみでいいのでレスポンスも早くすることができます。

さらに、関連語の抽出具合もより精度が上がったように思います。
以下は「明石家さんま」で検索した例です。
  • FNS27時間テレビ
  • ビートたけし
  • FNSの日
  • タモリ
  • 島田紳助
  • SMAP
  • さんま・中居の今夜も眠れない
  • フジテレビジョン 
  • 笑福亭鶴瓶
  • 所ジョージ 
※ちなみに以下のようなキーワード(リンク)は必要ないのでフィルターをかけて抽出しないようにしました。

1.Template: や Help: など wikipedia の特殊なリンク
2.年月日のみのリンク

ということで、このプログラムをクラス化しGitHubで公開していますので、実際のソースはそちらをご覧ください。

※ちなみに上記プログラムではHTTPアクセスにはGuzzleのバージョン6を利用しています。composerを利用してインストールする方法が楽かと思いますが、もしGuzzleを使いたくない人は file_get_contents() に書き換えて利用してみてください。

デモを見る


以上、Wikipediaを使って関連キーワードを抽出する方法でした。




0 件のコメント:

コメントを投稿