PR TIMESデザイナー&エンジニアブログ BREAK TIMES

PR TIMES Developer Blog(デザイナー&エンジニアによる開発者ブログ)

PR TIMES Developer Blog

当ブログは下記URLに移転しました。
https://developers.prtimes.jp/

PR TIMESに検索サジェスト(入力補完) その1

PR TIMESエンジニアの山田です。

PR TIMESの検索にサジェスト(入力補完)機能を導入しましたので、そのあたりのことをまとめてみたいと思います。
少しでもPR TIMES内で検索をしやすくしようと考えていて、その一環となります。
f:id:breaktimes:20180627091314p:plain
いくつかの方法を考えたのですが、今回はGoogleのSuggest APIとNatural Language APIを利用してみました。

まずは検索ボックスに入力されたテキストをSuggest APIhttps://www.google.com/complete/search)に随時送信します。

$(‘#input-keyword').autocomplete({
  source: function(request, response) {
    $.ajax({
      url: "https://www.google.com/complete/search",
      data: {hl:'ja', client:'firefox', q: request.term},
      dataType: "jsonp",
      type: "GET",
      success :function(data) {
        //ここに取得後の処理
      }
    });
  },
  autoFocus: false,
  delay: 450,
  minLength: 3
});

ただ入力されるたびに送信しているとリクエストが膨れ上がってしまうので、minLengthで最低文字数を指定しdelayで送信を遅延させると良いです。
この例では入力から450ミリ秒後に送信するようにしています。
これによってある程度入力が完了してからの送信となり、無駄なリクエストを減らすことができました。

例えば「PR TIMES」という語句をSuggest APIに送信すると以下の10語が返却されてきます。
['pr times', 'pr times 料金', 'pr times ログイン', 'pr times 株価', 'pr times 評判', 'pr times 会社概要', 'pr times 採用', 'pr times ir', 'pr times tv', 'pr times スタートアップ']

通常であればこれで取得できているので問題ないのですが、PR TIMESでは様々な企業さまのプレスリリースを扱っているため、ネガティブなサジェスト(補完)は出したくありません。

そこでNatural Language APIの登場です。
このAPIを利用するためにはAPIキーが必要になるので、こちらより取得してください。
cloud.google.com


対象の言葉をNatural Language APIのanalyzeSentimentに送信すると、ポジティブ・ネガティブの度合いを判定することができます。
https://language.googleapis.com/v1/documents:analyzeSentiment

json形式でポジティブ・ネガティブ度合いの値が返却されます。
上記の「PR TIMES」に対する10語のスコアはそれぞれ以下の値が返却されました。
[0, 0, 0, 0.3, 0, 0.2, 0, 0.1, 0.1, 0]

ここでは値がすべてプラスになっていますが、値がマイナスとして返却されたものはネガティブと判定して、表示から除外します。
これによって希望通りネガティブな結果を出さないようになりました。

ただNatural Language APIには送る文章・言葉などは通常のテキストで、配列などが使えません。
今回のように10組の言葉があるとリクエストも一度に10回となり膨大に増えていってしまいます。
そのあたりのリクエストを減らす処理方法やNatural Language APIの詳細はまた次回に。