(58)【調査した分野】(Int.Cl.,DB名)
前記待ち行列に記憶されている前記1つまたは複数の文字および前記第1のサジェスト要求に含まれる前記ユーザ入力文字に少なくとも一部基づいて前記第2のサジェスト要求を生成することは、
前記待ち行列から前記1つまたは複数の文字を抽出し、
前記抽出された1つまたは複数の文字を、前記第1のサジェスト要求に含まれる前記ユーザ入力文字に関連付けられている前記文字と組み合わせて、文字列を形成し、
前記文字列を含むように前記第2のサジェスト要求を生成する
ことを含む請求項1に記載のシステム。
前記サジェストコンテンツは、予測される1組の1つまたは複数の文字と、予め記憶されている1組の1つまたは複数の文字と、1組の1つまたは複数の文字に関連付けられている訂正されたスペリングとの1または複数を備える請求項1に記載のシステム。
前記1つまたは複数のプロセッサは、さらに、前記サジェストコンテンツを表示する前に、前記サジェストコンテンツに対するフィルタリングを行うように構成されている請求項6に記載のシステム。
前記サジェストコンテンツに対するフィルタリングを行うことは、ある文字を削除するという選択の受信に対応する前記サジェストコンテンツの一部の削除を含む請求項7に記載のシステム。
前記待ち行列に記憶されている前記1つまたは複数の文字および前記第1のサジェスト要求に含まれる前記ユーザ入力文字に少なくとも一部基づいて前記第2のサジェスト要求を生成することは、
前記待ち行列から前記1つまたは複数の文字を抽出し、
前記抽出された1つまたは複数の文字を、前記第1のサジェスト要求に含まれる前記ユーザ入力文字に関連付けられている前記文字と組み合わせて、文字列を形成し、
前記文字列を含むように前記第2のサジェスト要求を生成すること
を備える請求項9に記載の方法。
前記サジェストコンテンツは、予測される1組の1つまたは複数の文字と、予め記憶されている1組の1つまたは複数の文字と、1組の1つまたは複数の文字に関連付けられる訂正されたスペリングとの1または複数を備える請求項9に記載の方法。
前記サジェストコンテンツに対するフィルタリングを行うことは、ある文字を削除するという選択の受信に対応する前記サジェストコンテンツの一部の削除を含む請求項15に記載の方法。
【発明を実施するための形態】
【0018】
本発明は、プロセス、装置、システム、物質の組成、コンピュータ可読記憶媒体上で具現化されるコンピュータプログラム製品、および/またはプロセッサ、例えばそこに接続されているメモリに記憶されている命令および/またはメモリによって提供される命令を実行するように構成されたプロセッサとしての形態を含めた多くの形態で実装することができる。本明細書では、これらの実装形態、または本発明が取ることができる任意の他の形態を、技法と呼ぶことがある。一般に、開示するプロセスのステップの順序は、本発明の範囲内で変更することができる。特に指示のない限り、タスクを実施するように構成されているものとして述べるプロセッサまたはメモリなどの構成要素は、所与の時間にタスクを実施するように一時的に構成された汎用構成要素、またはタスクを実施するように製造された専用構成要素として実装することができる。本明細書で使用するとき、用語「プロセッサ」は、コンピュータプログラム命令などのデータを処理するように構成された1つまたは複数のデバイス、回路、および/または処理コアを表す。
【0019】
以下、本発明の原理を例示する添付図面と共に、本発明の1つまたは複数の実施形態の詳細な説明を行う。そのような実施形態に関連付けて本発明を説明するが、本発明は、どの実施形態にも限定されない。本発明の範囲は、特許請求の範囲のみによって限定され、本発明は、多数の変形形態、修正形態、および均等形態を包含する。本発明を完全に理解できるように、以下の説明では多くの具体的な詳細を述べる。これらの詳細は例示の目的で提供されるものであり、本発明は、これらの具体的な詳細のいくつかまたは全てを含まなくても、特許請求の範囲に従って実施することができる。分かりやすくするために、本発明を不要に曖昧にしないように、本発明に関係する技術分野における既知の技術要素は詳細には説明していない。
【0020】
本明細書では、コンテンツのオートコンプリートを実施する実施形態を述べる。様々な実施形態において、文字(または1組の文字)のユーザ入力に応答して、クライアントデバイスでサジェスト要求が生成され、次いでサーバに送信される。サーバは、サジェスト要求を処理し、サジェスト要求に関連付けられる文字に基づいて、(いくつかの実施形態では、他の文脈情報に加えて)サジェストコンテンツを返す。様々な実施形態において、ユーザが入力した文字それぞれに関するサジェストコンテンツが、それらの文字がクライアントデバイスで入力ボックスに現れるのと同じシーケンスでサーバによって生成されることを保証するために、ロッキングメカニズムが使用される。その結果、サーバは、ユーザが入力した文字のシーケンス通りのサジェストコンテンツを返す。ユーザ入力文字を正しいシーケンスで処理することによって、サーバは、(例えば先に入力された文字に基づいて)後に入力された文字に関連付けられる適切な文脈情報を検討することが可能であり、および/または、乱れたシーケンスでクライアントデバイスに到着し、対応するユーザ入力文字に明確には関連付けられないサジェストコンテンツの送信を避けることが可能である。
【0021】
図1は、コンテンツのオートコンプリートを実施するためのシステムの一実施形態を示す図である。この例では、システム100は、クライアントデバイス102と、ネットワーク104と、サーバ106と、データベース108とを含む。
【0022】
クライアントデバイス102は、ネットワーク104を介してサーバ106と通信するように構成されている。クライアントデバイス102は、スマートフォンとして図示されているが、クライアントデバイス102の他の例として、ラップトップコンピュータ、デスクトップコンピュータ、モバイルデバイス、タブレットデバイス、および/または任意の他の計算デバイスが挙げられる。クライアントデバイス102は、ユーザが文字を入力することができる入力インターフェース(例えば物理的なキーボードまたはタッチスクリーン)を含み、また、ユーザのために情報を表示することができるディスプレイインターフェースも含む。様々な実施形態において、クライアントデバイス102は、クライアントデバイス102でコンテンツのオートコンプリートを実施するためにサーバ106と通信するように構成される。様々な実施形態において、コンテンツのオートコンプリートとは、ユーザが既に入力しているコンテンツに基づいて、ユーザが入力したい文字および/または単語を予測することを表す。様々な実施形態において、クライアントデバイス102にインストールされているいくつかのアプリケーション(例えば、サーチエンジン、テキストエディタ、ウェブブラウザ、電子メールプログラム)は、ユーザが文字/単語を入力することができる入力ボックスまたはフィールドを含む。ユーザが入力した文字(または単語や語句など1組の文字)に応答して、クライアントデバイス102上で動作しているオートコンプリート機能を備えるアプリケーションは、入力された文字をパスパラメータとして含むサジェスト要求を生成する。より詳細には後述するように、サジェスト要求内のパスパラメータは、サーバ106によって抽出および処理されるパラメータである。様々な実施形態において、クライアントデバイス102でステータスロックが生成され、これを使用して、サジェスト要求をサーバ106に送信することができる時を制御する。様々な実施形態において、クライアントデバイス102で生成されるサジェスト要求は、ステータスロックがそのサジェスト要求のために取得されているときにのみ、サーバ106に送信される。様々な実施形態において、一度に1つのサジェスト要求のみがステータスロックを取得することができる。あるサジェスト要求がステータスロックを取得することが可能であるとき、そのサジェスト要求が、クライアントデバイス102からサーバ106に送信される。
【0023】
サーバ106は、クライアントデバイス102などのクライアントデバイスからサジェスト要求を受信するように構成されている。受信されたサジェスト要求に関して、サーバ106は、サジェスト要求のパスパラメータから文字(または1組の文字)を抽出し、抽出された文字に対応するサジェストコンテンツを決定するように構成されている。サーバ106は、抽出された文字に対応するサジェストコンテンツを決定するために、データベース108に記憶されているデータを使用することができる。例えば、データベース108は、1人または複数のユーザが以前に入力した文字に関連付けられている履歴データ、一般的な単語または語句、1人または複数のユーザのために特別に記憶されている情報、および/またはオートコンプリートに使用される他の技法を記憶することができる。サーバ106は、抽出された文字に関する適切なサジェストコンテンツを決定すると、サジェストコンテンツをクライアントデバイス102に返信するように構成され、クライアントデバイス102上で動作しているオートコンプリート機能を備えるアプリケーションが、少なくともサジェストコンテンツのサブセットをユーザに表示する。例えば、サジェストコンテンツは、サジェスト要求内の文字に一般的に続く/サジェスト要求内の文字を含む文字または単語、サジェスト要求内の文字を含む記憶されている情報、およびサジェスト要求内の文字を含むスペルミスのある単語の訂正されたスペリングを含むことがある。サジェストコンテンツをユーザに表示することによって、ユーザは、採用するサジェストコンテンツを容易に選択し、サジェストされた文字を手入力するのにかかる時間を節約することが可能になることがある。クライアントデバイス102が、サジェスト要求に関して送信されたサジェストコンテンツを受信した後、ステータスロックが解除され、別のサジェスト要求がステータスロックを取得可能になる。
【0024】
サジェスト要求をクライアントデバイス102からサーバ106に送信することができる時を調整するためにステータスロックを使用することによって、1度に1つのサジェスト要求しかサーバ106に送信され得ないことが保証される。したがって、各サジェスト要求がサーバ106によって処理された後に、(その後ユーザが入力した文字を含む)次のサジェスト要求をサーバ106に送信し、サーバ106によって処理することができる。さらに詳細には後述するように、そのような調整は、サーバ106が、ユーザ入力文字に対応するサジェストコンテンツを、クライアントデバイス102によってユーザ入力文字が受信された順序(シーケンス)を乱して決定することがないようにする。
【0025】
図2Aは、コンテンツのオートコンプリートを実施するためのプロセスの一実施形態を示すフローチャートである。いくつかの実施形態では、プロセス200は、
図1のシステム100で実施される。いくつかの実施形態では、プロセス200は、
図1のシステム100のクライアントデバイス102で実施される。例えば、プロセス200は、オートコンプリートをサポートし、クライアントデバイス102上で動作するソフトウェアの一部として実施することができる。
【0026】
プロセス200は、少なくとも1つのユーザ入力文字(または1組の文字)を含むサジェスト要求をサーバに送信するのに適切な時を決定するためにロッキングメカニズムを使用することを示す。後述するように、ロッキングメカニズムは、ユーザ入力文字に基づいて生成されたサジェスト要求が、クライアントの入力ボックスにそれらの文字が現れるようにユーザが意図したのと同じシーケンスで、クライアントデバイスからサーバに送信されることを保証する。
【0027】
ステップ202では、サーバへの要求の送信を制御するように構成されているステータスロックが生成される。いくつかの実施形態では、ステータスロックは、何らかのトリガに応答してクライアントデバイスで生成されることがある。トリガは、(例えば物理的なキーボードまたはタッチスクリーンキーパッドを介して)ユーザが文字を入力し始めるという標示に関連付けられるように構成されることがある。例えば、トリガは、(例えばサーチエンジンまたは連絡先リストを呼び出す)アプリケーションの入力ボックスへのユーザからの初期対話をクライアントデバイスで受信することに関連付けられる標示である。
【0028】
例えば、ステータスロックは、クライアントデバイスで動作するクライアントアプリケーションにおけるJavaScript(登録商標)グローバル変数として実装される。ロックオブジェクトなど他の実装形態も可能である。グローバル変数に関連付けられる第1の値は、ステータスロックがサジェスト要求のために取得されていることを示すように構成されることがあり、グローバル変数に関連付けられる第2の値は、ステータスロックを取得可能であることを示すように構成されることがある。例えば、グローバル変数の値が0に設定される場合、ステータスロックは、サジェスト要求のために取得可能であるとみなされることがあり、グローバル変数の値が1に設定されている場合、ステータスロックは、あるサジェスト要求のために取得されているとみなされることがある。
【0029】
いくつかの実施形態では、(各入力ボックスに関連付けられるように)ただ1つのステータスロックが生成されることがあり、それにより、一度に1つのサジェスト要求のためにのみステータスロックを取得することができる。
【0030】
ステップ204では、ユーザ入力文字を含む第1のサジェスト要求が生成される。
【0031】
クライアントデバイスで動作するアプリケーションによって文字が受信されると、入力された文字をパスパラメータとして含むサジェスト要求が生成される。いくつかの実施形態では、単一の文字ではなく、(例えばすぐに続けて入力される)単語や語句など1組の文字がサジェスト要求に含まれることがある。サジェスト要求は、(例えばネットワークを介して)遠隔サーバに送信されるように構成される。サーバは、サジェスト要求を受信し、その要求を処理するように構成される。例えば、サーバは、要求のパスパラメータに含まれる文字(または1組の文字)を抽出することによってサジェスト要求を処理し、抽出された文字に少なくとも基づいてサジェストコンテンツを生成することができる。例えば、サジェストコンテンツは、サジェスト要求から抽出された文字に何らかの文字を関連付ける履歴ユーザ入力パターンに基づくことがある。
【0032】
ステップ206では、ステータスロックが利用可能であるという標示に応答して、ステータスロックが取得され、第1のサジェスト要求がサーバに送信される。
【0033】
様々な実施形態において、クライアントデバイスからサーバにサジェスト要求を送信することができるようになる前に、そのサジェスト要求のためにステータスロックを取得すべきである。したがって、サジェスト要求が生成された後、ステータスロックが(別のサジェスト要求によって)既に取得されているかどうか判断するためにチェックが行われる。ステータスロックが別のサジェスト要求によって取得されていない場合には、現サジェスト要求のためにステータスロックを取得することができる。現サジェスト要求のためにステータスロックが取得された後、そのサジェスト要求をサーバに送信することができる。
【0034】
例えば、ステータスロックに関連付けられるグローバル変数が値0に設定されていると判断された場合には、現サジェスト要求のためにステータスロックを取得することができると判断される。逆に、ステータスロックに関連付けられるグローバル変数が値1に設定されていると判断された場合には、現サジェスト要求のためにステータスロックを取得することができないと判断される。
【0035】
ステップ208では、文字に対応するサジェストコンテンツをサーバから受信したことに応答して、ステータスロックが解除される。
【0036】
要求の処理に少なくとも一部基づいてサーバによって決定されたサジェストコンテンツが、クライアントデバイスで受信される。例えば、サジェストコンテンツは、要求に含まれている文字をコンプリート/補完/補足するために使用することができる個々の文字または1組の文字を含むことがある。例えば、サジェストコンテンツは、要求に含まれている文字から始まる一般的な単語を含むことがあり、または要求に含まれている1組の文字の正しいスペリングを含むことがある。クライアントデバイスは、サジェストコンテンツをユーザインターフェースで表示することができ、ユーザは、入力ボックスで、採用するサジェスト文字および/または1組の文字を選択することができる。時として、サジェストコンテンツが受信された後、ステータスロックが解除されることがある(例えば、グローバル変数の値が、ステータスロックが利用可能であることを示す値に変更されることがある)。
【0037】
したがって、上のプロセス200は、サジェスト要求がサーバに送信される時を制御するためにステータスロックを使用する技法を表す。ユーザが入力した文字に基づいてサジェスト要求が生成された後、そのサジェスト要求のためのステータスロックが取得され、サジェスト要求がサーバに送信される。サジェスト要求がステータスロックを取得した後、他の(その後に生成された)サジェスト要求はステータスロックを取得することができず、したがってそれらのサジェスト要求をサーバに送信することはできない。ステータスロックを取得しているサジェスト要求に関するサジェストコンテンツをサーバが返信した後で初めて、ステータスロックを取得し、その後、そのサジェスト要求をサーバに送信するために、他のサジェスト要求のためのステータスロックを解除(発行)することができる。したがって、このプロセスは、ユーザが文字を入力したシーケンス通りにサーバからサジェスト情報を受信することを容易にする。
【0038】
いくつかの実施形態では、プロセス200は、さらに、空の待ち行列を作成することを含む。後述するように、待ち行列は、クライアントデバイスでユーザが既に入力したが、サジェスト要求によってサーバにまだ渡されていない文字を記憶するためにクライアントデバイスで保守される。
【0039】
いくつかの実施形態では、例えば、(例えば物理的なキーボードを介して、またはタッチスクリーンキーパッドを介して)ユーザが文字を入力し始めるという標示に関連付けられるトリガに応答してステータスロックを生成することに加えて、(例えば同じトリガに応答して)空の待ち行列を生成することもできる。ユーザがクライアントデバイスに文字(または1組の文字)を入力すると、サジェスト要求が生成される。しかし、ステータスロックが別のサジェスト要求のために取得されているので現サジェスト要求をサーバに送信することができない場合、文字は、待ち行列に記憶されることがある。複数の文字または複数組の文字を待ち行列に記憶することができる。文字および1組の文字は、ユーザがそれらの文字を入力したシーケンスおよび/またはそれらの文字が入力ボックス内に現れるように意図されたシーケンスを保存する様式で、および/またはそのようなシーケンスを保存するメタデータを用いて待ち行列に記憶することができる。ステータスロックが解除されて利用可能になると、1つまたは複数の文字を待ち行列から抽出して、サーバに送信されるサジェスト要求に含めることができる。例えば、待ち行列は、アレイデータ構造を使用して実装することができる。
【0040】
図2Bは、待ち行列を使用するプロセスの一実施形態を示すフローチャートである。いくつかの実施形態では、プロセス250は、
図1のシステム100で実施される。いくつかの実施形態では、
図2Aのプロセス200のステップ206は、プロセス250で実施される。
【0041】
ステップ2030では、ユーザ入力文字を含む第1のサジェスト要求のためにステータスロックを取得することができるかどうか判断される。第1のサジェスト要求のためにステータスロックを取得することができる場合には、ステップ2031が実行され、そうでない場合には、ステップ2032が実行される。
【0042】
ステップ2031では、第1のサジェスト要求がサーバに送信される。
【0043】
サジェスト要求をサーバに送信することができるようになる前に、サジェスト要求のためにステータスロックを取得する必要がある。したがって、クライアントデバイスは、第1のサジェスト要求をサーバに送信する前に、第1のサジェスト要求のためにステータスロックを取得することができるかどうかチェックする。次いで、第1のサジェスト要求のためにステータスロックを取得することができる場合、第1のサジェスト要求をサーバに送信することができる。
【0044】
ステップ2032では、第1のサジェスト要求に含まれている文字が待ち行列に記憶される。
【0045】
ステータスロックが別のサジェスト要求のために既に取得されていると判断された場合には、この時点では第1のサジェスト要求のためにステータスロックを取得することができず、したがって第1のサジェスト要求をサーバに送信することはできない。したがって、第1のサジェスト要求のパスパラメータに含まれている文字を待ち行列に記憶することができる。
【0046】
図3Aは、コンテンツのオートコンプリートと共に待ち行列を使用するためのプロセスの一実施形態を示すフローチャートである。いくつかの実施形態では、プロセス300は、
図1のシステム100で実行される。いくつかの実施形態では、プロセス300は、
図1のシステム100のクライアントデバイス102で実施される。いくつかの実施形態では、プロセス300は、
図2Aのプロセス200と連動して使用される。
【0047】
プロセス300は、待ち行列の使用の一例を示し、
図2Aのプロセス200で述べたように第1のサジェスト要求などのサジェスト要求をサーバに送信する前に、待ち行列が空である(すなわち、サーバにまだ送信されていないユーザ入力文字を記憶していない)か、空でない(すなわち、サーバにまだ送信されていないユーザ入力文字を記憶している)かを判断するためにチェックされる。例えば、プロセス300は、
図2Aのプロセス200のステップ206の前に実施される。
【0048】
ステップ302では、待ち行列が空かどうか判断される。待ち行列が空であると判断された場合、制御はステップ304に進む。そうでない場合、制御はステップ306に進む。例えば、
図2Aのプロセス200のステップ206でステータスロックが第1のサジェスト要求のために取得された後、待ち行列が空であるか否かチェックされることがある。上述したように、待ち行列は、クライアントデバイスでユーザが前に入力したが、サーバにまだ送信されていない文字(または1組の文字)を含む。
【0049】
ステップ304では、ステータスロックが第1のサジェスト要求のために取得され、第1のサジェスト要求がサーバに送信される。待ち行列が空である場合、これは、ユーザが入力した全ての文字がそれまでにサーバに送信されていることを示す。この時点で、(ステータスロックが利用可能であると仮定して)ステータスロックが第1のサジェスト要求のために取得され、第1のサジェスト要求をサーバに送信することができる。
【0050】
ステップ306では、第2のサジェスト要求が生成され、ここで、第2のサジェスト要求に関連付けられるパスパラメータは、第1のサジェスト要求に関連付けられるパスパラメータに含まれる文字と、待ち行列に記憶されている1つまたは複数の文字とを含む。待ち行列が空でなく、1つまたは複数の文字を記憶していると判断された場合、これは、サーバにまだ送信されていない少なくとも1つのユーザ入力文字が存在することを示し、したがって、新規のサジェスト要求(これは、
図2、
図2B、
図3A、および
図3Bの第1のサジェスト要求から区別するために、時として「第2のサジェスト要求」と呼ぶ)が生成される。第2のサジェスト要求のパスパラメータは、第1のサジェスト要求のパスパラメータに含まれている文字(または1組の文字)と、待ち行列に記憶されている全ての文字とを含む。すなわち、第2のサジェスト要求のパスパラメータは、第1のサジェスト要求のパスパラメータからの文字と、待ち行列に現在記憶されている文字との組合せを含む。
【0051】
ステップ308では、ステータスロックが第2のサジェスト要求のために取得され、第2のサジェスト要求がサーバに送信される。第2のサジェスト要求をサーバに送信するために、第2のサジェスト要求のためにステータスロックを取得することができるかどうか判断される。ステータスロックが利用可能である場合、ステータスロックが第2のサジェスト要求のために取得されて、第2のサジェスト要求をサーバに送信することができる。いくつかの実施形態では、第2のサジェスト要求のパスパラメータに含まれている文字に対応するサジェストコンテンツがクライアントデバイスで受信された後、次のサジェスト要求が使用できるようにステータスロックを解除することができる。
【0052】
ステップ310では、待ち行列がクリアされる。待ち行列に記憶されていた文字が抽出され、第2のサジェスト要求に含まれたので、待ち行列はクリアされる(例えば、待ち行列に記憶されている文字が廃棄され、クリアされた待ち行列は空になる)。
【0053】
図3Bは、待ち行列から抽出された文字を含むサジェスト要求を生成するプロセスの一実施形態を示すフローチャートである。いくつかの実施形態では、プロセス350は、
図1のシステム100で実行される。いくつかの実施形態では、
図3Aのプロセス300のステップ306は、プロセス350で実施される。
【0054】
ステップ3061では、待ち行列に記憶されている1つまたは複数の文字は、それら1つまたは複数の文字が待ち行列に記憶された順序に少なくとも一部基づいて抽出される。
【0055】
サーバに送信されていない文字を待ち行列が記憶していることが分かったとき、それらの文字は、それらの文字が待ち行列に記憶されたシーケンスで待ち行列から抽出することができる。様々な実施形態において、文字は、ユーザがそれらの文字をクライアントデバイスに入力したシーケンスで待ち行列に記憶される。すなわち、待ち行列から文字を抽出する順序またはシーケンスは、ファーストインファーストアウト方式である。
【0056】
例えば、文字が、a→b→c→dの順序で待ち行列に記憶されると仮定する。この例では、待ち行列から文字が抽出される順序も、a→b→c→dである。
【0057】
ステップ3062で、抽出された1つまたは複数の文字が、第1のサジェスト要求に関連付けられる文字と組み合わされて、文字列を形成する。
【0058】
ファーストインファーストアウトの順序で待ち行列から抽出された文字が、第1のサジェスト要求(のパスパラメータ)に含まれている文字と組み合わされて、文字列を構成する。いくつかの実施形態では、第1のサジェスト要求に関連付けられる文字は、待ち行列から抽出された文字の後に置かれる。
【0059】
前述の例を続けると、第1のサジェスト要求に関連付けられる文字が「e」であり、待ち行列から抽出される文字は、上述したように「a」、「b」、「c」、および「d」であると仮定する。この例では、待ち行列から抽出される文字と、第1のサジェスト要求に関連付けられる文字とから構成される文字列は、「abcde」となる。サーバは、文字列を処理するとき、文字列に含まれていたのと同じシーケンスで文字を検討する。したがって、この例では、サーバは、a→b→c→d→eの順序に基づいてサジェストコンテンツを決定する。
【0060】
ステップ3063では、文字列に少なくとも一部基づいて第2のサジェスト要求が生成される。いくつかの実施形態では、第2のサジェスト要求は、文字列を備えるようにパスパラメータが修正された第1のサジェスト要求を含む。いくつかの実施形態では、第2のサジェスト要求は、文字列を含むように設定されているパスパラメータを含む新規のサジェスト要求である。
【0061】
いくつかの実施形態では、第2のサジェスト要求を送信する前に、待ち行列内の全ての文字がサジェスト要求のパスパラメータに追加されたことを保証するために待ち行列を再チェックすることができる。
【0062】
図4は、待ち行列に記憶されている1つまたは複数の文字をサーバに送信するために予め設定された待機期間を使用するプロセスの一実施形態を示すフローチャートである。いくつかの実施形態では、プロセス400は、
図1のシステム100で実行される。いくつかの実施形態では、プロセス400は、
図1のクライアントデバイス102で実行される。
【0063】
いくつかの実施形態では、ユーザが文字を入力し、それが第1のサジェスト要求の生成をトリガするまでは待ち行列が空にされないので、待ち行列に記憶されている文字は、長期間サーバに送信されない、またはトリガが生じないので全く送信されないことがある。そのようなトリガが生じるのを無期限に待機するのではなく、いくつかの実施形態では待機期間を予め設定することができ、それにより、後述するように、その待機期間が経過した後、待ち行列が空にされていない(すなわち待ち行列内の文字がサーバに送信されていない)場合には、サジェスト要求が生成されて、待ち行列の文字をサーバに渡すために使用される。
【0064】
ステップ402では、待ち行列に関連付けられる予め設定された待機期間が経過していると判断される。いくつかの実施形態では、第1の文字が空の待ち行列に追加された後、または待ち行列が空にされた後、タイマが始動される。予め設定された待機期間は、システム管理者が各待ち行列に関して特定的に、または複数の待ち行列に関して全般的に設定する時間でよい。例えば、新規の文字が待ち行列に追加される操作や、待ち行列内の文字が抜き出されてサジェスト要求に含まれる操作など、特定の操作に応答して、タイマがゼロにリセットされる。しかし、タイマをリセットするためにそのような操作が行われないまま、予め設定された待機期間に関連付けられる時間にタイマが達した場合には、新規のサジェスト要求(これは、上の
図2A、
図2B、
図3A、および
図3Bで述べたサジェスト要求から区別するために、時として「第3のサジェスト要求」と呼ぶ)が生成される。
【0065】
ステップ404では第3のサジェスト要求が生成され、ここで、第3のサジェスト要求は、待ち行列に記憶されている1つまたは複数の文字を含む。待ち行列内の文字は、待ち行列を空にするためのトリガが生じない場合、しばらくはサーバに送信されないことがある。例えば、トリガが生じないことは、クライアントデバイスにユーザが新たに文字を入力しないこと、および/または記憶されている文字が含まれることがあるサジェスト要求が生成されないことに関連付けられることがある。タイマが、予め設定された待機期間に関連付けられる時間に達すると、新規のサジェスト要求が生成されて、待ち行列に記憶されている文字をサーバに渡すために使用される。待ち行列の全ての文字が、第3のサジェスト要求のパスパラメータに含まれることがある。
【0066】
ステップ406では、ステータスロックが第3のサジェスト要求のために取得され、第3のサジェスト要求がサーバに送信される。
【0067】
ステップ408では、待ち行列がクリアされる。
【0068】
第3のサジェスト要求のためにステータスロックの取得が試行される。(例えばステータスロックが利用可能になっているので)第3のサジェスト要求のためにステータスロックを取得することができると判断されるとき、第3のサジェスト要求がサーバに送信され、待ち行列がクリアされる。そうではなく、ステータスロックが別のサジェスト要求のために取得されている場合、ステータスロックが解除され、したがって取得することができるようになるまで、第3のサジェスト要求は、ステータスロックの取得を待機してから再試行する。
【0069】
例えば、文字a、b、c、およびdが、a→b→c→dの順序で待ち行列に入れられると仮定する。予め設定された待機期間中、待ち行列に新規の文字は追加されず、サジェスト要求によって待ち行列から文字が抽出されることもない。したがって、予め設定された待機期間の経過後、第3のサジェスト要求が生成されることがあり、第3のサジェスト要求のパスパラメータが「abcd」に設定される。次いで、第3のサジェスト要求のためにステータスロックを取得できると、第3のサジェスト要求がサーバに送信される。
【0070】
第3のサジェスト要求がサーバに送信された後、パスパラメータの文字に対応するサジェストコンテンツが、サーバによって返信されて、クライアントデバイスでユーザに提示される。この時点で、ステータスロックを解除することができ、これにより、他のサジェスト要求がステータスロックを取得できるようになる。
【0071】
いくつかの実施形態では、プロセス400は、さらに、サーバによって送信されたサジェストコンテンツをユーザに提示する前に、サジェストコンテンツに対するフィルタリングを行うことを含む。サーバから受信されたサジェストコンテンツを表示する前に、例えば、サジェストコンテンツのサブセットを、表示するものとして決定することができ、および/または少なくともサジェストコンテンツのサブセットを削除する、または表示せずに隠すことができる。例えば、あまりに多くのサジェスト文字が一度に表示されてユーザが当惑しないように、サジェストコンテンツの最初の5文字のみを抽出して、ユーザのために表示することができる。さらに、例えば、サジェスト要求が送信されたので、文字を削除することができる。例えば、前にユーザが入力ボックスに入力した文字「a」をユーザが削除したが、サーバに送信されたサジェスト要求のパスパラメータには文字「a」が含まれていた場合、この時点で、サジェストコンテンツを表示する前に文字「a」に対応するサジェストコンテンツを削除するという対応する操作が行われることがある。
【0072】
いくつかの実施形態では、待ち行列に記憶されている文字が編集される。例えば、文字「c」が、ユーザ入力文字中で文字「a」と文字「b」の間に挿入されると仮定する。文字「a」と文字「b」が依然として待ち行列に記憶されている(すなわち、文字「a」と文字「b」がサーバにまだ送信されていない)と仮定する。そこで、待ち行列内で文字「a」および文字「b」を検索し、次いで、文字「a」の後かつ文字「b」の前に文字「c」を挿入するという対応する操作が行われる。
【0073】
図5は、コンテンツのオートコンプリートを実施するためのプロセスの一実施形態を示すフローチャートである。いくつかの実施形態では、プロセス500は、
図1のシステム100で実行される。いくつかの実施形態では、プロセス500は、
図1のクライアントデバイス102で実行される。
【0074】
プロセス500は、
図2Aのプロセス200と、
図3Aのプロセス300と、
図4のプロセス400とを組み込む一例を述べる。
【0075】
ステップ501では、ステータスロックおよび待ち行列が生成される。いくつかの実施形態では、ステータスロックと待ち行列はどちらも、クライアントデバイスで動作するアプリケーションに関連付けられる入力ボックスとの初期ユーザ対話など、トリガに応答して生成することができる。生成された待ち行列は、文字が待ち行列に記憶されることが決定されるまでは空である。
【0076】
ステップ502では、ユーザ入力文字を含む第1のサジェスト要求が生成され、ここで、ユーザ入力文字は、ユーザが生成し、クライアントデバイスで受信される。
【0077】
ステップ503では、第1のサジェスト要求のためにステータスロックを取得することができるかどうか判断される。ステータスロックが利用可能であり、第1のサジェスト要求のために取得することができる場合、制御はステップ504に進む。そうでない場合、制御はステップ510に進む。
【0078】
ステップ504では、待ち行列が空か否かが判断される。待ち行列が空であると判断された場合、制御はステップ505に進む。そうでない場合、制御はステップ506に進む。
【0079】
ステップ505では、第1のサジェスト要求がサーバに送信される。
【0080】
ステップ506では、待ち行列から文字が抽出される。待ち行列に記憶されている文字は、待ち行列に記憶されたのと同じ順序で抽出されて、入力ボックスにそれらの文字が表示されるようにユーザが意図したシーケンスの順序を保存する。
【0081】
ステップ507では、抽出された文字が、第1のサジェスト要求に関連付けられるユーザ入力文字と組み合わされて、文字列を形成する。
【0082】
ステップ508では、文字列を含む第2のサジェスト要求が生成される。いくつかの実施形態では、パスパラメータとして文字列を使用する新規のサジェスト要求が生成される。いくつかの実施形態では、第1のサジェスト要求のパスパラメータが改訂されて、文字列となり、この改訂された第1のサジェスト要求を、時として第2のサジェスト要求と呼ぶ。
【0083】
ステップ509では、第2のサジェスト要求がサーバに送信され、待ち行列がクリアされる。第2のサジェスト要求を送信する前、ステータスロックを取得することができるかどうか判断される。取得することができる場合、ステータスロックが第2のサジェスト要求のために取得され、その後、第2のサジェスト要求がサーバに送信される。
【0084】
ステップ510では、ユーザ入力文字が待ち行列に記憶される。
【0085】
ステップ511では、予め設定された待機期間が経過しているかどうか判断される。予め設定された待機期間が経過している場合、制御はステップ512に進む。そうでない場合、制御はステップ511に進む。
【0086】
ステップ512では、待ち行列から抽出された文字を含む第3のサジェスト要求が生成される。
【0087】
ステップ513では、第3のサジェスト要求のためにステータスロックを取得することができるかどうか判断される。ステータスロックを取得することができる場合、制御はステップ514に進む。そうでない場合、制御はステップ513に進む。
【0088】
ステップ514では、第3のサジェスト要求がサーバに送信され、待ち行列がクリアされる。
【0089】
ステップ515では、サーバによって返信されたサジェストコンテンツが受信され、ステータスロックが解除される。
【0090】
ステップ516では、サジェストコンテンツに対してフィルタリングが行われ、フィルタリング後のサジェストコンテンツがユーザに提示される。
【0091】
以下は、プロセス500を適用する一例である。
【0092】
ユーザAが、ネットワークに接続してコンテンツのオートコンプリートも行うように構成されたクライアントデバイスで動作するアプリケーションに文字を入力している。ユーザAがクライアントデバイス上でアプリケーションXを開くとき、ステップ501に従って、クライアントデバイスでステータスロックおよび空の待ち行列が生成される。
【0093】
ユーザAが、アプリケーションXで、「王菲[Wang Fei]」という名前の自分の友人を検索したいとする。ユーザAは、まず、アプリケーションXに関連付けられる入力ボックスに文字「w」を入力する。ステップ502に基づいて、ユーザAがクライアントデバイスに「w」を入力したのに応答して、クライアントデバイスで第1のサジェスト要求が生成され、ここで、第1のサジェスト要求のパスパラメータが文字「w」を含む。
【0094】
ステップ503に従って、ステータスロックが利用可能であり、第1のサジェスト要求のためにステータスロックを取得することができるかどうか判断される。以下の2つの可能なシナリオが生じ得る。
【0095】
1)ステータスロックが利用可能である場合、第1のサジェスト要求のためにステータスロックを取得することができるかどうか判断される。
【0096】
次いで、ステップ504によって表されるように、待ち行列が空であるかどうか判断するために待ち行列をチェックすることができる。待ち行列が空である場合、ステップ505によって表されるように、第1のサジェスト要求がサーバに送信される。ステップ515によって表されるように、サーバによって返信されたサジェストコンテンツが受信された後、ステータスロックが解除される。後に生成されたサジェスト要求が、ステータスロックを取得することができる。この例では、ステップ516に従って、ユーザに提示されるサジェストコンテンツは、個々の文字「王[Wang]」、「汪[Wang]」、「C8[Wu]」などである。その後、ユーザが文字「f」を入力した場合、次いで返信される、文字「f」に対応するサジェスト候補は、「C2[Fei]」、「C4[Fei]」、「菲[Fei]」などのみである。また、サーバは、前の文字「w」の文脈で決定される文字「f」に関するサジェストコンテンツを送信することもある。
【0097】
しかし、待ち行列が空でない場合、ステップ506によって表されるように、待ち行列に記憶されている文字を、それらの文字が待ち行列に記憶された順序で抽出することができる。例えば、待ち行列に記憶されている文字は、それらの文字がl→yの順序で待ち行列に記憶されている場合には、「l」、次いで「y」の順序で抽出される。したがって、待ち行列に記憶されている文字は、l→yとして抽出され、これは、それらが待ち行列に記憶されたのと同じシーケンスである。ステップ507に従って、抽出された文字「l」および「y」を、第1のサジェスト要求に含まれている文字「w」と組み合わせて、文字列「lyw」を形成することができる。ステップ508に従って、文字列「lyw」となるように第1のサジェスト要求のパスパラメータを改訂することによって、第2のサジェスト要求が生成される。第2のサジェスト要求のためにステータスロックを取得することが可能になると、ステップ509に従って、第2のサジェスト要求がサーバに送信され、待ち行列をクリアすることができる。サーバによって返信されるはずのサジェストコンテンツが待機される。ステップ515によって表されるように、サーバによって返信されたサジェストコンテンツが受信された後、ステータスロックを解除することができる。後に生成されたサジェスト要求が、ステータスロックを取得することができる。例えば、返されるサジェストコンテンツは、数組の文字「C5C6C3[Liu Yiwei]」および/または「李C3C7[Li Yawei]」であり得る。
【0098】
2)しかし、ステップ510によって表されるように、ステータスロックが別のサジェスト要求のために既に取得されていると判断された場合には、第1のサジェスト要求のためにステータスロックを取得することはできない。その結果、第1のサジェスト要求のパスパラメータに含まれている文字「w」が待ち行列に記憶される。ステップ511によって表されるように、予め設定された待機期間が経過しているかどうか判断される。経過していない場合、待ち行列に関連付けられるタイマが、後の時点でチェックされる。時間が経過していると判断される場合、ステップ512によって表されるように、待ち行列に記憶されている文字を含むように第3のサジェスト要求が生成される。待ち行列に記憶されている文字がそれぞれ「l」、「y」、および「w」であり、それらの文字が待ち行列に入れられた順序がl→y→wである場合、第3のサジェスト要求のパスパラメータは、l→y→wの順序で「lyw」を記憶する。ステップ513に従って、第3のサジェスト要求のためにステータスロックを取得することができるかどうか判断される。ステータスロックが第3のサジェスト要求のために利用可能でない場合、ステータスロックは、後の時点で再びチェックされる。第3のサジェスト要求のためにステータスロックを取得することができる場合、ステップ514に従って、第3のサジェスト要求がサーバに送信され、待ち行列がクリアされる。サーバによって返信されるはずのサジェストコンテンツが待機される。ステップ515によって表されるように、サーバによって返信されたサジェストコンテンツが受信された後、ステータスロックを解除することができる。後に生成されたサジェスト要求が、ステータスロックを取得することができる。例えば、返されるサジェストコンテンツは、数組の文字「C5C6C3[Liu Yiwei]」および/または「李C7C3[Li Yawei]」であり得る。
【0099】
上述した例を要約すると、空の待ち行列が生成される。第1のサジェスト要求が唯一のステータスロックを取得することができない場合、第1のサジェスト要求を使用して渡されるべき文字は、消失されずに、後の時点でサーバに送信されることを保証するために、待ち行列に記憶することができる。さらに、第1のサジェスト要求が唯一のステータスロックを取得した後、待ち行列内の文字を第1のサジェスト要求のパスパラメータに追加することもでき、次いで、第2のサジェスト要求を生成することができ、第2のサジェスト要求をサーバに送信することができる。その結果、前の時点で送出することができなかった文字を、サーバに送信することができるようになるまで待ち行列に記憶しておくことができ、それにより、クライアントデバイスでユーザが入力した全ての文字に関してサジェストコンテンツを返信することができることを保証する。
【0100】
さらに、予め設定された待機期間が経過しており、かつ待ち行列内の文字が送信されていない場合には、第3のサジェスト要求を生成して、待ち行列に記憶されている文字をサーバに渡すことができる。第3のサジェスト要求は、待ち行列が空になるまでは、ステータスロックを取得する(または取得を試みる)。したがって、予め設定された待機期間は、クライアントデバイスでユーザが入力した全ての文字に関してサジェストコンテンツが返信されることをさらに保証する働きをする。
【0101】
図6は、コンテンツのオートコンプリートを実施するためのプロセスの一実施形態を示すフローチャートである。いくつかの実施形態では、プロセス600は、
図1のシステム100で実行される。いくつかの実施形態では、プロセス600は、
図1のサーバ106で実行される。
【0102】
ステップ602では、第1のサジェスト要求が受信され、ここで、第1のサジェスト要求は、ステータスロックを取得していることに関連付けられる。クライアントデバイスで動作するアプリケーションの入力ボックスにユーザが文字を入力すると、サジェスト要求が生成されて、入力された文字をサーバに送信するために使用され、ここで、文字に対応するサジェストコンテンツが返信されることがある。第1のサジェスト要求は、ユーザが入力した文字を含むようにクライアントデバイスで生成することができる。第1のサジェスト要求のためにステータスロックを取得することができるとき、第1のサジェスト要求がサーバに送信される。したがって、第1のサジェスト要求がサーバに送信されることにより、第1のサジェスト要求は、ステータスロックを既に取得していなければならない。
【0103】
ステップ604では、第1のサジェスト要求に関連付けられるパスパラメータに含まれる文字に対応するサジェストコンテンツが決定される。サーバは、第1のサジェスト要求のパスパラメータに含まれている各個の文字または各組の文字に対応するサジェストコンテンツを決定することができる。例えば、サーバは、一般に一緒に使用される文字に関する履歴データ(例えば、一般的な語句または語彙を形成する数組の文字)、ユーザのために予め記憶されている数組の文字に関する記憶されているデータ(例えば、ユーザの連絡先の名前)、および/または他の適切な技法を使用することによって、サジェストコンテンツを決定することができる。いくつかの実施形態では、サーバは、前に受信されたサジェスト要求に含まれている文字の文脈に基づいて、第1のサジェスト要求に含まれる文字に関するサジェストコンテンツを決定することができる。様々な実施形態において、サーバは、第1のサジェスト要求に含まれている文字を、それらの文字がパスパラメータに含まれている順序で処理する。
【0104】
例えば、ユーザが、クライアントデバイスにインストールされたアプリケーションで人の名前を検索したいとする。サーバで受信される第1のサジェスト要求のパスパラメータは、文字「w」である。サーバは、サーバデータベースに記憶されている連絡先の名前に関係する記憶されているデータを検索し、文字「w」で始まる姓、例えば「王[Wang]」、「汪[Wang]」、および「C8[Wu]」を見つけることが可能である。したがって、決定される対応するサジェストコンテンツは、「王[Wang]」、「汪[Wang]」、および「C8[Wu]」である。
【0105】
ステップ606では、サジェストコンテンツが送信される。サーバは、サジェストコンテンツをクライアントデバイスに返信することができる。前述の例を続けると、サーバは、クライアントデバイスのためのサジェストコンテンツとして、「王[Wang]」、「汪[Wang]」、および「C8[Wu]」を返信する。
【0106】
プロセス600は、第1のサジェスト要求をサーバで処理する一例を示したが、他のサジェスト要求(例えば第2のサジェスト要求および第3のサジェスト要求)も同様にサーバで処理することができる。
【0107】
図7は、コンテンツのオートコンプリートを実施するためのシステムの一実施形態を示す図である。この例では、システム700は、ステータスロック作成モジュール11と、待ち行列作成モジュール12と、サジェスト要求生成モジュール13と、送信モジュール14と、受信および解除モジュール15と、スクリーニングおよび表示
モジュール16とを含む。いくつかの実施形態では、システム700は、クライアントデバイスの一例である。
【0108】
モジュールおよびサブモジュールは、1つまたは複数のプロセッサ上で動作するソフトウェアコンポーネントとして、またはプログラマブル論理デバイスなどのハードウェアとして実装することができ、および/または素子に設計された特定用途向け集積回路は、本発明の実施形態で述べる方法をコンピュータデバイス(例えば、パーソナルコンピュータ、サーバ、ネットワーク機器など)に実施させるためのいくつかの命令を含む、不揮発性記憶媒体(例えば、光ディスク、フラッシュ記憶デバイス、モバイルハードディスクなど)に記憶することができるソフトウェア製品の形態で具現化することができる。モジュールおよびサブモジュールは、単一のデバイス上に実装することも、複数のデバイスに分散させることもできる。
【0109】
ステータスロック作成モジュール11は、サジェスト要求のためのステータスロックを作成するように構成されている。
【0110】
サジェスト要求生成モジュール13は、ユーザが入力した文字に基づいて第1のサジェスト要求を生成するように構成されている。第1のサジェスト要求のパスパラメータは、入力された文字を含む。
【0111】
送信モジュール14は、ステータスロックを取得することができるときに、第1のサジェスト要求をサーバに送信するように構成されている。
【0112】
受信および解除モジュール15は、サーバによって返信されるサジェストコンテンツを受信し、サジェストコンテンツの受信に応答してステータスロックを解除するように構成されている。
【0113】
いくつかの実施形態では、システム
700は、さらに、待ち行列作成モジュール12を含む。待ち行列作成モジュール12は、空の待ち行列を作成するように構成される。待ち行列は、ユーザが入力したが、サーバにまだ送信されていない文字を記憶するように構成されている。
【0114】
スクリーニングおよび表示モジュール16は、サーバによって返信されたサジェストコンテンツに対して、ユーザに表示する前にフィルタリングを行うように構成されている。
【0115】
いくつかの実施形態では、送信モジュール14は、さらに以下のものを含む。
【0116】
利用可能であるときにはステータスロックを第1のサジェスト要求のために取得するように構成された取得サブモジュール。
【0117】
第1のサジェスト要求のためにステータスロックを取得することができない場合に、第1のサジェスト要求のパスパラメータに含まれている文字を待ち行列に記憶するように構成された待ち行列追加サブモジュール。
【0118】
待ち行列が空であるかどうかチェックするように構成されたチェックサブモジュール。待ち行列が空であるとチェックサブモジュールが判断した場合には、第1の送信サブモジュールが、第1のサジェスト要求をサーバに送信するように構成される。しかし、待ち行列が空でないとチェックサブモジュールが判断した場合には、生成および送信サブモジュールは、待ち行列に記憶されている文字を抽出し、それらを第1のサジェスト要求のパスパラメータに含まれる文字に追加し、それにより第2のサジェスト要求を生成するように構成される。次いで、チェックサブモジュールは、第2のサジェスト要求をサーバに送信し、待ち行列をクリアする。
【0119】
いくつかの実施形態では、生成および送信サブモジュールは、さらに以下のものを含む。
【0120】
待ち行列に記憶されている文字を、それらの文字が行列に入れられた順序でファーストインファーストアウト方式で抽出するように構成された抽出サブモジュール。
【0121】
抽出された文字を、第1のサジェスト要求に含まれている文字と組み合わせて、文字列を形成するように構成された組合せサブモジュール。
【0122】
改訂サブモジュールは、第1のサジェスト要求のパスパラメータを改訂して文字列にして、第2のサジェスト要求を生成するように構成されている。
【0123】
いくつかの実施形態では、送信モジュール14は、さらに以下のものを含む。
【0124】
トリガが生じる(例えば、新規の文字が待ち行列に記憶される、および/または新規のサジェスト要求が生成される)ことなく予め設定された待機時間が経過した場合に、待ち行列に含まれている文字を使用して第3のサジェスト要求を生成するように構成されている生成サブモジュール。
【0125】
ステータスロックが第3のサジェスト要求のために取得されるときに、第3のサジェスト要求をサーバに送信し、待ち行列をクリアするように構成されている送信サブモジュール。
【0126】
図8は、コンテンツのオートコンプリートを実施するためのシステムの一実施形態を示す図である。いくつかの実施形態では、システム800は、サーバの一例を含む。この例では、システム800は、受信モジュール21と、取得モジュール22と、返信モジュール23とを含む。
【0127】
受信モジュール21は、ステータスロックを取得している第1のサジェスト要求を受信するように構成されている。
【0128】
取得モジュール22は、第1のサジェスト要求に含まれているパスパラメータに対応するサジェストコンテンツを決定するように構成されている。
【0129】
返信モジュール23は、第1のサジェスト要求の送信元のクライアントデバイスにサジェストコンテンツを送信するように構成されている。
【0130】
デバイスタイプの実施形態に関しては、基本的にプロセスの実施形態と同様であるので、それらの説明は比較的容易である。適切であれば、プロセスの実施形態での一部の説明を参照されたい。
【0131】
本明細書に含まれる実施形態は順々に説明されているが、各実施形態の説明は、他の実施形態と相違する範囲に焦点を当てており、各実施形態の同一または同様の部分に関してそれらの説明を相互に参照することができる。
【0132】
本出願のいくつかの実施形態を既に説明してきたが、当業者は、基本的な独創的概念を把握すれば、これらの実施形態に他の修正または改訂を施すことができる。したがって、添付の特許請求の範囲は、説明した実施形態、および本出願の範囲内にある全ての修正および改訂を含むものと解釈すべきである。
【0133】
当業者は、本出願の実施形態を、方法、システム、またはコンピュータソフトウェア製品として提供することができることを理解すべきである。したがって、本出願は、完全にハードウェアから構成された実施形態、完全にソフトウェアから構成された実施形態、およびソフトウェアとハードウェアを組み合わせた実施形態の形態を取ることができる。さらに、本出願は、コンピュータ動作可能プログラムコードを含む1つまたは複数のコンピュータ動作可能記憶媒体(限定はしないが、磁気ディスク記憶デバイス、CD−ROM、および光記憶デバイスを含む)に実装されたコンピュータプログラム製品の形態を取ることができる。
【0134】
方法、機器(システム)、およびコンピュータプログラム製品に基づいて、フローチャートおよび/またはブロック図を参照して本出願を述べる。フローチャートおよび/またはブロック図中の各プロセスおよび/または各ブロック、ならびにフローチャートおよび/またはブロック図中のプロセスおよび/またはブロックの組合せは、コンピュータプログラムコマンドによって実現することができることを理解すべきである。これらのコンピュータコマンドを、汎用コンピュータ、専用コンピュータ、組込みプロセッサ、または他のプログラマブルデータ処理機器のプロセッサに提供して、機械を生み出すことができ、その結果、コンピュータ、または他のプログラマブルデータ処理機器のプロセッサによって実行されるコマンドが、フローチャート中の1つまたは複数のプロセスおよび/またはブロック図中の1つまたは複数のブロックによって指定される機能を実現するために使用されるデバイスを生み出す。
【0135】
また、これらのコンピュータプログラムコマンドは、特定の様式で動作するようにコンピュータまたは他のプログラマブルデータ処理機器を誘導することができるコンピュータ可読記憶デバイスに記憶することもでき、その結果、これらのコンピュータ可読デバイスに記憶されたコマンドは、コマンドデバイスを含む製品を生み出す。これらのコマンドデバイスは、フローチャート中の1つまたは複数のプロセスおよび/またはブロック図中の1つまたは複数のブロックで指定される機能を実現する。
【0136】
また、これらのコンピュータプログラムコマンドは、コンピュータまたは他のプログラマブルデータ処理機器にロードすることもでき、その結果、コンピュータまたは他のプログラマブル機器上で一連の操作ステップが実行されて、コンピュータ処理を生み出す。このようにして、コンピュータまたは他のプログラマブル機器上で実行されるコマンドは、フローチャート中の1つまたは複数のプロセスおよび/またはブロック図中の1つまたは複数のブロックによって指定される機能を実現するためのステップを提供する。
【0137】
本出願は、プログラムモジュールなどコンピュータによって実行されるコンピュータ実行可能コマンドの一般的な文脈で述べることができる。一般に、プログラムは、特定のタスクを実行するためまたは特定の抽象データタイプを実現するために、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。また、本出願は、分散コンピューティング環境で実施することもできる。そのような分散コンピューティング環境では、タスクは、通信ネットワークを介して接続された遠隔処理機器によって実行される。分散コンピューティング環境では、プログラムモジュールは、記憶機器を含むローカルまたはリモートコンピュータにある記憶媒体に位置させることができる。
【0138】
最後に、本文献では、「第1の」や「第2の」などの関係語は、1つの実体または操作と別の実体または操作を区別するためにのみ使用され、これらの実体または操作の間の任意のそのような実際の関係またはシーケンスが存在することを必要としない、または示唆しないことも特記しておく必要がある。さらに、用語「備える」、「含む」、またはそれらの活用形は、それらの非排他的な意味合いで解釈されるべきである。したがって、一連の要素を備えるプロセス、方法、製品、または機器は、それらの要素を備えるだけでなく、明示的に列挙されていない他の要素、またはそのようなプロセス、方法、製品、もしくは機器に本来備わっている要素も備える。さらなる限定がないとき、語句「1つの〜を備える」によって限定される要素に関して、それらの要素を備えるプロセス、方法、製品、または機器にさらなる同一要素が存在することは排除されない。
【0139】
オートコンプリートコンテンツ入力に関する上記の技法は詳細に上で述べてきた。本文献では、本出願の実装の原理および形態を説明するために特定の実施形態を採用している。上記の実施形態の説明は、本出願の方法およびその中心概念を理解する一助としてのみ意図されている。さらに、当業者は、本出願の概念に基づいて、特定の用途および適用範囲に修正を施すことができる。上記のことを要約すると、本説明の内容は、本出願を限定するものと理解されるべきでない。
【0140】
理解しやすくするために、上記の実施形態は幾分詳細に述べてきたが、本発明は、提示した詳細に限定されない。本発明を実施する多くの代替方法がある。開示した実施形態は例示であり、限定ではない。
適用例1:オートコンプリートを実行するためのシステムであって、
1または複数のプロセッサであって、
サーバへの要求の送信を制御するように構成されているステータスロックを生成し、
ユーザ入力文字を含む第1のサジェスト要求を生成し、
前記ステータスロックが利用可能であるという表示に応答して、前記第1のサジェスト要求のための前記ステータスロックを取得し、前記第1のサジェスト要求を前記サーバに送信し、
前記サーバからの前記文字に対応するサジェストコンテンツの受信に応答して、前記ステータスロックを解除するように構成されている、1または複数のプロセッサと、
前記1または複数のプロセッサに接続され、前記1つまたは複数のプロセッサに命令を提供するように構成されている1または複数のメモリを備える
システム。
適用例2:前記1つまたは複数のプロセッサは、さらに、待ち行列を生成するように構成されている適用例1に記載のシステム。
適用例3:前記1つまたは複数のプロセッサは、さらに、
前記ステータスロックが利用可能でないという表示に応答して、前記文字を前記待ち行列に記憶し、
予め設定された待機期間が経過しているか判断し、
前記予め設定された待機期間が経過しているという判断に応答して、
前記待ち行列に記憶されている前記文字を含む第3のサジェスト要求を生成し、
前記第3のサジェスト要求のための前記ステータスロックを取得して、前記第3のサジェスト要求を前記サーバに送信し、
前記待ち行列をクリアするように構成されている適用例2に記載のシステム。
適用例4:前記第1のサジェスト要求のために前記ステータスロックを取得する前に、前記1つまたは複数のプロセッサは、さらに、
待ち行列が空であるか否か判断し、
前記待ち行列が空であると判断した場合には、前記第1のサジェスト要求のための前記ステータスロックの取得に進み、
前記待ち行列が空でないと判断した場合には、
前記待ち行列に記憶されている1つまたは複数の文字に少なくとも一部基づいて第2のサジェスト要求を生成し、
前記第2のサジェスト要求のための前記ステータスロックを取得して、前記第2のサジェスト要求を前記サーバに送信し、
前記待ち行列をクリアするように構成されている適用例1に記載のシステム。
適用例5:前記待ち行列に記憶されている前記1つまたは複数の文字に少なくとも一部基づいて前記第2のサジェスト要求を生成することは、
前記待ち行列から前記1つまたは複数の文字を抽出し、
前記抽出された1つまたは複数の文字を、前記第1のサジェスト要求に関連付けられている前記文字と組み合わせて、文字列を形成し、
前記文字列を含むように前記第2のサジェスト要求を生成する
ことを含む適用例4に記載のシステム。
適用例6:前記サジェストコンテンツは、予測される1組の1つまたは複数の文字と、予め記憶されている1組の1つまたは複数の文字と、1組の1つまたは複数の文字に関連付けられている訂正されたスペリングとの1または複数を備える適用例1に記載のシステム。
適用例7:前記1つまたは複数のプロセッサは、さらに、前記サジェストコンテンツを表示するように構成されている適用例1に記載のシステム。
適用例8:前記1つまたは複数のプロセッサは、さらに、前記サジェストコンテンツを表示する前に、前記サジェストコンテンツに対するフィルタリングを行うように構成されている適用例7に記載のシステム。
適用例9:前記サジェストコンテンツに対するフィルタリングを行うことは、ある文字を削除するという選択の受信に対応する前記サジェストコンテンツの一部の削除を含む適用例8に記載のシステム。
適用例10:オートコンプリートを実施するための方法であって、
サーバへの要求の送信を制御するように構成されているステータスロックを生成し、
ユーザ入力文字を含む第1のサジェスト要求を生成し、
前記ステータスロックが利用可能であるという表示に応答して、前記第1のサジェスト要求のための前記ステータスロックを取得して、前記第1のサジェスト要求を前記サーバに送信し、
前記サーバからの前記文字に対応するサジェストコンテンツの受信に応答して、前記ステータスロックを解除すること
を備える方法。
適用例11:さらに、待ち行列を生成することを備える適用例10に記載の方法。
適用例12:さらに、前記ステータスロックが利用可能でないという表示に応答して、前記文字を前記待ち行列に記憶し、
予め設定された待機期間が経過しているか判断し、
前記予め設定された待機期間が経過しているという判断に応答して、前記待ち行列に記憶されている前記文字を含む第3のサジェスト要求を生成し、
前記第3のサジェスト要求のための前記ステータスロックを取得して、前記第3のサジェスト要求を前記サーバに送信し、
前記待ち行列をクリアすること
を備える適用例11に記載の方法。
適用例13:前記第1のサジェスト要求のために前記ステータスロックを取得する前に、さらに、
待ち行列が空であるか否かを判断し、
前記待ち行列が空であると判断された場合には、前記第1のサジェスト要求のための前記ステータスロックの取得に進み、
前記待ち行列が空でないと判断された場合には、
前記待ち行列に記憶されている1つまたは複数の文字に少なくとも一部基づいて第2のサジェスト要求を生成し、
前記第2のサジェスト要求のための前記ステータスロックを取得して、前記第2のサジェスト要求を前記サーバに送信し、
前記待ち行列をクリアすること
を備える適用例10に記載の方法。
適用例14:前記待ち行列に記憶されている前記1つまたは複数の文字に少なくとも一部基づいて前記第2のサジェスト要求を生成することは、
前記待ち行列から前記1つまたは複数の文字を抽出し、
前記抽出された1つまたは複数の文字を、前記第1のサジェスト要求に関連付けられている前記文字と組み合わせて、文字列を形成し、
前記文字列を含むように前記第2のサジェスト要求を生成すること
を備える適用例13に記載の方法。
適用例15:前記サジェストコンテンツは、予測される1組の1つまたは複数の文字と、予め記憶されている1組の1つまたは複数の文字と、1組の1つまたは複数の文字に関連付けられる訂正されたスペリングとの1または複数を備える適用例10に記載の方法。
適用例16:さらに、前記サジェストコンテンツを表示することを備える適用例10に記載の方法。
適用例17:さらに、前記サジェストコンテンツを表示する前に、前記サジェストコンテンツに対するフィルタリングを行うことを備える適用例16に記載の方法。
適用例18:前記サジェストコンテンツに対するフィルタリングを行うことは、ある文字を削除するという選択の受信に対応する前記サジェストコンテンツの一部の削除を含む適用例17に記載の方法。
適用例19:オートコンプリートを実施するためのコンピュータプログラム製品であって、コンピュータ可読記憶媒体内に具現化され、
サーバへの要求の送信を制御するように構成されているステータスロックを生成するためのコンピュータ命令と、
ユーザ入力文字を含む第1のサジェスト要求を生成するためのコンピュータ命令と、
前記ステータスロックが利用可能であるという標示に応答して、前記第1のサジェスト要求のための前記ステータスロックを取得して、前記第1のサジェスト要求を前記サーバに送信するためのコンピュータ命令と、
前記サーバからの前記文字に対応するサジェストコンテンツの受信に応答して、前記ステータスロックを解除するためのコンピュータ命令と
を備えるコンピュータプログラム製品。