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を使って関連キーワードを抽出する方法でした。




2016-11-01

【Stripe】PHPで課金するための基本設定

課金サービスを簡単に組み込めるサービスとして、審査も必要がなくとても手軽な「stripe」に注目しています。
この記事を投稿する少し前まではトップページにはベータ版だとの記述がありましたが現在はそれもなくなり、本格的に日本でもリリースがされたようです。

そこで、今回は stripe で月額課金を利用するために必要な基本的な設定とアクセスキーの取得法を備忘録として投稿したいと思います。



1.まずはアカウントの作成

以下のURLからアカウントを作成しましょう

https://dashboard.stripe.com/register


2.月額課金するプランを作成

メニューリンクの中から「Plans」をクリックし、その後ページ右上にある「New」をクリックします。


以下のようなプラン作成フォームが表示されます。
最低限必要な項目は以下になります。

  1. ID (←プログラム上で利用する識別IDです。)
  2. Name (←課金名。見てわかりやすい名前をつけましょう)
  3. Currency (←通貨。JPYが日本円です。おそらくデフォルトです)
  4. Amount (←課金額。いくら課金するか?です)
  5. Interval (課金する間隔) 
入力したら、「create plan」 をクリックして保存します。


3.アクセスキーを取得する

ページ右上にある「Your Account」の中にある「Account Settings」をクリック。


現れたダイアログの中にある「API Keys」をクリックすると以下のようにアクセスキーが表示されます。

上がテスト用のキー。
下が本番用のキーになります。



以上がAPIに必要な設定&キーの取得になります。

実際にPHPに組み込むためにはライブラリが用意されていますのでそちらをつかうといいでしょう。

https://stripe.com/docs/libraries#php-library
https://github.com/stripe/stripe-php

Laravelを使っている場合はCashierというパッケージが本家Laravelによって提供されていますのでこちらを使う方がいいでしょう。

https://laravel.com/docs/5.3/billing#stripe-configuration


以上になります。

※それにしてもドンドン便利なサービスが増えてきていろいろな事が簡単にできるようになってきています。それだけ可能性が広がっているということなので今後も楽しみですね。^^