Linkifyとは?
みなさんは,スマートフォンやタブレットなどのタッチスクリーン端末を使っていて,テキストの選択が不便だと感じたことはありませんか? たとえば,ニュースを読んでいて知らない人名を見つけたときや,文献を読んでいて知らない専門用語を見つけたとき,テキストを選択,コピー&ペーストして,検索することを煩わしく感じたことはありませんか?
Linkifyは,この問題を解決するために開発された,新しいモバイルアプリ・Webサイト向けの開発キット(SDK)です。ユーザが検索したくなるようなキーワードを機械学習によって自動的に認識し,リンクに変換することで,キーワードをタップするだけでGoogleやWikipedia,TwitterなどのさまざまなWebサイト上でキーワードを検索できるようにします(図1)。また,Linkifyはすべて無償で利用することができます。
図1 キーワードを機械学習で自動認識→リンクへ自動変換
Linkifyはテキスト中の検索したくなるようなキーワードを自動的に認識し,リンクに変換する

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

Linkifyは,数行のコードを追加するだけで,アプリ内のWebView(注1)やモバイルWebサイトに導入できます。さらに,Linkifyのリンク先にGoogle検索向けAdSenseを導入することで,モバイルアプリ・サイトのマネタイズの機会を増やすことができます。
Linkifyの特徴
Linkifyの特徴として,次の3点を挙げることができます。
①簡単に導入できる
Linkifyは現在,iOS,Android端末のWebViewおよびWebブラウザをサポートしており,簡単に導入できます。Webサイト上でユーザ登録を行い,対応するコードを追加するだけで導入作業は完了です。本稿でも,後ほどAndroidアプリにおける具体的な導入方法を紹介します。
②アプリ/サイトをマネタイズできる
Linkifyを使って,あなたのモバイルサイトやアプリをマネタイズすることができます。現在,Googleの提供する検索向けAdSenseを用いて,ウィジェットから遷移できるGoogle検索結果ページに,あなたのAdSense IDで広告を貼り付けることができます。将来的には,Amazonや楽天などのアフィリエイトサービスを利用したマネタイズにも対応する予定です。
③柔軟にカスタマイズできる
Linkifyは,ユーザに表示するさまざまなUIのデザインを柔軟にカスタマイズできます。現在,リンクの色,太さ,スタイルを自由に選べるほか,数種類のテンプレートからウィジェットのデザインを選択し,カスタマイズできます(図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上に,各種プラットフォーム(iOS,Android)向けに導入済みのアプリのソースコードを公開しています。自分のアプリでいきなり試すのはちょっと……という方も,ぜひサンプルアプリをビルドしてみていただければと思います。
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が利用できるクラウド)も利用しています。
③Pythonの高速化
弊社では,メインの開発言語としてPythonを採用しています。Pythonは動的型付け言語であり,その実行速度はけっして高速とは言えません。このため,さまざまなライブラリやツールを用いることで高速化を図っています。
たとえば,頻繁に実行されるコードについては,Cython(注3)を用いてPythonコードをC/C++に変換して実行しています。また,gevent(注4)による並行プログラミングを導入することで,外部サービスとの通信の多いサーバサイド処理を非同期的に動作するように記述しています。
また,分散Webクローリングライブラリ(注5)や,geventでのソケットプーリングを行うライブラリ(注6),日本語正規化を行うライブラリ(注7)などの内製したさまざまなPythonライブラリをオープンソースで公開しています。
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つとして取り扱われ,世界中の研究者がこの精度向上に取り組んでいます。