Linkifyが実現するスマートな検索体験~モバイル端末での検索,煩わしくないですか?~

この記事を読むのに必要な時間:およそ 3 分

Linkifyとは?

みなさんは,スマートフォンやタブレットなどのタッチスクリーン端末を使っていて,テキストの選択が不便だと感じたことはありませんか? たとえば,ニュースを読んでいて知らない人名を見つけたときや,文献を読んでいて知らない専門用語を見つけたとき,テキストを選択,コピー&ペーストして,検索することを煩わしく感じたことはありませんか?

Linkifyは,この問題を解決するために開発された,新しいモバイルアプリ・Webサイト向けの開発キット(SDK)です。ユーザが検索したくなるようなキーワードを機械学習によって自動的に認識し,リンクに変換することで,キーワードをタップするだけでGoogleやWikipedia,TwitterなどのさまざまなWebサイト上でキーワードを検索できるようにします図1)。また,Linkifyはすべて無償で利用することができます。

図1 キーワードを機械学習で自動認識→リンクへ自動変換
Linkifyはテキスト中の検索したくなるようなキーワードを自動的に認識し,リンクに変換する

Linkifyはテキスト中の検索したくなるようなキーワードを自動的に認識し,リンクに変換する

タップすると表示されるウィジェットからGoogle,WikipediaなどのWebサイトで検索ができる

タップすると表示されるウィジェットからGoogle,WikipediaなどのWebサイトで検索ができる

Linkifyは,数行のコードを追加するだけで,アプリ内のWebView注1やモバイルWebサイトに導入できます。さらに,Linkifyのリンク先にGoogle検索向けAdSenseを導入することで,モバイルアプリ・サイトのマネタイズの機会を増やすことができます。

注1)
iOSやAndroidなどのアプリの中にWebブラウザ機能をUIとして貼り付けるしくみ。

Linkifyの特徴

Linkifyの特徴として,次の3点を挙げることができます。

①簡単に導入できる

Linkifyは現在,iOS,Android端末のWebViewおよびWebブラウザをサポートしており,簡単に導入できます。Webサイト上でユーザ登録を行い,対応するコードを追加するだけで導入作業は完了です。本稿でも,後ほどAndroidアプリにおける具体的な導入方法を紹介します。

②アプリ/サイトをマネタイズできる

Linkifyを使って,あなたのモバイルサイトやアプリをマネタイズすることができます。現在,Googleの提供する検索向けAdSenseを用いて,ウィジェットから遷移できるGoogle検索結果ページに,あなたのAdSense IDで広告を貼り付けることができます。将来的には,Amazonや楽天などのアフィリエイトサービスを利用したマネタイズにも対応する予定です。

③柔軟にカスタマイズできる

Linkifyは,ユーザに表示するさまざまなUIのデザインを柔軟にカスタマイズできます。現在,リンクの色,太さ,スタイルを自由に選べるほか,数種類のテンプレートからウィジェットのデザインを選択し,カスタマイズできます図2)。

図2 専用のカスタマイズ画面から,ウィジェットやリンクの色をカスタマイズできる

図2 専用のカスタマイズ画面から,ウィジェットやリンクの色をカスタマイズできる

Linkifyを導入してみる

Linkifyは,iOSアプリ,Androidアプリ,モバイルWebサイト,Titanium Mobileアプリに簡単に導入できます。本稿では,Androidアプリでの導入方法を解説します。開発言語はAndroid標準のJavaを想定しています。

まずはLinkifyのWebサイトからユーザ登録を行い,APIキーを発行するためにアプリケーションを登録します。

LinkifyはWebブラウザ上のJavaScriptとして動作するため,WebViewを含むActivityクラスのonCreateメソッド内で,WebViewオブジェクトに対してJavaScriptを読み込む処理を書き加えます。必要なコードはWebサイトからコピー&ペーストすることができます。Android向けのコードサンプルはリスト1のようになります。

リスト1 Android向けLinkify組み込みコードの例

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript:(function() { " +
            "if (!window.linkifyLoaded) {" +
                "var d = document;" +
                "var s = d.createElement('script');" +
                "s.type = 'text/javascript';" +
                "s.src = 'http://www-static.linkify.mobi/api/linkify.js?key=(APIキー)';" +
                "d.getElementsByTagName('head')[0].appendChild(s);" +
                "window.linkifyLoaded = true;" +
            "}" +
        "})()");
    }
});

次に,Androidアプリ側のソースコードに実際にこのコードを組み込みます。WebViewを含むActivityクラスのonCreateメソッドにコードスニペットを貼り付けます。

これで導入は完了です。実際にアプリケーションを起動して,WebViewでさまざまなページにアクセスし,興味を引くようなキーワードがリンク化されているか確認してください。

GitHub上に,各種プラットフォームiOSAndroid向けに導入済みのアプリのソースコードを公開しています。自分のアプリでいきなり試すのはちょっと……という方も,ぜひサンプルアプリをビルドしてみていただければと思います。

Linkifyのテクノロジ

①機械学習によるキーワードの抽出

Linkifyは,慶應義塾大学での自然言語処理・機械学習の研究から生まれました。たとえば,日本に住んでいてテキスト中の「日本」という単語を検索したくなることはほとんどないと思いますが,知らない地名や行ったことのない地名であれば,検索したくなる可能性が高いと思います。私たちは,このような「ユーザが興味を持ちそうなキーワード」をWeb上の大量のデータを用いて,テキスト中から高精度に抽出する研究を行っています。

Linkifyでは,WikipediaをはじめとしたWeb上の大量のデータを指標化し,Random Forestという機械学習のアルゴリズムに入力することで,ユーザがキーワードを「おもしろいと思うかどうか」を認識し,キーワードを抽出しています。

Linkifyは現在,日本語と英語に対応しています。キーワード抽出アルゴリズムはそれぞれの言語に最適化されており,言語の特徴を利用して,「興味を持ちそうなキーワード」を抽出しています。

②リクエストの分散処理

Linkifyでは,ユーザのWebページを動的に解析し,即座にレスポンスを返す必要があります。私たちは,ユーザから受信した解析リクエストを分割し,複数台のサーバに分散して同時に処理させることで,高速な解析処理を実現しています。このクラウド上の解析クラスタ内では,自社で開発したMessagePack RPC実装注2を用いてコンポーネントのサービス化を行っています。これらの取り組みの結果,ほとんどの解析リクエストは50ミリ秒以内で処理できています。

サーバは,自社で構築したDevOpsツールPuppetおよびFabricを使用)を用いて,Linodeという安価かつ高速なIaaSクラウド上に構築しています。AWSなどと比較するとAPIは充実しているとは言えませんが,内製したDevOpsツールによってほとんどすべての処理を自動化して運用しています。また,補完的にAWSおよびDigitalOcean(SSDが利用できるクラウド)も利用しています。

注2)
MessagePack RPC実装はオープンソースで公開されています。
https://github.com/studio-ousia/mprpc

③Pythonの高速化

弊社では,メインの開発言語としてPythonを採用しています。Pythonは動的型付け言語であり,その実行速度はけっして高速とは言えません。このため,さまざまなライブラリやツールを用いることで高速化を図っています。

たとえば,頻繁に実行されるコードについては,Cython注3を用いてPythonコードをC/C++に変換して実行しています。また,gevent注4による並行プログラミングを導入することで,外部サービスとの通信の多いサーバサイド処理を非同期的に動作するように記述しています。

また,分散Webクローリングライブラリ注5や,geventでのソケットプーリングを行うライブラリ注6),日本語正規化を行うライブラリ注7などの内製したさまざまなPythonライブラリをオープンソースで公開しています。

注3)
Cythonは,Pythonコードを等価なC/C++コードに変換し高速化できるツール。独自文法の型アノテーションを追加したり,STLを利用したりすることで,PythonコードをほぼC/C++と同等な速度で動作させることができます。
注4)
geventは,並行プログラミングを利用したコードを効率的に記述できるライブラリ。greenletという軽量スレッド実装を用いて,同期的に記述したコードを非同期的に動作させることができます。
注5)
PiCrawler:https://github.com/studio-ousia/picrawler
注6)
gsocketpool:https://github.com/studio-ousia/gsocketpool
注7)
mojimoji:https://github.com/studio-ousia/mojimoji

Linkifyが実現する未来

私たちは,Linkifyの開発を通じて,モバイル端末のUXをより良いものにしていきたいと考えています。今後は,スマートフォン・タブレットだけでなく,画像からの文字認識を行う技術(OCR)と組み合わせて,Google Glassなどを使ったAR(拡張現実)環境での検索UXの向上に応用することも考えています。また,教育をはじめとしたさまざまな分野への応用の検討も始めています。

さいごに

Linkifyは,モバイルアプリ・サイトに新しいUXを提供する開発キットです。キーワードが自動的にリンク化されるため,ユーザはキーワードをタップするだけでWikipediaやGoogleなどのさまざまなサイトで検索ができます。導入も数行のコードを追加するだけで簡単にでき,さらにはGoogle検索向けAdSenseを用いたマネタイズもできます。また,Linkifyはすべて無償で利用できます。

Linkifyは,まだリリースされたばかりの新サービスですが,ぜひあなたのアプリ・サイトに導入して新しいモバイル体験をユーザに提供してみませんか? 簡単な導入のサポートなども対応可能ですので,ご興味のある方はお気軽にメールsupport@linkify.mobi),またはTwitter@LinkifyMobiでご連絡ください。

Entity Linking

テキスト中からキーワード(エンティティ)を抽出し,Wikipediaのような事典サイトにリンクをするという研究は,「Entity Linking」と呼ばれ,現在,学術的に幅広く研究が行われています。たとえば,アメリカ国立標準技術研究所(NIST)の主催するText Analytics Conference(TAC)と呼ばれる著名な国際会議では,2009年から,Entity Linkingが主要なテーマの1つとして取り扱われ,世界中の研究者がこの精度向上に取り組んでいます。

著者プロフィール

山田育矢(やまだいくや)

(株)Studio Ousia CTO

中学の頃からエンジニアとして活動。高校時に国際コンテストThinkQuestにて,銀賞を受賞。大学入学と同時に,(株)Newrongを起業し,P2P通信の基盤技術を開発。IPA未踏ソフトウェア創造事業,次世代ソフトウェア開発事業等に採択後,同社を(株)フラクタリストに売却し,取締役に就任。同社の株式上場を前に退社し,(株)Studio Ousiaを設立。

Twitter:@ikuyamada


伊藤友隆(いとうともたか)

(株)Studio Ousia エンジニア

中学の頃にインタラクティブなWebページの仕組みに興味を持ち,プログラミングを学び始める。大学・大学院時代はユビキタスコンピューティング分野で直感的な操作やサービス連携のためのミドルウェアの研究に従事。現在は,Studio Ousiaでおもにサーバサイドシステムの開発を担当。

Twitter:@tomotaka_ito

コメント

コメントの記入