本発明の上記および他の目的、特徴、利点は、添付の図面と共に述べる以下の詳細な説明から容易に明らかになり、完全に理解されるであろう。
用語
本明細書では以下の用語を使用するが、特に断らない限り、または文脈から明らかである場合を除いて、用語は以下に述べる意味とする。
「レンダリングする」または「レンダリングされた」または「レンダリング」−情報(テキスト、グラフィック、および/または電子インクを含む)を画面に表示する、印刷する、あるいは何らかの他の方式で出力する方式を決定するプロセス。
「コンピュータ可読媒体」−コンピュータシステム上でユーザからアクセスすることができる任意の利用可能媒体。これに限定しないが、例として、「コンピュータ可読媒体」はコンピュータ記憶媒体と通信媒体とを含むことができる。「コンピュータ記憶媒体」は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータなどの情報を記憶する任意の方法または技術として実装された揮発性および不揮発性、取り外し可能および取り外し不能の媒体を含む。「コンピュータ記憶媒体」には、これらに限定しないが、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)または他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶装置、あるいは、所望の情報を記憶するのに使用することができ、コンピュータからのアクセスが可能な任意の他の媒体が含まれる。「通信媒体」は通例、コンピュータ可読命令、データ構造、プログラムモジュール、あるいはその他のデータを、搬送波または他のトランスポート機構などの変調データ信号として実施し、任意の情報伝達媒体を含む。用語「変調データ信号」とは、信号中に情報を符号化する形でその特性の1つまたは複数を設定または変化させた信号を意味する。これに限定しないが、例として、通信媒体には、有線ネットワークや直接配線接続などの有線媒体と、音響、RF、赤外線、およびその他の無線媒体などの無線媒体が含まれる。上記の媒体の組合せも「コンピュータ可読媒体」の範囲に含めるべきである。
概要
本発明の各種実施例によれば、文書(または他のタイプのファイル)中の要素のプロパティは、その文書中でのその要素の空間的位置に関連する情報を含むことができる。したがって、電子インクのストロークとタイプ入力テキストとの両方を、文書に対応する同じ空間座標系に即して、かつ/または文書中の他の要素との空間的関係または他の関係に即して記述することができる。さらに、文書中で関連性のある要素は、単にそれらの要素を含む文書の空間的領域を識別するか、かつ/またはそれらの要素をリンクすることによって識別することができる。
ソフトウェアアプリケーションは、この各種の文書要素間の空間的関係を使用して、文書の要素間の他の関係を記述するデータ構造を作成し、保持することができる。例えば、ソフトウェアアプリケーションは、文書中の各種の要素にクラスを定義するデータツリーなどのデータ構造を保持することができる。したがって、そのデータ構造中のノードは、1つまたは複数のインクストロークを含んだ手書きの単語または描画に対応し、そのノードに記憶されたデータがさらにページ上でのその単語の位置を示すことができる。単語ノードには、インクストロークおよび/または電子インク単語との関連で通例記憶される任意の他の適切なデータまたは従来のデータも記憶することができる。
このタイプのデータ構造は、文書の要素(個々のインクストロークやタイプ入力テキストの文字)を、単語、単語からなる行、文、段落などの有意のグループの形に関連付けることもできる。したがって、ソフトウェアアプリケーションが手書き電子インクからなる1段落を記述する文書ツリー構造を保持する場合、そのデータ構造の葉ノードは電子インクの個々のストロークに関連するデータを含むことができ、1つまたは複数のストロークは、その段落中の単語(例えばパーサおよび/またはレコグナイザによって判定された単語)に対応する単語ノードとしてそのデータ構造中でともに関連付けることができる。ツリー構造は、次いで単語ノードを段落中の行に対応する行ノードに関連付けることができる。各行ノードはさらに、段落に対応するノードに関連付けることができる。ソフトウェアアプリケーションは、さらに、電子インクストロークおよび/または何らかの他の電子インクのグループ化に対応するノードを、画像などの非インクの文書要素、インク描画、タイプ入力された文字、単語、行、段落などに対応する別のノードに関連付けるツリーまたは他のデータ構造を保持することができる。したがって、これらのデータ構造を使用して、関連付けられた電子インクストローク間の関係を定義すること、手書きテキストを形成する電子インクストロークを非インク文書要素に注釈を付す電子インクストロークと区別すること、かつ/または電子インクストロークを他の文書要素にリンクすることができる。
下記で詳細に述べるように、これらのデータ構造は、本発明の各種実施例による文書中の電子インクを分析するインク分析ツールと共に使用することができる。本発明の各種の実施例によれば、ソフトウェアアプリケーションは、まず文書のデータ構造を作成することにより文書中の電子インクの分析を得ることができる。このデータ構造は、(存在する場合には)すでに分析された文書要素間の関係を記述し、したがって、新しい電子インクが分析されるコンテクストを提供する。このデータ構造あるいは「分析コンテクストオブジェクト」は、まだ分析されていない新しい電子インクも含む。すなわち、分析コンテクストオブジェクトは、他の文書要素との関係がまだ確立されていない電子インクも含む。本発明の一部の実施例では、ソフトウェアアプリケーションは、分析コンテクストオブジェクトを自身で作成する。ただし、本発明の他の実施例では、ソフトウェアアプリケーションは、インク分析ツールまたは別のツールを使用して分析コンテクストオブジェクトを作成する。
ソフトウェアアプリケーションがインク分析ツールに分析コンテクストオブジェクトを提供する(あるいはインク分析ツールが分析コンテクストオブジェクトを作成する)と、インク分析ツールは、まだ分析されていない電子インクを含む分析コンテクストオブジェクトの少なくとも一部分に関連する情報のコピーを作成するか、またはその情報を取り出す。分析コンテクストオブジェクトの所望の部分に関連する情報のコピーを作成するか、その情報を受け取ることにより、インク分析ツールは、ソフトウェアアプリケーションによって保持される分析コンテクストオブジェクトを変更することなく後に分析することができるデータ構造を作成する。すなわち、このコピーは、ソフトウェアアプリケーションで使用される実際の電子文書から独立しており、したがって、以下では「文書に依存しない」分析コンテクストオブジェクトと称することができる。
インク分析ツールが文書に依存しない分析コンテクストオブジェクトを作成すると、インク分析ツールは、この文書に依存しない分析コンテクストオブジェクトを1つまたは複数の分析プロセスに提供する。例えば、文書中の未分析の電子インクに手書き認識を行う場合、インク分析ツールは、文書に依存しない分析コンテクストオブジェクトを分類および/またはレイアウト分析のプロセスに提供して、(必要であるか、要求される場合は)インクをテキストストロークと描画ストロークに分類し、未分析の電子インクテキストストロークを、インクレイアウトに基づく関連付けられたグループ化にグループ化することができる。分類および/またはレイアウト分析プロセスが文書に依存しない分析コンテク
ストオブジェクトを分析する間、ソフトウェアアプリケーションは通常の動作を継続することができる。詳細には、ソフトウェアアプリケーションは、そのアプリケーションプログラムによって保持されている電子文書への新たな電子インク入力および/または任意の他のデータの受け取りを続けることができる。
構文解析プロセスなどの分析プロセスが文書に依存しない分析コンテクストオブジェクトの分析を完了すると、そのプロセスは分析結果をインク分析ツールに返す。より詳細には、構文解析プロセス(特に上述の分類およびレイアウト分析のプロセスを含むことができる)は、まだ分析されていなかった電子インクの新しい関係を示す変更後バージョンの文書に依存しない分析コンテクストオブジェクトを返す。ただし、ソフトウェアアプリケーションは上述の構文解析の動作中に新しい電子インク入力および/またはその文書に対する他のデータを自由に受け付けることができるので、文書の分析コンテクストオブジェクトの現在のバージョン(すなわちアプリケーションによって保持されているバージョン)は、インク分析ツールに最初に提供された文書に依存しない分析コンテクストオブジェクトと、構文解析プロセスから得られる構文解析結果との両方と異なる可能性がある。
したがって、本発明の一部の実施例では、インク分析ツールは、ソフトウェアアプリケーションから現在のバージョンの分析コンテクストオブジェクトを入手し、構文解析の結果を現在のバージョンの分析コンテクストオブジェクトと一致させることができる。この一致プロセスで、インク分析ツールは、現在のバージョンの分析コンテクストオブジェクトを更新して構文解析プロセスの結果を反映させる。そしてインク分析ツールは、現在の分析コンテクストオブジェクトの一致後のデータを認識のために手書き認識プロセスに渡す。ただし、本発明の他の実施例では、インク分析ツールは一致プロセスを省略し、代わりに構文解析結果を直接手書き認識プロセスに渡してもよい。
構文解析結果を現在のバージョンの分析コンテクストオブジェクトと一致させると、ソフトウェアアプリケーションは、再び通常の動作に戻り、新しい電子インク入力および/または文書に関連する他のデータの受け取りを続けることができる。一方、認識プロセスは、現在の分析コンテクストオブジェクトの一致させたデータ(あるいは構文解析結果)を分析する。一致させたデータ(または構文解析結果)の分析を終えると、認識プロセスは、認識結果をインク分析ツールに返す。この場合も、ソフトウェアアプリケーションは、認識プロセスの動作中にその文書に対する新しい電子インク入力および/または他のデータを受け取っている可能性があるので、インク分析ツールは、ソフトウェアアプリケーションから現在のバージョンの分析コンテクストオブジェクトを取得する。インク分析ツールは次いで、認識プロセスの結果と現在のバージョンの分析コンテクストオブジェクトを一致させて、認識結果を用いて現在のバージョンの分析コンテクストオブジェクトを更新する。
例示的動作環境
図1に、本発明の各種態様の実施に使用することができる汎用デジタルコンピューティング環境の略図を示す。図1で、コンピュータ100は、処理装置110、システムメモリ120、およびシステムメモリ120を含む各種のシステム構成要素を処理装置110に結合するシステムバス130を含む。システムバス130は、各種のバスアーキテクチャの任意のものを使用したメモリバスまたはメモリコントローラ、ペリフェラルバス、およびローカルバスを含む数タイプのバス構造のいずれでもよい。システムメモリ120は、読み取り専用メモリ(ROM)140およびランダムアクセスメモリ(RAM)150を含むことができる。
起動時などにコンピュータ100内の要素間の情報転送を助ける基本ルーチンを含むBIOS(basic input/output system)160は、ROM140に記憶される。コンピュータ100は、ハードディスク(図示せず)の読み書きを行うハードディスクドライブ170、取り外し可能の磁気ディスク190の読み書きを行う磁気ディスクドライブ180、およびCD−ROMや他の光学媒体などの取り外し可能の光ディスク192の読み書きを行う光ディスクドライブ191も含むことができる。ハードディスクドライブ170、磁気ディスクドライブ180、および光ディスクドライブ191は、それぞれハードディスクドライブインターフェース192、磁気ディスクドライブインターフェース193、および光ディスクドライブインターフェース194によってシステムバス130に接続される。これらのドライブおよびそれに関連付けられたコンピュータ可読媒体は、パーソナルコンピュータ100のコンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性の記憶を提供する。当業者には、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)など、コンピュータからのアクセスが可能なデータを記憶できる他のタイプのコンピュータ可読媒体もこの例示的動作環境で使用できることが理解されよう。
ハードディスクドライブ170、磁気ディスク190、光ディスク192、ROM140、またはRAM150には複数のプログラムモジュールを記憶することができ、このプログラムモジュールには、オペレーティングシステム195、1つまたは複数のアプリケーションプログラム196、他のプログラムモジュール197、およびプログラムデータ198が含まれる。ユーザは、キーボード101やポインティングデバイス102(マウスなど)などの入力装置を通じてコンピュータ100にコマンドと情報を入力することができる。他の入力装置(図示せず)としては、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラアンテナ、スキャナなどが可能である。これらおよびその他の入力装置は、システムバス130に結合されたシリアルポートインターフェース106を通じて処理装置110に接続することが多いが、パラレルポート、ゲームポート、あるいはユニバーサルシリアルバス(USB)などの他のインターフェースで接続してもよい。さらに、これらの装置は、適切なインターフェース(図示せず)を介して直接システムバス130に結合してもよい。
モニタ107または他のタイプの表示装置もビデオアダプタ108などのインターフェースを介してシステムバス130に接続することができる。モニタ107に加えて、パーソナルコンピュータは通例、スピーカやプリンタなどの他の周辺出力装置(図示せず)を含む。一例では、フリーハンド入力をデジタル形式で取り込むためにペンデジタイザ165とそれに付随するペンまたはスタイラス166が提供される。図1にはペンデジタイザ165とシリアルポートインターフェース106間の接続を示しているが、実際には、ペンデジタイザ165は、直接処理装置110に結合しても、当技術分野で知られるようにパラレルポートや他のインターフェースおよびシステムバス130を介するなど任意の適切な方式で処理装置110に結合してもよい。さらに、図1ではデジタイザ165はモニタ107と分離しているが、デジタイザ165の使用可能な入力範囲は、モニタ107の表示範囲と共通の範囲(co−extensive)であってよい。さらに、デジタイザ165はモニタ107中に組み込むか、または、モニタ107の上に重なるか、その他の形でモニタ107に付加された別個のデバイスとして存在してもよい。
コンピュータ100は、リモートコンピュータ109などの1つまたは複数のリモートコンピュータとの論理接続を使用するネットワーク環境で動作することができる。リモートコンピュータ109は、サーバ、ルータ、ネットワークPC、ピアデバイス、あるいはその他の一般的なネットワークノードでよく、図を簡潔にするために図1にはメモリ記憶装置111だけを図示するが、通例はコンピュータ100との関連で上述した要素の多くまたはすべてを含む。図1に示す論理接続には、ローカルエリアネットワーク(LAN)112とワイドエリアネットワーク(WAN)113が含まれる。このようなネットワーキング環境は、有線接続と無線接続の両方を使用したオフィス、企業内のコンピュータネットワーク、イントラネット、インターネットに一般的に見られる。
LANネットワーキング環境で使用する場合、コンピュータ100は、ネットワークインターフェースあるいはアダプタ114を通じてローカルエリアネットワーク112に接続される。WANネットワーキング環境で使用する場合、パーソナルコンピュータ100は通例、インターネットなどのワイドエリアネットワーク113を通じて通信リンクを確立するためのモデム115または他の手段を含む。モデム115は、コンピュータ100の内部にあっても外部にあってもよく、シリアルポートインターフェース106を介してシステムバス130に接続することができる。ネットワーク環境では、パーソナルコンピュータ100との関連で図示したプログラムモジュール、またはその一部は、遠隔のメモリ記憶装置に記憶することができる。
図のネットワーク接続は例であり、コンピュータ間に通信リンクを確立する他の技術を使用できることは理解されよう。TCP/IP、イーサネット(登録商標)、FTP、HTTP、UDPなど各種のよく知られたプロトコルの存在が想定され、このシステムはユーザ−サーバ構成で動作させてユーザがウェブベースサーバからウェブページを取り出せるようにすることができる。各種の従来のウェブブラウザを使用して、ウェブページのデータを表示し、操作することができる。
図1の環境は例示的な環境を示すが、他のコンピューティング環境を使用してもよいことが理解されよう。例えば、本発明の1つまたは複数の例では、図1に示し、上述した各種の態様のすべてより少ない態様を有する環境を使用することができ、それらの態様は、当業者には自明の各種の組合せまたはサブコンビネーションで現れることが可能である。
図2に、本発明の各種態様により使用できるペン方式のパーソナルコンピュータ(PC)システム201を示す。図1のシステムの特徴、サブシステム、および機能のいずれかまたはすべてを図2のコンピュータに含めることができる。ペン方式のパーソナルコンピュータシステム201は、大型ディスプレイ面202、例えば液晶ディスプレイ(LCD)画面などのデジタル化フラットパネルディスプレイを含み、この画面に複数のウィンドウ203が表示される。ユーザは、スタイラス204を使用して、デジタル化表示領域で選択する、ハイライト表示する、そして書くことができる。適切なデジタル化ディスプレイパネルの例には、Mutoh社(現在はFinePoint Innovations社)やWacom Technology社から入手可能なペンデジタイザなどの電磁式のペンデジタイザが含まれる。例えば光学デジタイザなどの他タイプのペンデジタイザ、およびタッチセンシティブ式のデジタイザも使用することができる。ペン方式のパーソナルコンピュータシステム201は、データ操作、テキストの入力、および表計算、ワードプロセッシングプログラムなどの作成、編集、変更といった従来のコンピュータアプリケーションタスクを実行するためにスタイラス204を使用して行われるジェスチャを解釈する。
スタイラス204は、その機能を補強するためにボタンや他の機能を装備することができる。一例では、スタイラス204は「ペンシル」あるいは「ペン」として実施することができ、その場合は、一端が物を書く部分を構成し、もう一端が「消しゴム」の端部を構成し、「消しゴム」側の端部をディスプレイ上で動かすと、消去すべきディスプレイ上の電子インク部分が指示される。マウス、トラックボール、キーボードなど他のタイプの入力装置も使用することができる。また、タッチセンシティブまたは近接センシティブ式のディスプレイではユーザ自身の指を使用して表示画像の一部分を選択または指示してもよい。したがって、本発明で使用する用語「ユーザ入力装置」は、広い定義を持ち、よく知られる入力装置の多くの変形例を包含するものとする。
各種の実施例で、このシステムは、インクを取り込み、操作し、記憶するためにアプリケーションプログラムが使用することができるCOM(コンポーネントオブジェクトモデル)サービスのセットであるインクプラットフォームを提供する。インクプラットフォームは、拡張可能マークアップ言語(XML)のような言語を含むマークアップ言語も含むことができる。さらに、このシステムは、DCOMを別の実装として使用することができる。マイクロソフト社のWin32プログラミングモデルおよび.Netプログラミングモデルを含むさらなる実装を使用してもよい。これらのプラットフォームは、市販されており、当技術分野で知られている。
フル性能のペン方式のコンピューティングシステムすなわち「タブレットPC」(コンバーチブルタイプのラップトップあるいは「スレート(slate)」タイプのタブレットPC)と共に使用するのに加えて、本発明の態様は、電子インクであるデータを受け付け、かつ/または電子ペンまたはスタイラスの入力を受け付ける他タイプのペン方式のコンピューティングシステムおよび/または他のデバイスと併せて使用することができ、そのようなデバイスとしては、ハンドヘルド型またはパームトップ型のコンピューティングシステム、携帯情報端末、ポケットパーソナルコンピュータ、携帯電話およびセルラ電話、ページャ、およびその他の通信機器、腕時計、電気器具、および印刷された情報またはグラフィカルな情報をユーザに提示するか、かつ/または電子ペンあるいはスタイラスを使用した入力を可能にするモニタまたは他の表示装置および/またはデジタイザを含むか、あるいは、別のデバイスによって収集された電子インクを処理することが可能な他のデバイスまたはシステム(例えばタブレットPCが収集した電子インクを処理することが可能な従来型のデスクトップコンピュータ)が挙げられる。
次いで本発明について残りの図との関係で説明するが、それらの図には、本発明を説明する助けとなる本発明の各種の実施例と情報を示している。この詳細な説明に含まれる特定の図と情報は、本発明を限定するものと解釈すべきでない。
空間的文書ビューの抽象化
上述のように、本発明の特定の態様は、概略的には、電子文書に電子インクを使用したよりリッチで多用途な注釈を提供するためのシステムおよび方法に関する。以下で本発明の各種の態様と実施例をより詳細に説明する。
A.本発明の概要
図3に、本発明の少なくとも一部の実施例によるシステムおよび方法の動作を概略的に示す。具体的には、図3に示すように、ユーザは、例えば電子文書300に電子インクを追加することにより何らかの形で電子文書300(図3の文書「A」)と対話することができる。図の例では、電子文書300は、電子テキストすなわちタイプ入力テキスト302(図の例の「Sample Text」)とインク描画304(図の例の家の絵)を含んでいる。無論、電子文書300は、電子テキスト、電子インク(描画またはテキスト)、画像、グラフ、表、図、他のグラフィックまたは電子情報、および/またはそれらの組合せなど、任意のデータまたは情報を本発明から逸脱せずに含むことができる。この例では、元の電子文書300(本出願では「基本の文書」あるいは「基本の部分」とも称する)は、電子的なタイプ入力テキスト(電子テキスト)302と電子的なインク描画304とを含むものと想定する。ユーザはこの例の文書A300を見直して、文書300に電子インクによる注釈を含めることにする。具体的には、図の例で、この注釈は、電子的なタイプ入力テキスト302の一部分308を囲む円(注釈)306を含む。
この例では、ユーザが注釈を入力すると、アプリケーションプログラムは、パーサ310を呼び出し、新しく入力された電子インクデータの構文解析を要求する(上述のように「構文解析」には、例えば各種のインクタイプ(例えば描画、テキスト、フローチャート、音楽など)への電子インクの分類、および/またはインクのレイアウト分析(インクストローク間の空間的および位置的な関係の確定と、適切なグループ化)と、その他の分析プロセスが含まれる)。具体的には、アプリケーションプログラムは、入力された電子インクデータ(この例の注釈306に相当する)を未分類のインクデータとしてパーサ310に送る。これを図3では入力の矢印312で表す。
任意選択で、これと同時か、この前後の時に、アプリケーションプログラムは、基礎となる電子文書300に関連するデータの一部またはすべてをパーサ310に送ることができる。このデータは、例えば、電子テキスト302、インク描画304などの位置等、電子文書300中の情報の空間的レイアウトに関連するデータを含むことができる。また、アプリケーションプログラムは、文書中のデータの階層構造を表すデータを送ることができる。この階層構造については下記でより詳細に説明する。別の代替法として、これも下記でより詳細に説明するように、パーサ310は、アプリケーションプログラムにコールバックして、新しい未分類のインクに関連付けられた空間範囲にある電子文書300に関連する情報(この例では、タイプ入力テキストを表すデータと、注釈306の空間的に近くに位置する情報)など、電子文書300に関連する特定のデータを要求することができる。このパーサ310へのデータ入力を図3の入力矢印(電子文書データ)314で表す。言うまでもなく、本発明から逸脱することなく、未分類のインクとすでに分析されているデータの両方を同時にパーサに送る、かつ/またはパーサが入手できるようにしてもよい。
パーサ310は、入力された電子文書データ314と入力された未分類のインクデータ312とを受け取り、その情報を使用して新しい電子インクデータをあるインクタイプに分類する。インクは、本発明から逸脱せずに様々なインクタイプに分類することができ、可能なインクタイプの各種例は下記でより詳細に説明する。この例では、本発明の本例によるパーサ310は、基礎となる電子文書300に含まれる入力インクである注釈306と電子テキスト302とに基づいて、入力インクである注釈306を注釈と判定および分類し、より具体的には、特定のタイプ入力テキストをその中に含む囲み注釈(例えば円)に対応するインク描画と判定し、分類する。言うまでもなく、ハイライトの注釈、「ポイント起点(points to)」注釈、「被ポイント(points from)」注釈、固定型注釈(例えば他の注釈をポイントせず、他の注釈からポイントされない注釈)、水平方向の包括、垂直方向の包括などの他の注釈タイプも可能であり、様々な例を下記でより詳細に説明する。
解析すると、注釈306に関連付けられたデータを、電子文書300に関連付けられた「文書ツリー」の階層データ構造(あるいは任意の他の適切な、または所望のデータ構造)中に組み込むことができ、そのデータ構造(またはアプリケーションプログラムによって保持される既存のデータ構造を変更する命令)を図3の矢印316で示すようにアプリケーションプログラムに送り返すことができる。必要な場合は、本発明から逸脱せずに、この他のデータをパーサ310からアプリケーションプログラムに返すことができる。例えば、パーサ310の動作が1つまたは複数のレコグナイザモジュール、コンポーネント、および/またはプログラムの呼び出しを含む場合は、図3に示すように、認識分析プロセス(手書きレコグナイザまたは他のレコグナイザなど)の結果に関連付けられたデータをアプリケーションプログラムに返してもよい。
図4に、本発明の一部の実施例で使用される各種機能の実施400の一例を示す。図のように、電子文書(図3の文書A300など)がアプリケーションプログラム400aによってデータ構造あるいは文書モデル402として生成され、記憶され、かつ/または保持される。このデータ構造402は、本発明から逸脱せずに、階層的なデータ構造であっても、任意の他の所望のまたは適切なデータ構造であってもよい。アプリケーションプログラム400aは「分析コンテクスト」オブジェクト404を含み、このオブジェクト404は、ミラーコピー、選択的コピー、またはデータ構造402に関連する他の関連情報を含んでいる(例えば、分析コンテクストオブジェクト404は、分析コンテクストオブジェクト404についてのクエリがネイティブの文書モード構造に対するクエリに変換される「変換」レイヤとすることができる。このようにして、本発明の態様による構文解析技術を各種の異なるネイティブアプリケーションプログラムで使用するために変換することができる)。「プラットフォーム」400bすなわちこの例示的実施400のオペレーティングシステム側は、「インクアナライザ」メソッド406を含み、このメソッド406がアプリケーションプログラム400aによって呼び出される。アプリケーションプログラム400aは、インクアナライザメソッド406を呼び出し、メソッド406に分析コンテクストオブジェクト404への参照を渡す。インクアナライザメソッド406は、パーサ408(この例ではこれもプラットフォーム400bの一部)を呼び出し、パーサ408は、先に概説したように入力データのレイアウトを分類し、分析する。本発明による例示的実施の動作については、下記の「インクの分析」の項でより詳細に説明する。パーサ408が分析と処理とを完了すると、プラットフォーム400bは、図4の矢印410で大まかに示すようにアプリケーションプログラム400aにデータを送り返して、文書モデル402および/または分析コンテクストオブジェクト404が、パーサの処理と結果に基づいて各自のデータ構造を再構築できるようにする。
図5に、本発明の少なくとも一部の実施例で、例えば「分析コンテクスト」オブジェクト404の一部として、文書モデル402として、またはパーサ408によって生成および/または出力されるデータ構造として電子文書データを記憶するために使用できるデータ構造の一例を示す。具体的には、図5には例示的な電子文書500を示す。分析コンテクストオブジェクト502として記憶されるか、構文解析を受けると、このデータ構造は、異なるグループ化すなわち「ノード」に分類または配置された各種の文書要素を含むことができる。例えば、図5に示すように、電子文書500は、3つの電子テキスト段落504、506、および508、1つの電子インク描画510、1つの電子インク注釈512を含む。図5では、電子文書500の例示的な分析コンテクストデータ構造502を最上位要素のリストとして示す。具体的には、ノード要素504(a)は電子文書500の段落504に対応し、ノード要素506(a)は電子文書500の段落506に対応し、ノード要素508(a)は電子文書500の段落508に対応し、ノード要素510(a)は電子文書500のインク描画510に対応し、ノード要素512(a)は電子文書500のインク注釈512に対応する。下記でより詳細に説明するように、このデータ構造には、図5に示す最上位ノード504a、506a、508a、510a、および512aの親ノードおよび/または子ノードとして追加的なノードを(例えば階層的配置で)記憶することができる。
B.コンテクストノードおよび階層データ構造
図6A〜6Iに、本発明の一部の実施例による、分析コンテクストオブジェクトなどの電子文書データを構築、分析、および構文解析する際に使用できるコンテクストノードとデータ構造の各種の例を示す。図6Aには、未分類の電子インクデータ(例えば、まだ構文解析を受けていない、ユーザによって新たに入力されたインク)を記憶するために使用できる例示的データ構造600を示す。この例示的データ構造600は、ルートノード602(アプリケーションプログラム中の電子文書全体、文書の特定のページ、あるいはアプリケーションプログラムが使用するグループ化など適切あるいは所望のデータのグループ化に対応することができる)を含む。ルートノード602は、ページ番号、前のページまたは次のページへのポインタ、余白の位置または大きさなど任意の適切あるいは所望のデータを含むことができる。各ルートノード602は、任意数の未分類のインクノード604を子ノードとして含むことができ、各未分類のインクノード604はさらに任意数の個々のストロークノード606を含むことができる(階層構造中の最後のノード(この例ではストロークノード606)を本明細書では「葉ノード」とも呼ぶことがある)。(各種図面中の文字「n」は、ゼロを含む任意の数を表すことができる。)データ構造600の各種ノードは、そのノードに対応する任意の所望または適切なデータを含むことができる。例えば、ストロークノード606は、デジタイザの点、または電子インクストロークを識別する他のデータ、ストロークの位置または方向のデータ、ストロークの色データ、ストロークの圧力データ、ストローク入力のタイミングデータ、ストロークIDデータを表すデータ、および/または電子インクを受け取ることが可能なシステムおよび方法でストローク情報を記憶する際に使用されるその他の従来のデータまたは有用なデータを含むことができる。同様に、未分類インクノード604は、そのノード中に含まれるすべてのストロークの境界(bounding)ボックスサイズ、境界ボックスの位置、入力のタイミング情報、インクの幾何学的情報(例えば凸包(convex hull)の情報)を表すデータ、および/またはノード中に含まれる未分類のインクストロークに関連する他の従来データまたは有用なデータなど、インクまたはノードに関連付けられた任意の所望または適切なデータを含んでよい。あるいは、必要な場合は、ストロークデータは一般に、文書ツリー中の別個のノードとして保存するのではなく、別のノード(例えば単語ノード、表ノードなど)のプロパティとして保存してもよい。
未分類のインクがクラシファイア、レイアウトアナライザ、レコグナイザ、および/または別の構文解析システムに送られると、インクの少なくとも一部分を共に関連付けるか、かつ/または各種の異なるタイプに分類することができ、インクに関連付けられたデータ構造は、そのインクが分類された各種の関連付けとタイプに対応するように変更することができる。図6Bに、インクテキストとして分類された電子インクの例示的なデータ構造610を示す。当技術分野で知られ、使用されている従来のパーサを含む構文解析技術を使用して、入力された電子インクのストローク(例えばペンダウンイベントから時間的にその後に生じるペンアップイベントの間に収集された、あるいは何らかの他の方式で収集された電子インクデータ)を構文解析し、階層的に記憶することができ、関連する個々のインクストロークは共にまとめてインク単語として記憶することができ、線状に配置されたインク単語は共にまとめてインク行として記憶することができ、関連するインク行は共にまとめてインク段落として記憶することができ、関連する段落は電子文書として(個々のページ部分として、文書全体として、あるいは任意の適切なルートのグループ化で)記憶することができる。このように構文解析され、記憶された電子インクデータに対応する図6Bに示す例示的な階層データ構造610は、ルートノード612を含むことができ、ルートノード612は、電子文書全体、ページ、またはアプリケーションプログラムが使用する別のグループ化に対応することができる。各ルートノード612は、段落または電子インクストロークの同様のグループ化に対応する任意数のノード614を含むことができる。段落ノード614は任意数の個々の行ノード616を含むことができ、行ノード616は任意数の個々のインク単語ノード618を含むことができ、単語ノード618はさらに、入力された電子インクデータの個々のストロークに対応する任意数の個々のストロークノード620を含むことができる。任意選択で、先に指摘したように、ストロークデータは、必要な場合は関連付けられた単語ノードの「プロパティ」として記憶することができる。各種のノード612、614、616、618、および620は、上述の空間的方向または位置づけのデータおよび/または他の同様データのような、そのノードに含まれる各種の個々のストロークまたはストロークの集合に関連する適切なデータを記憶することができる。
本発明から逸脱せずに、入力電子インクストロークに対応する他のデータタイプおよびデータ構造構成が可能である。例えば、分類、レイアウト分析、またはレコグナイザ技術により、入力された電子インクがインク描画を形成していることを判定することができる。図3に、数個の別個のインクストロークを含む例示的なインク描画304を示す。図6Cおよび6Dに、インク描画に関連すると判定された電子インクデータをグループ化し、記憶するために使用できる階層データ構造の例を示す。図6Cに示すように、データ構造630は、ルートノード632を含む(ノード632は、上記のように電子文書全体、電子ページ、あるいは何らかの他のデータのグループ化に対応することができる)。各ルートノード632は、任意数の個々のインク描画ノード636を含むことができ(例えば、個別の描画ごとに、例えば描画の幅、描画の高さ、描画の位置、境界ボックスのサイズなどに関連するデータを記憶する個々のノードがある)、各インク描画ノード636は、任意数の個々のインクストロークノード638(描画を構成する個々のインクストロークに対応する)を含むことができる。任意選択で、インクストロークデータは、そのデータに対応するインク描画ノード(または他のノード)の「プロパティ」として記憶してもよい。
図6Dに、1つまたは複数のインク描画を含む電子文書の代替のデータ構造630aを示す。この例では、電子文書またはページまたはその他のデータのグループ化(ルートノード632aで表す)は、電子インク描画の1つまたは複数のグループ(ノード634aで表す)を含むことができ、それら描画のデータは共に関連付けられ、図6Cとの関連で説明した階層的な形で記憶される。(例えば、電子文書全体(ルートノード632aで表す)は、数個の個別のページ(それぞれグループノード634aで表す)を含むことができ、各個々のページは、1つまたは複数の個別のインク描画(それぞれインク描画ノード636aで表す)を含むことができ、各個別のインク描画は、1つまたは複数の個別のインクストローク(それぞれストロークノード638aで表されるか、またはインク描画ノードのプロパティにある)を含むことができる。)。グループとインク描画とはどちらも同じルートノードまたは任意のグループノードの子であってよいことに留意されたい。また、必要な場合は、グループノードが追加的なグループノードを含んでもよい。言うまでもなく、本発明から逸脱することなく、電子インク描画を記憶するためのさらに他の適切なデータ構造を使用することができる。
ただし、階層データ構造は、入力された電子インクデータに使用することに限定されない。(例えばキーボードから)入力されたタイプ入力テキストも、各種のグループとして関連付け、階層データ構造で記憶することができる。図6Eに、そのようなデータ構造640の一例を示す。このデータ構造640は、ルートノード642(上述のルートノードと同様)を含むことができる。各ルートノード642は、任意数のテキスト段落ノード644(テキストの段落に対応する)を含むことができ、各段落ノード644は、任意数のテキスト行ノード646(あるいはテキスト文ノード)を含むことができ、各行ノード646はさらに任意数の個々のテキスト単語ノード648を含むことができる。必要な場合は、本発明から逸脱することなく、テキスト単語をさらに個々のテキスト文字ノードに区分することができ、さらに、個々の文字構成要素ノード(例えば各文字のベースライン、セリフ(serif)、アゼンダ(ascender)、ディゼンダ(descender)等の構成要素に関連する)に区分することができる。各種のノードは、段落、行、または単語の空間的位置、内容、サイズなど、ページの余白、余白の大きさあるいは位置、ページ数など、テキストに関連する適切なデータを含むことができる。
図6A〜6Eとの関連で上述した各種のデータ構造は、電子インクデータだけ、または電子的なタイプ入力テキストデータだけを排他的に含むデータ構造の例である。本発明から逸脱せずに、構文解析技術を使用して単一のデータ構造中にあるそれら異なるデータタイプを分析、組合せ、関連付け、およびグループ化することができる。図6Fに、電子文書またはその一部(ルートノード652で表す)が1つまたは複数の個々の段落(段落ノード654で表す)と1つまたは複数の個々の行(行ノード656で表す)を含む例示的データ構造650を示す。行は、可能性としては、タイプ入力されたテキスト(テキスト単語ノード658で表す)と電子インクテキスト(インク単語ノード660とインクストロークノード662で表す)との両方を含む可能性がある。各個々の段落ノード、行ノード、および単語ノード(タイプ入力テキストとインク単語の両方)は、その段落、行、および単語の内容に応じて、独立した該当データを含む。これに加えて、またはこの代わりに、本発明から逸脱することなく、個々の単語がさらにインク文字とタイプ入力文字との両方を含んでもよい。
本発明から逸脱することなく、電子文書のデータ構造(階層データ構造を含む)にはこの他の電子データも含めることができる。例えば、図6Gのデータ構造664に示すように、電子文書のデータ構造には画像データ(デジタル写真、グラフィック情報など)を含めることができる。この例に示すように、データ構造664は、1つまたは複数の個々のデータのグループ化(グループノード668で表す)を含んでいる電子文書またはその一部(ルートノード666で表す)を含む。この例の各データのグループ化はさらに、図6Eおよび6Fに関連して上記で概説したように、電子画像(画像ノード670で表す)とタイプ入力テキスト(段落ノード672、行ノード674、およびテキスト単語ノード676で表す)とを含むことができる。言うまでもなく、図6Gに示すようなデータ構造は、本発明から逸脱することなく、電子インクデータ(例えば図6Aから6Dに示すようなデータ構造)、あるいはその他の所望のデータタイプも含むことができる。
図6Hに、本発明の少なくとも一部の実施例で使用できる別の可能なデータ構造680の一例を示す。具体的には、図6Hのデータ構造680は、1つまたは複数のリスト(リストノード684によって表す)を含んでいる電子文書またはその一部分(ルートノード682で表す)に対応する。電子文書中のリストは、任意数の個々のリスト項目(リスト項目ノード686で表す)を含むことができ、各リスト項目は、各種の幅広いタイプの電子情報を含むことができる。例えば、あるリスト項目は、任意選択でリストの中黒(bullet)を含むことができ、リストの中黒は、タイプ入力された中黒または電子インクの中黒からなることができる(1つまたは複数の対応するインクストロークノード690を含むインク中黒ノード688を図6Hの例に示す)。また、各リスト項目は、任意で、1つまたは複数の電子インク段落(ノードチェーン692で表す)、1つまたは複数のインク描画(ノードチェーン694で表す)、および/または1つまたは複数のタイプ入力段落(ノードチェーン696で表す)を含むことができる。これに加えて(またはこの代わりに)、各リスト項目は、任意選択で、1つまたは複数の画像(画像ノード698で表す)および/または、図6Dおよび6Gとの関係で上述したグループ化などの1つまたは複数のデータのグループ化(グループノードチェーン700で表す)を含んでもよい。各種のノードおよび/またはノードチェーン692、694、696、698、700は、図6Aから6Gに示す例示的データ構造とそれらデータ構造のサブセットおよび/またはグループ化に概ね対応することができるので、これ以上の説明は省略する。必要な場合は、少なくとも一部の事例では、個々のリスト項目ノード686がそれ自体で、図6Hに示すようなデータ構造のリストを含んでもよい。
図6Iに、本発明の少なくとも一部の実施例で使用することが可能な別の例示的データ構造710を示す。この例示的データ構造710は、表として分析され、共に関連付けられ、グループ化され、記憶された電子データに対応する。この図の例では、各電子文書またはその一部(ルートノード712で表す)は、1つまたは複数の表(表ノード714で表す)を含むことができる。この例の表は、1つまたは複数の情報の行(行ノード716で表す)からなることができ、すべての行は、1つまたは複数の個々のセル(セルノード718で表す)からなることができる。個々のセルは、例えば上述の各種のデータ構造などの1つまたは複数のデータ構造を含むことができる。図の例では、個々の表セルは、可能性としては任意数の画像(画像ノード720で表す)、任意数のタイプ入力テキスト段落(ノードチェーン722で表す)、任意数のグループ化(ノードチェーン724で表す)、任意数のインク描画(ノードチェーン726で表す)、任意数の追加的な表(ノードチェーン728で表す)、および任意数のリスト(ノードチェーン730で表す)を含むものと図示している。言うまでもなく、本発明から逸脱することなく、上述の各種の特定のデータ構造および/または上述のようなデータ構造の組合せおよびサブセットなど、任意の他の適切なあるいは所望のデータ構造を表に含めてよい。
各種の異なるノードには、上述の各種タイプのデータを含む任意の適切なまたは所望のデータを記憶することができる。注釈に関連するデータの処理で使用するために、本発明の少なくとも一部の実施例では、各種のノードが任意で電子文書中のノードの空間的位置、方向、または場所に関連するデータを記憶すると有用である場合がある。これは、空間情報が電子文書のデータ構造中の他のノードに関連するか、またはリンクするからである。
また、本発明から逸脱することなく、他のタイプのパーサ、クラシファイア、および/またはレコグナイザ、およびデータタイプを使用することができる。例えば、本発明から逸脱することなく、レコグナイザを使用して、電気記号または電子記号(例えば抵抗、電圧源、コンデンサなど)、音楽記号、数学記号、フローチャートの要素、円グラフの要素などを分析、認識、グループ化、および/または関連付けることができる。
図6Aから6Iに示すデータ構造は、本発明の態様で使用することが可能な各種のデータ構造の例に過ぎない。当業者には、使用する特定のデータ構造は、本発明から逸脱せずに幅広く異なってよいことが理解されよう。例えば、本発明から逸脱することなく、異なるレイアウトのグループ化を表す異なるノードを使用することができ、追加的なノードタイプを追加することができ、あるいはここで説明するノードタイプの一部を省略することができる(例えば表のデータ構造で行ノードの代わりに列ノードを使用してよい)。また、上記の説明は、ページ上で文字が左から右、そして上から下に読まれる言語とテキストの表現に使用するために最適化されている。本発明から逸脱することなく、他の言語および文字の配置に使用するために設計され、それらに対応するデータ構造、例えば、右から左、上から下、下から上、およびそれらの組合せで読まれる、かつ/または書かれる言語に対応するデータ構造を使用することができる。また、必要な場合は(特にアジアの言語など一部の言語の場合)、ストロークを適切に文字としてグループ化し、次いで上述した中間的な「単語ノード」を使用せずに文字を行にグループ化することができる。別の代替例として、行ノードの使用を省略し、単語ノードを段落および/またはその他の所望のグループ化に共にグループ化することができる。例えば特定の言語の特徴に対応するための上記およびその他のデータ構造の変形例を、本発明から逸脱することなく使用することができる。
C.本発明の態様の注釈への適用
上述のコンテクストノードおよび階層データ構造の使用を含む本発明の諸態様を使用して、電子文書中に「スマートな」電子インク注釈を提供することができる。上述のように、ペン方式のコンピューティングシステムの望ましく有用な使用法の1つは、電子文書に注釈を付すことである。ただし、特に有用かつ効果的になるように、基礎となる文書の各種要素に関連付けられた特性が何らの理由(例えば余白の変更、表示サイズの変更、フォントの変更、情報の追加、情報の削除など)で変化した場合に、注釈が、基礎となる文書中の注釈が付された要素への変更に基づいて正確に位置および/または他の特徴を変えることができるように、ペン方式のコンピューティングシステムで文書に電子インクで付される注釈は、十分な柔軟性がなければならない。これは、例えば、注釈に関連付けられた少なくとも1つのコンテクストノードを、基礎文書に関連付けられた1つまたは複数のコンテクストノードにリンクすることによって実現することができる。少なくとも一部の事例では、1つまたは複数の文書要素の空間的属性、位置、および/または場所に関連するデータなど、基礎となる文書に関連付けられ、基礎となる文書と関連して記憶されたデータおよび/または特徴を使用して、注釈の場所、外観、および/またはその他の特性をコントロールすることができる。
図7Aおよび7Bに、電子インクを介して電子文書に適用することが可能な注釈の一例を示す。図7Aに示すように、電子文書750は、文「Today the sky is green.」を含んでいる。ペン方式のコンピューティングシステムのユーザは、電子インクを使用して単語「green」に下線を引く(この下線の注釈を参照符号752で示す)ことによりこの文書750に注釈を付している。図7Bに、この混成電子文書750に対応する例示的な階層データ構造760を示す(電子文書750全体をルートノード762によりデータ構造760中に表す)。完全に構文解析されると、データ構造760は、文書構造全体を示す複数のコンテクストノードを含む。具体的には、電子文書750中のタイプ入力テキストに関連する情報が分析され、共に関連付けられて、電子文書750が1つの段落(段落ノード764)を含み、その段落が行(行ノード766)を含み、その行に5つの単語(単語「Today」、「the」、「sky」、「is」、「green」それぞれに1つのテキスト単語ノード768a〜768eがある)が含まれることを示す。また、パーサは、注釈752に関連するデータが電子文書750中に存在することに気づき、そのデータを電子インク描画(インク描画ノード770)として分類する。また、パーサは、基礎文書750中におけるタイプ入力テキストに対するインク描画ストロークの場所と位置に基づいて注釈を「下線」の注釈として認識および分類し、下線ノード772を生成する。また、パーサは、下線の注釈の実際のインクストロークに対応するすべてのストロークデータを1つまたは複数のストローク葉ノード774に格納する(オプションで、ストロークデータを、下線ノード772または他の適当なノードのプロパティとして記憶してもよい)。
また、単語「green」が(例えば何らかの理由で単語が移動する場合など)電子文書750中のどこに現れても電子インクの下線ストローク752をこの1つの単語「green」と共に維持するために、この例のデータ構造中760に、図7Bに矢印776で表すように下線ノード772(例えばこのリンク例の「起点」コンテクストノード)が単語「green」のテキスト単語ノード768e(この例の「宛先コンテクスト」ノード)にリンクされていることを表すデータを保存し、また、矢印778で示すようにテキスト単語ノード768eが下線ノード772からリンクされていることを表すデータを保存する。このリンクにより、下線ノード772がテキスト単語ノード768eに「固定」される(例えば「固定」タイプのリンク)。したがって、テキスト単語ノード768eに記憶されたデータが何らかの理由で、単語「green」の位置が電子文書中で変化したことを示す場合、リンク776および778により、アプリケーションプログラムは、可能な場合は、下線注釈のレンダリングを変化後の電子文書中のテキスト単語ノード768eの場所および/または空間的位置に移動すべきことを検出することができる。別の例として、テキスト単語ノード768eに記憶された「境界ボックス」データ、単語の幅のデータ、または他のデータが、何らかの理由による単語のサイズまたは位置の変化(例えばフォントサイズの変更、文字の追加、文字の削除、文字の変更などによる)を示す場合、アプリケーションプログラムは、可能である場合は、レンダリングされた下線のサイズを修正し(例えば延長するか、切り詰める)て、テキスト単語ノード768eによって表されるテキスト単語に関連付けられた新しいサイズに対応させることができる。適用可能な場合、本発明の少なくとも一部の実施例によるシステムおよび方法は、注釈を付された文書要素が基礎となる文書の変更により複数の行に現れた(例えば単語の追加やハイフネーションなどによる)場合には、複数の行に現れるように注釈のストロークを分割することができる。また、本発明から逸脱せずに、ノード間の適切なリンク構成、またはリンクを表す適切なデータを使用することができる。
図8Aおよび8Bに別の注釈例を示す。この例では、図8Aに示すように、電子文書800はこの場合も文「Today the sky is green.」を含むが、この例では、ペン方式のコンピューティングシステムのユーザは、電子インクを使用して単語「green」に線を引いて取り消す(この削除を参照符号802で示す)ことによって文書800に注釈を付している。図8Bに、完全に構文解析された後のこの混成電子文書800に対応する例示的階層データ構造810を示す(図8Bの大部分の具体的なコンテクストノードは図7Bのコンテクストノードに対応するので、図7Bと同じ参照符号を図8Bで用い、重複する説明は省略する)。この例では、パーサは、電子文書800中に注釈802に関連するデータが存在することに気づき、そのデータを電子インク描画(インク描画ノード812)に分類する。また、電子文書800中の基礎となるタイプ入力テキストの内容に対するインク描画ストロークの場所と位置(例えば線による削除がテキスト単語上に水平方向にわたっていること)に基づいて、パーサは、この注釈を「削除」の注釈として認識および分類し、削除ノード814を生成する。また、パーサは、削除注釈の実際のインクストロークに対応するすべてのストロークデータを1つまたは複数のストローク葉ノード816(あるいは、削除ノード814または別の適切なノードのプロパティ)に記憶する。
図7Aおよび7Bとの関係で説明した下線の注釈の場合と同様に、削除の注釈は、単語「green」が何らかの理由で移動した場合でも、この単独の単語「green」と共に保持することができる。この場合も、このような保持は、例えば図8Bの矢印818で示すように削除ノード814(この例の「起点」コンテクストノード)が単語「green」のテキスト単語ノード768e(この例の「宛先」コンテクストノード)にリンクされていることを示すデータをデータ構造810中に保存し、また、矢印820で示すようにテキスト単語ノード768eが削除ノード814からリンクされていることを示すデータをデータ構造に保存することによって実現することができる。この例のリンクタイプは、削除ノード814をテキスト単語ノード768eに固定する「横方向にわたる」リンクタイプである。したがって、テキスト単語ノード768eに記憶されたデータが何らかの理由で、単語「green」(またはテキスト単語ノード768eに関連付けられた他の単語)の位置および/またはサイズが電子文書800中で変化したと示す場合、リンク818および820により、アプリケーションプログラムは、可能である場合は変化後の電子文書中のテキスト単語ノード768eに記憶された単語の場所、空間的位置、および/またはサイズに合わせて削除のレンダリングを調整するか、かつ/または(可能な場合)そのサイズを変更すべきことを検出することができる。ここでも、本発明から逸脱することなく、ノード間の適切なリンク構成、またはリンクを表す適切なデータを使用することができる。
図9Aおよび9Bに注釈タイプの別の例を示し、さらに2つ以上のテキスト単語との関連付けまたは注釈のリンクを説明している。図9Aおよび9Bに示す例でも電子文書900は文「Today the sky is green.」を含むが、この例では、ペン方式のコンピューティングシステムのユーザは、電子インクを使用して単語「is green」を円で囲む(この円あるいは「囲み」タイプの注釈を図9Aでは参照符号902で示す)ことにより電子文書900に注釈を付している。図9Bは、完全に構文解析された後のこの混成電子文書900に対応する例示的な階層データ構造910を示す(図9Bの大部分の具体的なコンテクストノードは図7Bにあるコンテクストノードに対応するので、図7Bと同じ参照符号を図9Bで使用し、重複する説明は省略する)。この例でも、パーサは、注釈902に関連するデータが電子文書900中に存在することに気づき、このデータを電子インク描画(インク描画ノード912)として分類する。また、電子文書900中の基礎となるタイプ入力テキストの内容に対するインク描画ストロークの場所と位置に基づいて、パーサは、この注釈を「囲み」注釈として認識および分類し、データ構造910中にインク囲みノード914を生成する。また、パーサは、囲み注釈の実際のインクストロークに対応するすべてのストロークデータを1つまたは複数のストローク葉ノード916に(あるいはインク囲みノードまたは他の適切なノードのプロパティとして)記憶する。
図7A〜8Bとの関係で説明した下線および削除の注釈の場合と同様に、囲み注釈も単語「is green」が何らかの理由で移動した場合でも単語「is green」と共に保持することができる。この場合も、このような保持は、例えば、図9Bで矢印918aおよび918bで表すようにインク囲みノード914(この例の「起点」コンテクストノード)が単語「is green」のテキスト単語ノード768dおよび768e(この例の「宛先」コンテクストノード)それぞれにリンクされていることを示すデータをデータ構造910中に保存することによって実現することができる。また、図9Bの矢印920aおよび920bで表すように、テキスト単語ノード768dおよび768eが囲みノード914からリンクされていることを示すデータをデータ構造910に保存することができる。このリンクは、「包含」タイプのリンクである。したがって、テキスト単語ノード768dおよび768eに記憶されているデータが何らかの理由で、単語「is green」(またはそれらのコンテクストノードに関連付けられた他の単語)の位置および/またはサイズが電子文書900中で変化したと示す場合、リンク918a、918b、920a、および920bにより、アプリケーションプログラムは、可能な場合には、変化後の電子文書中のコンテクストノード768dおよび768eに記憶された単語の場所、空間的位置、および/またはサイズに合わせて、囲み注釈のレンダリングおよび/またはそのサイズを調整すべきことを検出することができる。また、ユーザが単語「is」と「green」との間に単語を追加した場合、あるいは何らかの形で単語または文字が削除または変更された場合、アプリケーションプログラムは、囲み注釈のサイズおよび/または位置を変更してそれらの変化に対応することができる。ここでも、本発明から逸脱せずに、他のリンク構成またはリンクを表すデータを記憶することができる。
図10Aおよび10Bに、よく使用される別のタイプの注釈、具体的には「余白コメント」タイプの注釈を示す。この例では、図10Aに示すように、ユーザは、「it's not green!」という電子インクの余白コメント1002で文「Today the sky is green.」を含む電子文書1000に注釈を付している。特に、この例では、図10Bに示すように、タイプ入力テキストに関連付けられたデータ構造1010は、このテキストが電子文書1000中で2行にわたって(図7A、8A、9Aのように一行ではなく)存在するために変化している。したがって、データ構造1010は、2つの行ノード1012および1014を有し、第1の行ノード1012は、テキスト単語ノード768aおよび768b(単語「Today」と「the」に関連付けられている)を含み、第2の行ノード1014は、テキスト単語ノード768c、768d、および768e(単語「sky」、「is」、「green」に関連付けられている)を含む。
この混成電子文書1000を完全に構文解析すると、パーサは、注釈1002が電子インクテキストを含んでいることを認識し、この注釈を(電子文書1000の余白内に位置することから)「余白コメント」タイプの注釈に分類する。したがって、パーサは、余白コメントのための適切な余白コメントノード1016を生成する。この余白コメント1002は電子インクテキストしか含んでいないので、パーサはさらに、この電子インクの階層構造に関連付けられた段落ノード1018、2つの行ノード1020および1022、適切なインク単語ノード1024、1026、1028、およびストロークノード1030、1032、および1034を生成する(先に述べたように、任意で、あるいはこれに代えて、インクストロークデータはインク単語ノードのプロパティとして記憶してもよく、かつ/またはデータ構造1010から行ノードを省略してもよい)。
図10Aおよび10Bの例には上記と異なるリンク関係を示す。具体的には、この例では、ページの余白と基礎となる文書の内容とに対する余白コメント1002の場所と方向とに基づいて、パーサは、図10Bの矢印1036で表すように、余白コメント1002に関連付けられた段落ノード1018(この例の「起点」コンテクストノード)が、タイプ入力テキストに関連付けられた段落ノード764(この例の「宛先」コンテクストノード)にリンクされていることを示すデータをデータ構造1010に保存する。また、パーサは、矢印1038で示すように、タイプ入力テキストに関連付けられた段落ノード764が余白コメント1002の段落ノード1018によってリンクされていることを示すデータをデータ構造1010に保存する。これは、インク段落がテキスト段落に固定された「固定」タイプのリンク構成である。このようにして、電子文書1000中でタイプ入力された段落がどこに移動しても、また任意で、段落に追加的な行および/または単語が追加される、かつ/または段落から行および/または単語が削除される、かつ/または段落内または電子文書1000内でその他の変更が行われた場合でも、アプリケーションプログラムは、リンク1036および1038により、可能である場合はリンクされたタイプ入力段落に隣接する余白中に留まるように余白コメント1002を移動すべきことを検出することができる。言うまでもなく、本発明から逸脱せずに、この他のリンク構成またはリンクに関連付けられたデータを記憶することができる。例えば、余白コメントノード1016を、第1のテキスト単語ノード768aなど、タイプ入力段落の1つまたは複数の個々のテキスト単語ノードにリンクすることができる。
図11Aおよび11Bに、本発明の少なくとも一部の実施例によるシステムおよび方法で認識することが可能な注釈のやや複雑な例を示す。図の例では、電子文書1100はこの場合もフレーズ「Today the sky is green.」を含むが、ユーザは、異なる注釈タイプの組合せを使用して電子文書1100に注釈を付している。具体的には、ユーザは、単語「green」を囲む囲みタイプの注釈1102、電子インクの単語「Blue!」を含む余白コメントタイプの注釈1104、および、囲みタイプの注釈1102から余白コメント注釈1104に向かう連結タイプの注釈1106(例えばこの例の矢印)を描いている。
基礎となる文書、タイプ入力された文書テキスト、および文書の余白に対するこれら各種の注釈タイプの相対的な位置と空間的方向のために、本発明の少なくとも一部の実施例によるパーサシステムは、これら各種の注釈タイプ、それら注釈の内容、注釈タイプ相互の関係および注釈タイプと電子文書のタイプ入力テキストとの関係を上記で概説したように認識する。パーサによって生成される電子文書1100の例示的な階層データ構造1110を図11Bに示す。タイプ入力テキストの階層構造は図7Bと同じなので、図11Bのこの構造でも図7Bと同じ参照符号を用い、詳細な説明は省略する。また、図11Bに示すようにインク囲みタイプの注釈1102のノードチェーン1112は図9Bのノードチェーンと同様であり、余白コメントタイプの注釈1104のノードチェーン1114は図10Bのノードチェーンと同様である。そのため、これらのノードチェーンの詳細な説明はここに含めない。
基礎テキストの該当部分および空間的位置と共に注釈の空間的位置を維持するために、注釈ノード間の各種リンクおよび適切なテキストノードとの各種リンクがパーサによって提供され、データ構造1110に記憶される。図の例では、図11Bの矢印1118で表すように、インク囲みノード1116(この例の「起点」コンテクストノード)は、その囲みに含まれる単語のテキスト単語ノード768e(この例では単語「green」に対応する「宛先」ノード)にリンクされている。同様に、図11Bの矢印1120で表すようにテキスト単語ノード768eがインク囲みノード1116からリンクされていることを示すデータがデータ構造1110に記憶される。これは「囲み」タイプのリンク構成である。
上述のように、本発明のこの例によるパーサはさらに、電子文書1100が、インク連結に対応する連結注釈1106(すなわちこの例の囲み注釈1102と余白コメント注釈1104を結ぶ矢印)を含んでいることを認識する。この連結注釈1106は、データ構造1110中にインク描画(インク描画ノード1122で表す)として記憶され、インク描画ノードは注釈タイプを表すノード(この例のインク連結ノード1124)を含み、インク連結ノード1224はさらに、連結を構成するストロークを表すデータを(ストロークノード1126中か、またはインク連結ノード1124(または他の適切なノード)に関連付けられたプロパティ中に)含む。さらに、インク連結ノード1124(この例の「宛先」ノード)がインク囲みノード1116(この例の「起点」ノード)からポイントされていることを示す情報がデータ構造1110中に記憶される。このリンク(「被ポイント」タイプのリンク)を図11Bでは矢印1128で表す。また、データ構造1110はさらに、インク連結ノード1124(この例の「起点」コンテクストノード)がインク単語ノード1132(この例の「宛先」コンテクストノード)にリンクされていることを示すデータを含む。このリンク(「ポイント起点」タイプのリンク)を図11Bの矢印1134で表す。あるいは、本発明から逸脱せずに、インク連結ノード1124は、ノードチェーン1114のインク行ノード、インク段落ノード、あるいは余白コメントノードのいずれか1つとリンクしてもよい。上述の特定のリンクでは、図11Aに示すように、データ構造1110は、連結注釈1106が囲み注釈1102からポイントしており、インク単語をポイントしていることを示す。これらの各種リンクにより、アプリケーションプログラムは、基礎となる文書と各種の注釈コンポーネントとの関連付けを検出することができる。したがって、可能な場合、アプリケーションプログラムは、基礎となる文書中の移動に正しく対応するように注釈要素を移動することができる。本発明から逸脱せずに、適切なリンク構成またはリンクに関連付けられたデータを使用することができる。
図12Aおよび12Bに、一般的に使用される注釈要素の別の例を示す。この例でも図12Aに示すように電子文書1200は文「Today the sky is green.」を含むが、この例では、ペン方式のコンピューティングシステムのユーザは、電子インクを使用して文の最初の単語の近くに星印あるいはアステリスク(この注釈を参照符号1202で示す)を配置することにより文書1200に注釈を付している。図12Bに、完全に構文解析された後のこの混成電子文書1200に対応する階層データ構造1210の例を示す(図12Bの大部分のコンテクストノードは図7Bのコンテクストノードに対応するので図12Bでは図7Bと同じ参照符号を使用し、重複する説明は省く)。この例では、パーサは、注釈に関連する電子インクデータの存在に気づき、そのデータをインク描画(インク描画ノード1212)として分類する。また、インクストロークの形状と、基礎文書である電子文書1200の内容に対する注釈1202のストロークの場所と位置(例えばタイプ入力テキストの行の横)に基づいて、パーサは、この注釈を「アステリスク」、「中黒」、または固定タイプの注釈と認識し、アステリスクノード1214を生成する。また、パーサは、アステリスクの実際のインクストロークに対応するすべてのストロークデータを、1つまたは複数のストローク葉ノード1216またはアステリスクノード(または何らかの他のノード)のプロパティ中に記憶する。
この例では、アステリスクタイプの注釈1202は、タイプ入力テキストが何らかの理由で移動した場合にタイプ入力テキストの行が電子文書1200のどこに現れてもこの行全体と共に保持することができる。これは、例えば、図12Bの矢印1218で表すようにアステリスクノード1214(この例の「起点」コンテクストノード)がテキスト行ノード766(この例の「宛先」ノード)にリンクされていることを示すデータをデータ構造1210に保存し、また、矢印1220で表すようにテキスト行ノード766がアステリスクノード1214によってリンクされていることを示すデータを保存することによって実現することができる。したがって、テキスト行ノード766に記憶されたデータが何らかの理由で、その行の位置または場所が電子文書1200中で変化したことを示す場合、リンク1218および1220により、アプリケーションプログラムは、それが可能である場合にはアステリスクのレンダリングを変化後の電子文書中でテキスト行ノード766に関連付けられたデータのレンダリングに対応する場所および/または空間的位置に合わせて調整すべきことを検出することができる。あるいは、必要な場合は、本発明から逸脱せずに、パーサは、アステリスクノード1214(またはアステリスク注釈に関連付けられた他の適当なノード)を段落ノード764または個々の単語ノードの1つ(例えば単語ノード768a)に結び付けてもよい。また、必要な場合は、インク描画ノード1212を、テキスト行ノード766(またはこの例でタイプ入力テキストに対応する他の適当なノード)に固定された起点ノードとしてもよい。本発明から逸脱せずに、この他の適切なリンク構成またはリンクを表すデータを使用することができる。
図13Aおよび13Bに、「フローチャート」タイプのリンクされた注釈を示す。この例では、電子文書1300はフローチャートを含み、このフローチャートは、任意でより大きな電子文書全体中の注釈の一部分として含めることができる。図13Aに示すように、この注釈あるいはフローチャートは、第1の囲み注釈1304の中に取り囲まれた、あるいは囲まれた第1のインク項目1302(この例の文字「A」)と、第2の囲み注釈1308で取り囲まれた、あるいは囲まれた第2のインク項目1306を含んでいる。また、連結注釈1310(この例の矢印)が、第1の囲み注釈1304から第2の囲み注釈1308に延びている。ただし、文書要素間の関係は、リンク以外の代替の形で表せることを理解されたい。例えば、これらの関係は、例えば関連付けられた文書要素を含む囲みノードを使用することによりデータツリー自体の構造中に表すことができる。
図13Bに、完全に構文解析された後の図13Aの電子文書1300のフローチャート注釈に関連付けることが可能な例示的データ構造1320を示す。この例示的データ構造1320では、電子文書1300のすべてまたは一部に対応することが可能なルートノード1322が、フローチャートタイプ注釈に含まれるノードの親ノードとして提供される。この特定の注釈構造に関連する第1のコンテクストノードは、囲み注釈1304に対応するインク描画ノード1324である。インク囲みノード1326がインク描画ノード1324の子ノードとして提供され、囲み注釈1304に関連付けられた特定のストロークが葉ノード1328に記憶されるか、または囲みノード1326(または他のノード)のプロパティとして記憶される。
図13Aとの関連で述べたように、この注釈はさらに、文字「A」1302に対応する電子インクテキストを含んでいる。上述の他の電子インクテキストと同じく、このインクテキストに関連付けられた電子インクは階層データ構造1320中に段落ノード1330として記憶され、段落ノード1330は行ノード1332を含み、行ノード1332はインク単語ノード1334を含み、インク単語ノード1334は任意でインクテキスト注釈中の個々のストロークに対応する1つまたは複数の葉ノード1336か、またはストロークデータを含むプロパティを含む。データ構造1320中に記憶された情報は、図13Bの矢印1338で表すように囲み注釈1304のインク囲みノード1326(「起点」ノ
ード)が、文字「A」の段落ノード1330(「宛先」コンテクストノード)にリンクされていることを示す。あるいは、必要な場合は、インク単語ノード1334または行ノード1332が宛先ノードの役割を果たしてもよい。また、データ構造1320に記憶された情報は、図13Bの矢印1340で表すように段落ノード1330がインク囲みノード1326からリンクされていることも示す。この例の注釈の囲み注釈1308および文字「B」1306のデータ構造は、同じ概略的なリンク構造を含めて囲み注釈1304および文字「A」1302と同じ概略的構造を共有するので、文字「B」1306とそれに関連付けられた囲み注釈1308のデータ構造1320中の各種ノードには、文字「A」とその囲みに関連付けられた参照符号と同じ参照符号を用いるが、図13Bの囲み注釈1308とインク項目1306の参照符号の後には文字「b」をつけている。言うまでもなく、本発明から逸脱することなく、各種の階層的構成およびリンク構造またはリンクデータは上記で具体的に述べたものと異なってよい。
この注釈はさらに、データ構造1320中でインク描画ノード1342によって表す連結注釈1310も含む。図11Bとの関連で上述したように、インク連結注釈を表すインク描画のデータ構造はさらにインク連結ノード1344を含むことができ、インク連結ノード1344はさらに、連結注釈1310を構成する特定のストロークに関連付けられたデータを含む1つまたは複数のプロパティまたは葉ノード1346を含むことができる。この例の注釈データ構造を完全なものにするために、連結注釈1310(起点ノード)に関連付けられたデータを、2つの囲み注釈1304および1308(宛先ノード)に関連付けられたデータにリンクする。具体的には、図13Bの例に示すように、インク囲みノード1326が「ポイント起点型」の注釈タイプとしてインク連結ノード1344にリンクされている(矢印1348で表す)ことを示す情報をデータ構造1320中に記憶する。また、インク連結ノード1344が、「被ポイント型」の注釈タイプとしてインク囲みノード1326bにリンクされている(矢印1352で表す)ことを示す情報をデータ構造1320中に記憶する。このように、図13Aに示すように、リンクに関連して記憶されたデータが、連結注釈1310が囲み注釈1304から囲み注釈1308をポイントしていることを示す。したがって、これら各種リンクの存在により、電子文書1300中で注釈の一部分の移動があると注釈の他の部分がそれに従うことができ、それにより、電子文書1300が何らかの形で変化した場合でも注釈を元の状態に保つことができる。言うまでもなく、本発明から逸脱することなく、上述のようにこの構造全体を何らかの基礎文書要素にリンクしてもよい。
同様に、注釈には、例えば「これらを入れ替える(switch these!)」のような書かれたコメントを伴う連結で接続された2つの囲み型の注釈が伴うことがある。2つの囲み型の注釈の間に単語が挿入された場合など注釈の一部分が移動される場合、その部分は、その注釈のもう一方の部分とは別個に移動する必要がある場合がある。電子インク注釈を表すコンテクストノードと非インク内容を表すノード間のリンクをソフトウェアアプリケーションが使用して、注釈を構成する部分を再配置し、そして配置動作が完了するとそれらを再び共に結び付けることができる。
図14Aおよび14Bに、フローチャートタイプの注釈またはインク構造を有する電子文書1400の別の例を示す。この例では、文字「A」1402の電子インク注釈は、文字「B」1404および「C」1406の電子インク注釈に接続され、文字「A」と「B」、「A」と「C」の間にそれぞれ電子インク連結1408と1410がある。
構文解析後の電子文書1400の例示的データ構造1420を図14Bに示す。電子文書の全体またはその一部分に関連するデータは、親ルートノード1422に記憶することができる。電子インク単語「A」、「B」、および「C」に対応するデータは、先の数個の図で使用された構造と同じ段落ノード(1424a、1426b、1424c)、行ノード(1426a、1426b、1426c)、インク単語ノード(1428a、1428b、1428c)、およびストロークノード(1430a、1430b、1430c)の構造を有する。これらのノードの反復的な説明は省略する。同様に、インク連結は、上記の図11Bおよび13Bで使用した構造と同じインク描画ノード(1432a、1432b)、インク囲みノード(1434a、1434b)、およびストロークノード(1436a、1436b)の構造を有するので、反復となる説明は省略する。言うまでもなく、上述の可能な変形例を含むこれら特定のデータ構造の変形を本発明から逸脱することなく使用することができる。
この例の注釈のデータ構造を完全なものにするために、インク連結注釈1408に関連付けられたデータを、連結が結ぶ2つの文字「A」1402および文字「B」1404に関連付けられたデータにリンクし、インク連結注釈1410に関連付けられたデータを、連結が結ぶ2つの文字「A」1402および文字「C」1406に関連付けられたデータにリンクする。具体的には、図14Bの例に示すように、データ構造1420中に、インク描画ノード1432a(「起点」ノード)がインク単語ノード1428aおよび1428bを「ポイント」する(それぞれ矢印1438と1440で表す)ことを示す情報を記憶する。同様に、インク描画ノード1432b(「起点」ノード)がインク単語ノード1428aおよび1428cを「ポイント」する(それぞれ矢印1442および1444で表す)ことを示す情報をデータ構造1420中に記憶する。インク単語ノード1428a、1428b、1428cが「宛先」ノードとして機能する。これら各種リンクがあるために、電子文書1400中で注釈の一部分が移動するとその移動に注釈の他の部分が従うことができ、それにより、電子文書1400が何らかの形で変化した場合でも注釈を元の状態に、あるいはリンクされた状態に保つことができる。また、この注釈は、本発明から逸脱せずに、タイプ入力テキスト、描画、画像など電子文書中の1つまたは複数の他の要素にリンクすることもできる。
図15Aから15Cに、電子文書1500の例と、複数の行および列を有する表の形態の電子インク注釈を含むデータ構造の例を示す。具体的には、図15Aの例に示すように、電子文書1500は、2つの行および2つの列(合計4つのセルを構成する)を有する表1502を含み、この表の各セルは、電子インクの境界線によって構成され、電子インクテキスト入力を含んでいる。
完全に構文解析した後の図15Aに示す電子インク表1502の例示的データ構造1510を図15Bに示す。この例では、データ構造1510はルートノード1512を含み、このルートノード1512は、電子文書1500のすべてまたは一部分に対応することができる。ルートノード1512の下には、表に関連する関連データが表ノード1514に記憶される。このノードは、例えば表の大きさ、表の位置、行の数、列の数、境界ボックスのサイズなどを示すデータを含むことができる。表ノード1514の下には、表の行ごとに個別の行ノードが提供される(この例では図15Bに示すように2つの行ノード1516および1518が提供される)。この例示的データ構造の各行ノードはさらに1つまたは複数のセルノードを含む(この例では、行ノード1516は2つのセルノード1520および1522を含み、行ノード1518は2つのセルノード1524および1526を含む)。この例の各セルは電子インクテキストデータを含んでいるので、この例示的な階層データ構造1510の残りの部分は、上記で既に詳細に説明した段落ノード、行ノ
ード、インク単語ノード、およびストロークノードを有する。言うまでもなく、本発明から逸脱することなく、表のセルは、電子インクデータに加えて、かつ/または電子インクデータの代わりに、例えばタイプ入力テキストのデータおよび/または図6Iとの関係で先に詳述した各種のデータタイプを含む、1つまたは複数の他タイプのデータを含んでもよい。別の代替例として、行ノード1516および1518に代えて、データ構造は列ノードを含むことができ、列ノードが図15Bに示すようにセルノード、段落ノードなどを含んでもよい。実際の表を構成するインクストロークは、例えば表ノード1514の一部として(例えばそのノードに関連付けられたプロパティとして)、表ノード1514の下位ノードである(depend from)インク描画ノードとして(関連付けられたストロークが表ノード1514の下に記憶される)、かつ/またはデータ構造1510中の他の適切な位置に記憶することができる。
表1502を含む電子文書1500の代替の例示的データ構造1530を図15Cに示す。この例では、ルートノード1512、表ノード1514、行ノード1516および1518、セルノード1520、1522、1524、および1526は、図15Bと同じである。ただし、各種のセルノード1520、1522、1524、および1526の下にある子ノードとして電子インクテキストデータを含めるのではなく、電子インクテキストデータ(あるいはその他の適切な、あるいは所望のデータ構造)の段落ノード1528a、1528b、1528c、1528dは、それぞれ図15Cの矢印1530a、1530b、1530c、1530dで表すように、各自のセルノード1520、1522、1524、および1526にリンクされる。この例のセルノードは、そのセルに含まれるインク単語に対する囲みタイプの「起点」ノードとして機能することができ、インク段落、行、または単語のノードが「宛先」コンテクストノードとして機能する。これら各種のリンクにより、電子文書1500中で表注釈の一部分が移動すると注釈の他の部分がその移動に従うことができ、それにより、電子文書1500が何らかの形で変化した場合でも表の注釈を元の状態、またはリンクされた状態に保つことができる。この表は、基礎となる電子文書に基づいて存在する何らかの他のノードにリンクすることもできる。ここでも、代替法として、本発明から逸脱することなく、行ノード1516および1518を、各種のセルノードを含む列ノードに代えることができる。また、実際の表を構成するインクストロークは、例えば表ノード1514の一部として(例えば表ノードに関連付けられたプロパティとして)、表ノード1514の下位ノードであるインク描画ノードとして(関連付けられたストロークが表ノードの下に記憶される)、および/またはデータ構造1510中の他の適切な場所など、本発明から逸脱することなく任意の場所に記憶してよい。
言うまでもなく、上述した各種の例示的な注釈タイプに関連する各種の図は、可能な注釈タイプ、注釈の使用法、注釈中に含めることができる情報の例を示すに過ぎない。当業者は、本発明から逸脱せずに多くの修正または変更を行えることを理解されよう。例えば、注釈は、本発明から逸脱せずに、多くの異なる組合せまたは順列で各種タイプのデータ(電子インクテキスト、描画、画像、タイプ入力テキスト、画像など)を含むことができる。
また、上記の各種のデータ構造との関連で各種のリンク方式を記載した。このリンク方式または手法は、各種のデータノードを共にリンクすることが可能な方式の例に過ぎない。本発明から逸脱せずに、適切なリンク構成またはリンクに関連付けられたデータを記憶することができる。例えば、各ノードを個々の識別子(グローバル一意識別子あるいはGUID)で表し、GUIDの対(または3つ以上)を用いてリンクを表すことが可能である場合がある。別の代替法として、上記の一部の例との関連で述べた二重のリンク構成の代わりに、単一のリンクを使用してノードをリンクすることも可能である。別の可能な代替法として、必要あるいは望ましい場合は、ノードをそのノード自体にリンクしてもよい(自己リンク。例えば起点ノードと宛先ノードが同一ノードである場合など)。当業者は、本発明から逸脱せずに、各種のデータセットを互いにリンクまたは関連付ける任意の適切な方式を使用できることを理解されよう。
インクの分析
本発明の例による電子文書中の電子インクを分析する各種の例示的技術について次いで説明する。詳細には、図16A〜16Eに、本発明の各種例による文書を分析するステップを示す流れ図を示す。そして図17〜26に、この分析プロセス中に用いられる各種コンポーネント間の関係を示す。
次いで図17を参照すると、ソフトウェアアプリケーション1701を示している。ソフトウェアアプリケーション1701は文書1703を保持しており、この文書1703は、電子インクデータ1705と、タイプ入力文字または画像などの非インクデータ1707との両方を含むことができる。上記で詳述したように、電子インクデータ1705と非インクデータ1707両方のプロパティをツリーなどの階層データ構造によって記述することができる。電子インクの分析を開始するために、ステップ1601で、ソフトウェアアプリケーション1701は、図17で分析コンテクストオブジェクト1709として識別されるそのようなデータ構造を生成する。
図18に、分析コンテクストオブジェクト1709に含めることが可能なタイプの例示的ツリー1801を示す。ツリー1801は、ルートノード1803と段落ノード1805を含む。段落ノード1805は、例えばすでに以前の分析プロセスで識別されている可能性のある電子インクテキストの1段落に対応する。段落ノード1805は、2つの行ノード1807および1809に接続され、行ノード1807および1809は電子インクテキストの段落中の2行を表す。行ノード1807は、2つの単語ノード1811および1813に関連付けられる。各単語ノード1811および1813は、行ノード1807によって表される電子インクテキストの行にある単語に対応する。単語ノード1811は、インクストロークデータ1815とインクストロークデータ1817を含んでいる。したがって、ストロークデータ1815および1817は、単語ノード1811で表される単語を構成するテキスト電子インクストロークに対応する。同様に、単語ノード1813はインクストロークデータ1819およびインクストロークデータ1821を含み、これらのデータは、単語ノード1813で表される単語を構成するテキスト電子インクストロークに対応する。ツリー1801は、ルートノード1803だけに関連付けられたストロークデータ1823〜1827も含む。このインクデータ1823〜1827は、まだ分類されていないか、別のインクストロークまたは他の文書要素に関連付けられていない新しいインクストロークを表す。
このように、個々のストロークノードにストロークを記憶するのではなく、各種ノードが、そのノードに関連付けられたストロークに対応するデータを記憶する、関連付けられた「ストローク」プロパティを有することができる。例えば、(a)未分類のコンテクストノードが、分析する必要のある1つまたは複数のストロークを有する1つまたは複数の「ストローク」プロパティを含む、(b)インク単語ノードが、あるインク単語を構成する1つまたは複数のストロークを含む1つまたは複数の「ストローク」プロパティを含む、(c)描画ノードが、ある描画を構成する1つまたは複数のストロークを含む1つまたは複数の「ストローク」プロパティを含む、そして(d)中黒ノードが、あるリスト項目中の中黒を構成する1つまたは複数のストロークを含む1つまたは複数の「ストローク」プロパティを含む、ことが可能である。言うまでもなく、本発明の代替の実施では、例えば単語ノードまたは描画ノードにインクストロークを関連付けるのではなく、個別のストロークノードをデータツリー中で使用して電子インクの個々のストロークを表すことができる。
図18に示すツリー1801は、すでに単語、行、および段落に編成されたインクストロークを含むが、ツリー1801は、分類されていない、あるいは別のインクストロークまたは文書要素に関連付けられていない新しいインクストロークだけを含んでもよいことを理解されたい。例えば、ユーザが最初に文書1703に電子インクを入力する際、その最初のインクストロークはまだ分析されていない。ツリー1801は典型例に過ぎず、本発明の各種態様を容易に理解できるように過度に簡略化していることも理解されたい。例えば、行ノードは通例複数の単語ノードに関連付けられ、各単語ノードは、数個のインクストロークのストロークデータを含むことができる。ツリー1801はインクに関連するデータのみを含んでいるが、分析コンテクストオブジェクト1709は、上述のように、画像やタイプ入力されたテキストなどの非インク文書要素を表すノードを含むことができることにも留意されたい。
次いで図17に戻ると、本発明の一部の例では、ソフトウェアアプリケーション1701は独自の分析コンテクストオブジェクト1709を作成し、保持する。こうしたソフトウェアアプリケーション1701の場合、ソフトウェアアプリケーション1701は単に分析コンテクストオブジェクト1709への参照を提供することができる。ただし、こうしたソフトウェアアプリケーション1701の場合、アプリケーション1701は、分析オブジェクトを作成し、データを取り込み(populate)、保持するのに必要な機構を含まなくてはならない。しかし、ソフトウェア開発者によっては、アプリケーション1701にこの機構をわざわざ備えることを望まない場合もある。
ただし、このため本発明の他の例では、ソフトウェアアプリケーション1701は、分析コンテクストオブジェクト1709を作成する別のオブジェクトをインスタンス化することができる。例えば、ソフトウェアアプリケーション1701は、インク分析ツールあるいは他のオブジェクトを使用して、分析コンテクストオブジェクト1709を作成および/または保持することができる。例えば、ソフトウェアアプリケーション1701は、未分析のインクデータを識別し、インク分析ツールに提供することができる。そして、ソフトウェアアプリケーション1701からの命令に応じて、インク分析ツールは、文書1703の全体、あるいはソフトウェアアプリケーション1701によって識別された未分析のインクを含む文書の特定の1つの(または複数の)領域だけを表す分析コンテクストオブジェクト1709を作成することができる。一部のソフトウェアアプリケーション1701では、ソフトウェアアプリケーション1701は、その後、自身で、またはインク分析ツールまたは別のオブジェクトによって提供されるサービスを使用して、分析コンテクストオブジェクト1709を保持し、更新することができる。さらに他のソフトウェアアプリケーション1701では、ソフトウェアアプリケーション1701は、分析コンテクストオブジェクト1709を保持しなくともよく、代わりに必要な時に分析ツールまたは他のオブジェクトに新しい分析文書オブジェクト1709を作成させることができる。
通例、分析コンテクストオブジェクト1709は、文書1703全体の文書要素についての情報を含む。ただし、本発明の一部の実施例では、分析コンテクストオブジェクト1709は、文書1703の一部分のみの文書要素についての情報を含む場合もある。すなわち、分析コンテクストオブジェクト1709は、新しい、すなわち「dirty」なインクまたは他のデータを含む文書の空間的範囲にある文書要素のみを表すことができる。電子インクを含む、ある文書範囲にあるすべての文書要素がすでに分析されている場合、そのすでに分析された文書要素は、分析コンテクストオブジェクト1709に含めてはならない。別の代替法として、アプリケーションプログラムは、ページごと、または電子文書1703全体に関連する他のデータのサブセットごとに個別の分析コンテクストオブジェクト1709を保持することもできる。
ソフトウェアアプリケーション1701が分析コンテクストオブジェクト1709を作成すると、ステップ1603で、図19に示すようにインク分析ツール1901が分析コンテクストオブジェクト1709の少なくとも一部をコピーする。より詳細には、分析コンテクストオブジェクト1709が上記のように新しいインクおよび/または他のデータを含む領域に限定されない場合は、ソフトウェアアプリケーション1701が、分析すべき新しいインクおよび/または他のデータを含む文書1703の領域を指示する。ソフトウェアアプリケーション1701は次いでインク分析ツール1901を起動して、指示された文書1703の領域に対応する分析コンテクストオブジェクト1709の部分をコピーさせる。(無論、分析コンテクストオブジェクト1709が新しいインクを含む領域の記述にすでに限定されている場合は、インク分析ツール1901は分析コンテクストオブジェクト1709全体をコピーしてよい。)
ソフトウェアアプリケーション1701には、まだ分析されていないインクは分かるが、その電子文書1703のどの部分(例えばすでに分析済みのインク、文書構造中の基礎となるデータなど)が新しいインクに影響するか(および、したがってどの部分をインク分析ツール1901に与えるべきか)は分からない場合がある。したがって、本発明の少なくとも一部の実施例では、ソフトウェアアプリケーション1701は、分析コンテクストオブジェクト1709を通じてインク分析ツールが電子文書1703の多数の部分を入手できるようにする。ソフトウェアアプリケーション1701は、分析コンテクストオブジェクト1709を通じて実際にソフトウェアアプリケーション1701から必要とする情報の判定はインク分析ツール1901に任せる。
新しいデータを分析するための呼び出しに応答して、インク分析ツール1901は、必要な場合は、ソフトウェアアプリケーション1701が指示した領域中の新しいインクおよび/または他のデータを分析するのに必要な情報を分析コンテクストオブジェクト1709から得るために、分析コンテクストオブジェクト1709に対して各種のコールバックを行う。例えば、インク分析ツール1901は、新しいインクおよび/または他のデータに加えて、すでに分析されている指示領域中のインクおよび/または他のデータに関する情報、または指示領域中の非インク文書要素に関する情報を分析コンテクストオブジェクト1709に問い合わせることができる。「指示領域」は、本発明の少なくとも一部の実施例では、分析すべき新しいインクまたは他のデータを含む範囲にある空間的範囲および/またはその範囲に近い空間的範囲にあるデータに相当する。
すでに分析されたインクと非インク文書要素、特に新しく入力された分析対象データの近くに位置する要素は、未分析のインクまたは他のデータの分析を向上させるコンテクストを提供することができる。インク分析ツール1901が分析コンテクストオブジェクト1709から所望の情報を得ると、インク分析ツール1901は、得た情報で文書に依存しない分析コンテクストオブジェクト1903を作成する。したがって、文書に依存しない分析コンテクストオブジェクト1903は、分析コンテクストオブジェクト1709に含まれる情報の少なくともサブセットを含むが、文書1703からは独立している。上述のクエリを利用する空間的抽象化法におけるこの「コールバック」手法の使用により、大きな文書の場合でもインク分析ツール1901が必要なデータを効率的に入手し、分析することが可能になる。ただし、アプリケーション1701は、要求された時に単に内容を分析ツールに公開しないことにより、文書に依存しない分析コンテクストオブジェクト1903の内容をなお制限することができることに留意されたい。
また、インク分析ツール1901が文書に依存しない分析コンテクストオブジェクト1903を作成している間、ソフトウェアアプリケーション1701は、分析コンテクストオブジェクト1709を変更すべきでない(また、アプリケーションプログラム中の他のスレッドおよび/または他のプログラムにこの期間中に分析コンテクストオブジェクト1709を変更させることもできない)ことにも留意されたい。すなわち、ソフトウェアアプリケーション1701は、この期間中には文書1703に新しいデータを入力すべきでなく、また他のスレッドおよび/またはアプリケーションプログラムにもデータの入力を許可してはならない。ただし、文書に依存しない分析コンテクストオブジェクト1903を作成するプロセスは比較的高速であり、通例は、ソフトウェアアプリケーション1701の動作に大きな影響は与えない。ただし、必要な場合は、文書1703にデータを入力しようとする試みをキャッシュしておき、文書に依存しない分析コンテクストオブジェクト1903が作成された後にシステムに入力することができる。
文書に依存しない分析コンテクストオブジェクト1903が作成されると、分析コンテクストオブジェクト1709ではなく文書に依存しない分析コンテクストオブジェクト1903に対して続く未分析インクおよび/または他のデータのすべての分析を行い、ソフトウェアアプリケーション1701は、未分析のインクおよび/または他データの分析によって遅延を生じる、あるいは停止することなく、通常の動作を継続することができる。ソフトウェアアプリケーション1701は、文書に依存しない分析コンテクストオブジェクト1903の未分析インクの分析に支障をきたすことなく、文書1703(および分析コンテクストオブジェクト1709)に新しい電子インクデータ1705を入力することさえできる。
したがって、文書に依存しない分析コンテクストオブジェクト1903が作成されると、ステップ1605で、インク分析ツール1901は、文書に依存しない分析コンテクストオブジェクト1903のインクを分析するための別個の分析スレッドを作成する。そのため、ステップ1607で、ソフトウェアアプリケーション1701は、メインの処理スレッドの制御を再開することができ、通常の動作を継続することができる。次いでステップ1609で、インク分析ツール1901は、文書に依存しない分析コンテクストオブジェクト1903を分析のために第1の分析プロセスに提供する。例えば、図20に示すように、インク分析ツール1901は、分析スレッドを用いた構文解析のために文書に依存しない分析コンテクストオブジェクト1903を構文解析プロセス2001に渡すことができる。構文解析プロセスは、追加的に、本発明から逸脱することなく1つまたは複数の分類プロセスを含むことが可能である(例えば、インクおよび/または他のデータを、インクテキスト、インク描画、表、図、グラフィック、画像、音楽、数学、特殊化された記号を含む図(例えば抵抗、コンデンサなどを含む電気図など)などの各種のタイプに分類する)。本発明の一部の実施例では、インク分析ツール1901は、文書に依存しない分析コンテクストオブジェクト1903のコピーを作成できることに留意されたい。下記でより詳細に説明するように、文書に依存しない分析コンテクストオブジェクト1903の元の形態のコピーを使用して、分析プロセスの分析結果を文書1703の現在の状態と一致させることができる。
第1の分析プロセスは、文書に依存しない分析コンテクストオブジェクト1903中のインクおよび/または他のデータを分析すると、分析結果をインク分析ツール1901に返し、分析ツール1901は、ステップ1611でその分析結果をソフトウェアアプリケーション1701に通知する。例えば、図21に示すように第1の分析プロセスが構文解析プロセス2001である場合、構文解析プロセスは、構文解析の結果2101をインク分析ツール1901に返し、分析ツール1901は構文解析の結果(分析結果)2101への参照を(例えばイベントを発生させることにより)ソフトウェアアプリケーション1701に渡すことができる。
下記でより詳細に説明するように、本発明の一部の実施例では、構文解析の結果2101は、分析プロセスに最初に与えられる文書に依存しない分析コンテクストオブジェクト1903であってよいが、第1の分析プロセスで生成された新しい情報(この例では構文解析結果など)を含むように変更されている。ただし、本発明のさらに他の実施例では、構文解析の結果2101は、文書に依存しない分析コンテクストオブジェクト1903の変更されたコピーであってもよい。第1の分析プロセスで生成された新しい情報を文書に依存しない分析コンテクストオブジェクト1903のコピーに含めることにより、元の文書に依存しない分析コンテクストオブジェクト1903は、例えば上記の一致および/または他の分析プロセスで使用するために保持しておくことができる。
図22に、構文解析プロセス2001などの構文解析プロセスで、構文解析動作で生成されたレイアウト変更を示すようにデータツリー1801を変更する仕組みを表す例を示す。この図で分かるように、構文解析プロセス2001は、ストロークデータ1823によって表される未分析のインクストロークが、単語ノード1813で表される単語の一部であると判定している。したがって、構文解析プロセスは、ルートノード1803とのストロークデータ1823の関連付けを解除し、代わりに単語ノード1813と関連付けている。
また、構文解析プロセスは、未分類のストロークデータ1825および1827によって表されるインクストロークが、まだ識別されていない行ノード1809によって表される行にある新しい単語の一部であることも判定している。したがって、構文解析プロセス2001は、新しい単語ノード2201を作成し、その単語ノード2201を行ノード1809に関連付けている。構文解析プロセス2001は次いで、ストロークデータ1825および1827を新しい単語ノード2201に関連付けている。このように、構文解析の結果2101は、まだ分析されていないインクストロークと構文解析プロセス2001で識別された他のインクストローク(あるいは他の文書要素)との関係を記述する。また、構文解析の結果2101は、構文解析プロセス2001で判定された関係の変化を示すだけでなく、構文解析プロセス2001で判定された分類情報も含むことができる。例えば、インクストロークデータ1823〜1827の各インスタンスは、各自に対応するインクストロークを描画のインクストロークではなくテキストインクストロークに分類するように変更することができる。本発明の少なくとも一部の実施例では、必要な場合、構文解析の結果2101は、文書に依存しない分析コンテクストオブジェクト1903中に表すことができる。
上述したように、ソフトウェアアプリケーション1701は、第1の分析プロセスが文書に依存しない分析コンテクストオブジェクト1903を分析している間に、新しい電子インクデータ1705および新しい非インクデータ1701の両方を含む新しいデータを文書1703に入力することができる。そのため、第1の分析プロセスの結果は、もはや文書1703の現在の状態には適用できない可能性がある。例えば、構文解析プロセスがあるインクストロークがある単語に関連付けられていると判定する間に、ユーザが、そのインクストロークを文書1703からすべて(関連付けられた単語あるいはそれ以上の要素全体とともに)削除してしまっている可能性がある。したがって、ステップ1613で、構文解析の結果(分析結果)2101を文書1703の現在の状態と一致させなければならない。一致プロセスの一例を図23に概略的に示し、下記でより詳細に説明する。
本発明の一部の例では、ソフトウェアアプリケーション1701は、手動で分析結果2101を文書1703の現在の状態と一致させることができる。すなわち、ソフトウェアアプリケーション1701は、分析結果2101を調べて、どの結果が現在文書1703中にある文書要素に関連するかを判定することができる。ただし、本発明の他の実施例では、インク分析ツール1901が、分析結果2101を現在の分析コンテクストオブジェクト1709と一致させる一致機能を提供することができる(すなわち分析コンテクストオブジェクト1709が文書1703の現在のステータスを反映する。)下記でより詳細に説明するように、本発明の各種実施例の一致機能は、第1の分析プロセスによる分析結果2101と、文書1703の現在の状態に対応する分析コンテクストオブジェクト1709との矛盾あるいは「不一致」を識別する。次いでインク分析ツール1901は、ステップ1615で分析結果に基づいて分析コンテクストオブジェクト1709を更新し、ステップ1617で分析コンテクストオブジェクト1709の一致済みの分析結果から、新しい文書に依存しない分析コンテクストオブジェクト1903を作成する。
インク分析ツール1901が分析結果2101を現在の分析コンテクストオブジェクト1709と一致させる間、ソフトウェアアプリケーション1701は分析コンテクストオブジェクト1709を変更してはならない(そして、アプリケーションプログラム中の他のスレッドおよび/または他のアプリケーションプログラムが分析コンテクストオブジェクト1709を変更することを許可してはならない)ことに留意されたい。すなわち、ソフトウェアアプリケーション1701は、一致が完了するまで、文書1703に新しいデータを入力すべきでなく、かつ/または他のスレッドおよび/またはアプリケーションプログラムが文書1703に新しいデータを入力できるようにしてはならない。最初に文書に依存しない分析コンテクストオブジェクト1903を作成するプロセスと同様に、一致プロセスは比較的高速であり、通例は、ソフトウェアアプリケーション1701の動作に大きな影響を与えない。ただし、必要な場合は、試みられたユーザ入力をキャッシュしておき、一致プロセスが完了した後に入力することができる。
インク分析ツール1901は、分析結果2101を文書1703の現在の状態に対応する分析コンテクストオブジェクト1709と一致させると、任意で、一致後の結果をさらなる分析のために第2の分析プロセスに提供することができる。例えば図24に示すように、インク分析ツール1901は、一致させた構文解析結果2401を認識(例えばテキスト、音楽、数学的情報、あるいはその他特殊化されたデータタイプの手書き認識)のためにインク認識プロセス2003に提供することができる。詳細には、インク分析ツール1901は、ステップ1619でこの場合も第2の分析プロセスを行うための別個の分析スレッドを作成する。インク分析ツール1901が第2の分析プロセスを実行するためのこの別個のスレッドを作成するので、ソフトウェアアプリケーション1701は、ステップ1621でこの場合も通常の動作を再開することができ、新しい電子インクデータ1705を含む新しい入力データを受け付けることさえできる。
次いでステップ1623で、インク分析ツール1901は、第1の分析プロセスによる一致させた構文解析結果2401を第2の分析プロセスに提供する。第2の分析プロセスが開始すると、ソフトウェアアプリケーション1701は、新しい未分析インクに対して第1の分析プロセスの別の実行を開始することができる。このように、複数の分析プロセスを同時に実行することができるので、第2の分析プロセスが第1の分析プロセスの結果を処理している間に、ソフトウェアアプリケーション1701は、第1の分析プロセスを再度開始して次の分析結果のセットを準備することができる。
有利には、分析プロセスを並行して実行することにより、ソフトウェアアプリケーション1701の動作を向上させることができる。例えば、構文解析プロセスは通例は認識分析プロセスに比べて高速であり、構文解析の結果を使用して、認識分析の結果を用いずに正しい選択の振る舞いとスペース挿入の振る舞いとを実施することができる。このように、異なる分析プロセスを並行して実行することができるので、文書1703に追加された新しいインクは、認識分析プロセスがそれより前のインクデータの処理を終えるのを待たずに、正しく選択されるか、あるいはスペース挿入されることができる。さらに、本発明の各種の実施例では、非同期のインク分析を実現して、アプリケーション開発者とパーサおよびレコグナイザのアルゴリズム開発者からマルチスレッド化の問題を扱わずに済むようにし、保守性を向上し、両分野の開発プロセスを簡略化し、アプリケーションに変更を加えることなく分析プロセス間の対話を変更できるようにする。
上記のように、インク分析ツール1901は、分析結果2101の関連部分を含むように更新された分析文書オブジェクト1703から新しい文書に依存しない分析コンテクストオブジェクト1903を作成することにより、一致させた分析結果を提供することができる。ただし、本発明の他の実施例では、インク分析ツール1901は、単に、分析結果2101を用いて元の文書に依存しない分析コンテクストオブジェクト1903を更新して、文書1703の現在の状態を反映させることもできる。さらには、インク分析ツール1901は単に、さらに分析すべき関連インクデータを第2の分析プロセスにするだけでもよい。
このように、本発明の各種の実施例では、後続の分析プロセスの前に以前の分析プロセスの結果を文書1703の現在の状態と一致させる。ただし、本発明の一部の実施例ではこの中間的な一致ステップは省略してもよいことを理解されたい。より詳細には、本発明の一部の実施例では、前に行われた分析プロセスの結果を、文書1703の現在の状態と一致させずに直接後続の分析プロセスに提供してもよい。例えば、インクレイアウトのアナライザプロセスとは別にインククラシファイアプロセスが提供される場合は、手書きテキストとして分類されたインクを、中間的な一致ステップを行わずにインクレイアウトアナライザプロセスに提供してよい。
どちらの構成でも、第2の分析プロセス2003が第1の分析プロセスによる一致させた構文解析結果2401の分析を完了すると、図25に示すように、第2の分析プロセス2003は、認識結果2501をインク分析ツール1901に返す。次いでインク分析ツール1901は、ステップ1625で第2の分析の結果である結果2501をソフトウェアアプリケーション1701に通知する。
先に述べたように、ソフトウェアアプリケーション1701は、第2の分析プロセスで第1の分析プロセスの一致された構文解析結果2401を分析している間に、新しい電子インクデータ1705を含む新しいデータを文書1703に入力することができる。したがって、第2の分析プロセスの結果である結果2501は、もはや文書1703の現在の状態に適用できない可能性がある。したがって、ステップ1627で第2の分析プロセス2003の結果2501も文書1703の現在の状態と一致させなければならない。一致プロセスの一例を図26に概説し、下記でより詳細に説明する。
ここでも、本発明の一部の実施例では、ソフトウェアアプリケーション1701は、手動で第2の分析の結果2501を文書1703の現在の状態と一致させることができる。あるいは、本発明の他の実施例では、インク分析ツール1901が、分析結果2101を現在の分析コンテクストオブジェクト1709と一致させる一致機能を提供することができる。この一致機能は、第2の分析の結果2501と、文書1703の現在の状態に対応する分析コンテクストオブジェクト1709との間の矛盾あるいは「不一致」を識別し、インク分析ツール1901は次いでステップ1629で分析結果に基づいて分析コンテクストオブジェクト1709を更新する。このプロセスは、必要に応じて繰り返して、新しいインク入力、または分析プロセス中に変更されたインクを分析することができる。
上述の説明から、本発明の各種実施例によるインク分析技術は、ソフトウェアアプリケーション1701と非同期に電子インクを分析することを可能にし、ソフトウェアアプリケーション1701が、分析プロセス中に新しい電子インクを含む入力データの受付を継続できるようにすることが明らかであろう。上記の説明では2つのみの分析プロセスを記載したが、任意数の分析プロセスを並行して同時に実行できることに留意されたい。例えば、本発明の各種実施では、第1の構文解析プロセス、第2の構文解析プロセス、および認識プロセスを用いることができる。このようにして、各分析プロセスが完了するとその結果を次の分析プロセスに渡すことができ、新しく入力されたインクに対して第1の分析プロセスを同時に並行して再度実行することができる。
さらに、本発明の各種の実施例では、1つまたは複数の分析プロセスを順次実行することができる。例えば、一部のソフトウェアアプリケーションでは、ユーザが、英語か日本語などインクストロークまたはインクストロークの集合に対して特定の言語を指定できる場合がある。この言語の指定は、分析コンテクストオブジェクト1709および文書に依存しない分析コンテクストオブジェクト1903に含めることができる。インク分析ツール1901は、言語の指定に基づいて、第1の言語に指定された電子インクを第1の言語に特化した認識プロセスに送り、次いで、第2の言語に指定された電子インクをその第2の言語に特化した別の認識プロセスに送ることができる。これと同様に、他の特定のタイプとして分類および/または指定された入力データを、音楽専用のレコグナイザ、あるいは電気記号、数学記号、フローチャートの要素、グラフィックの要素専用のレコグナイザなど、他の特殊化されたレコグナイザに送ることができる。
さらに、分析プロセスはソフトウェアアプリケーション1701の一部である必要がないので、任意の所望の分析プロセスを使用してソフトウェアアプリケーション1701中で電子インクを分析することができる。例えば、ソフトウェアアプリケーション開発者は、ソフトウェアアプリケーション1701に予想される電子インク入力を分析するのに特に適した構文解析プロセスまたは認識プロセスを開発し、採用することができる。
これらの技術のさらに他の変形例を本発明の各種実施で用いることができる。例えば、状況によっては、ソフトウェアアプリケーション1701が、文書1703中の各種の文書要素間の関係を反映する内部文書ツリーを保持することが望ましくない場合がある。代わりに、ソフトウェアアプリケーション1701は、電子インク入力に関する単純な状態情報だけを用いるようにすることができる。そうしたソフトウェアアプリケーション1701の場合、ソフトウェアアプリケーション1701は、文書1703全体の現在の状態を反映する分析コンテクストオブジェクト1709の作成を省略することができる。代わりに、ソフトウェアアプリケーション1701は、ソフトウェアアプリケーション1701が分析を要求する特定のインク入力に関連する情報だけを含む、目的に固有の分析コンテクストオブジェクト1709を作成することができる。目的に固有の分析コンテクストオブジェクト1709を用いることにより、ソフトウェアアプリケーション1701は、文書1703の状態に対応する内部データ構造を保持する複雑性を回避し、一方で、なお所望の分析プロセスを用いて文書中のインクを分析することができる。
また、上述の説明では非同期の電子インク分析について述べたが、本発明の各種の実施例では、インク分析ツール1901がインクを同期して分析できるようにしてもよいことに留意されたい。例えば、本発明の一部の実施では、ソフトウェアアプリケーション1701がインク分析ツール1901に電子インクの分析を直ちに同期して行うように指示できるようにすることが可能である。さらに、同期した分析は、文書1703の特定の領域内だけにも、または文書1703全体のインクに行うこともできる。
インク分析ツール
上述のように、インク分析ツール1901は、各種の機能を実行して電子インクの処理を容易にする。例えば、本発明の各種実施によれば、インク分析ツール1901は、分析すべきインクデータを含む文書1703の1つまたは複数の領域を指示する情報をソフトウェアアプリケーション1701から受け取り、ソフトウェアアプリケーション1701に問い合わせてそれらの領域に関する情報を取得し、その情報に基づいて文書に依存しない分析コンテクストオブジェクト1903を構築する。インク分析ツール1901は、さらに、文書に依存しない分析コンテクストオブジェクト1903を分析のために1つまたは複数の分析プロセスに提供し、次いで分析プロセスの結果を文書1703の現在の状態と一致させる。これら各種のプロセスは、本発明から逸脱せずに、個別のスレッド(上記)を使用して、スレッドプールを介して、別個のプロセスとして、クラスタの個別のマシンを介して、あるいは、他の適切または所望の方式で行うことができる。
本発明の別の実施例によれば、各種のソフトウェアオブジェクトおよびツールを用いてインク分析ツール1901を実施し、上記の機能を実行することができる。ただし、本発明の一部の実施例では、インク分析ツール1901は、アプリケーションプログラミングインターフェース(API)として実施される。より詳細には、本発明の一部の実施例によれば、インク分析ツール1901は、文書1703中のインクを分析するために必要に応じてソフトウェアアプリケーション1701から呼び出すことができる、ソフトウェアオブジェクトルーチンと関連情報との群として実施することができる。
当業者には理解されるように、アプリケーションプログラミングインターフェースは、ソフトウェアオブジェクトに属するカテゴリあるいは「クラス」に編成することができる。「オブジェクト」とは、記憶することが可能な状態値と実行可能な振る舞いの集合である。より詳細には、オブジェクトは、そのオブジェクトに関連付けるか、そのオブジェクトによって取り出すことができる、「フィールド」および「プロパティ」と称される各種タイプの状態値を保持することができる。それらのプロパティは、外部のソフトウェアアプリケーションまたは別のソフトウェアオブジェクトに対しては、読み取り専用(用語「{get;}」の使用によって識別される)、書き込み専用(用語「{set;}」の使用によって識別される)、または読み取りと書き込みの両方を可能(「{get;set}」として識別される)とすることができる。オブジェクトは、多くの場合はソフトウェアアプリケーションまたは別のオブジェクトからの要求あるいは「呼び出し」に応じてタスクあるいは「メソッド」を実行することもできる。このように、アプリケーションプログラミングインターフェースは、別のソフトウェアアプリケーションから指示されて要求に応じて特定のタスクを実行するか、特定の情報を提供することができる各種のオブジェクトを含むことができる。
本発明の各種の実施例は、ソフトウェアアプリケーション1701が所望の分析プロセスを完了するのに必要な最小限の量の情報だけを提供すればよいように実施できることに留意されたい。この理由により、下記で詳細に説明するプロパティの一部は、読み取り専用(すなわち「{get;}」)または書き込み専用(すなわち「{set;}」)のみとして述べるが、本発明の各種の代替の実施では読み取りと書き込みの両方を可能とすることができる。例えば、電子インクを分析するために分析プロセスで使用される「ヒント」を定義するプロパティは、ソフトウェアアプリケーション1701がヒントを使用しないことになっている状況では読み取り専用のプロパティとして識別することができる。これにより、インクアナライザによって作成されたオブジェクトがこのプロパティを少なくとも読み取り、このプロパティの値がヌルのデフォルト値である(すなわちソフトウェアアプリケーション1701が「ヒント」を必要としない)と判定することが可能になる。ただし、ソフトウェアアプリケーション1701がインク分析のためにヒントを用いることを要求する場合は、このプロパティは、読み取りおよび書き込みの両方が可能となって、ソフトウェアアプリケーション1701が所望のヒントを指定するためにこのプロパティの値をヌル値から変更できるようにする。
本発明の各種の実施例によれば、インク分析ツール1901の実装を実施するAPI(以下インク分析APIと称する)は、2つのコアクラスを含むことができる。第1のクラスは「分析コンテクスト」クラスと称し、第2のクラスは「インクアナライザ」クラスである。「分析コンテクスト」クラスのコンポーネントは、分析コンテクストオブジェクト1709を作成するために使用される。したがって、ソフトウェアアプリケーション1701が独自の分析コンテクストオブジェクト1709を作成し維持する本発明の各種実施では、このクラスのコンポーネントの1つまたは複数をインク分析ツールから省略することができる。代わりに、これらコンポーネントの1つまたは複数をソフトウェアアプリケーション1701自体によって実施することができる。
そして「インクアナライザ」クラスのコンポーネントを使用して、文書に依存しない分析コンテクストオブジェクト1903を分析プロセスに提供するオブジェクトを作成および使用し、分析結果が生成された時にその事を判定し、分析結果を文書1703の現在の状態と一致させる。本発明の各種実施例によるインク分析APIに含めることが可能なこれらおよびその他のクラスについて下記で詳細に述べる。
まず分析コンテクストクラスを見ると、このクラスをソフトウェアアプリケーション1701によって実施して、ソフトウェアアプリケーション1701の内部文書ツリーに対する代理(proxy)ビューとして機能する分析コンテクストオブジェクト1709を作成する。あるいは、先に述べたように、アプリケーションが独自の分析コンテクストオブジェクトを実施する場合は、このクラスの1つまたは複数のコンポーネントをインク分析ツール1901から省略することができる。上述のように、分析コンテクストオブジェクト1709はすべての未分析インクデータを含んでおり、分析コンテクストオブジェクト1709を使用して分析すべき未分析インクデータを識別する。分析コンテクストオブジェクト1709は、すでに分析されたインクについての情報も含む。このすでに分析されたインクを使用して現在まだ分析されていないインクをどのように分析すべきかを判断することができ、また未分析インクを分析する過程でこの分析済みのインク自体を変更してもよい。さらに分析コンテクストオブジェクト1709は、文書1703の非インク内容についての情報を含み、この情報を使用して非インク情報に対する注釈として正しくインクを分類する。
本発明の各種実施例によれば、分析コンテクストクラスは、ソフトウェアアプリケーション1701から呼び出されると分析コンテクストオブジェクト1709を作成するコンストラクタを含む。このクラスは、「Dirty Region{get;}」と称するプロパティなど、分析コンテクストオブジェクト1709の各種のプロパティも含むことができる。Dirty Regionプロパティは、未分析のインクデータを含む文書の部分(およびしたがって分析コンテクストオブジェクト1709の部分)を定義する。本発明の各種の実施例では、Dirty Regionは互いに素の範囲を定義することができる。Dirty Regionは、下記でより詳細に説明するAnalysisRegionとして指定されるが、単に文書中の長方形範囲の集合であってもよい。Dirty Regionが空の場合は分析が行われない。このクラスはさらに、「Margins{get;}」と称する分析コンテクストオブジェクト1709のプロパティを含むことができ、このプロパティは、余白と見なす文書1703中のページ範囲を宣言する。例えばレイアウトを分析し、電子インクの分類を判定する分析プロセスがこのプロパティを使用して、非インク内容に注釈を付す電子インク(例えば余白内のインク)の分類を判定する助けとすることができる。
さらには、分析コンテクストクラスは、分析コンテクストオブジェクト1709中の最上位ノードすなわちルートコンテクストノードを識別する「Rootnode{get;}」と称するプロパティを含むことができる。上記でより詳細に説明したように、このルートコンテクストノードは、子コンテクストノードとして、所与の分析コンテクストオブジェクト1709のすべての他のコンテクストノードオブジェクトを含む。本発明の各種の実施例では、ルートコンテクストノードはコンテクストノードタイプ「Root」でなければならないことに留意されたい。また、ソフトウェアアプリケーション1701が独自の分析コンテクストオブジェクト1709を実施する本発明の実施例では、分析コンテクストオブジェクト1709は、他のコンテクストノードをルートコンテクストノードの兄弟ノードとして有することができるが、インクアナライザクラスのコンポーネントは、ルートコンテクストノードに含まれるコンテクストノードを考慮するように限定できることにも留意されたい。
分析コンテクストクラスは、さらに、ソフトウェアアプリケーション1701によって設定された分析ヒントオブジェクトの配列を返すプロパティ「Analysis Hints{get;}」を含むことができる。下記でより詳細に述べるように、この分析ヒントオブジェクトは、分析プロセスを支援する任意タイプの情報を含むことができる。この情報には、例えば擬似事実(factoid)、ガイド、または単語リストを含めることができる。また、この情報は、分析に使用する言語を設定する情報、未分析のインクを手書きテキストのみあるいは描画のみに指定する情報、あるいはインクをリスト、表、形状、流れ図、連結、囲みなどと識別する情報等、構文解析プロセスに任意の種の誘導を提供する情報も含むことができる。
これらのプロパティに加えて、分析コンテクストクラスは、例えばソフトウェアアプリケーション1701によって呼び出して分析コンテクストオブジェクト1709にタスクを実行させることができる各種メソッドを含むこともできる。例えば、分析コンテクストクラスは、「FindNode(Guid id)」と称するメソッドを含むことができる。分析コンテクストオブジェクト1709中の各ノードはグローバル一意識別子(あるいはGUID)を持ち、このメソッドは、呼び出し中で指定されたノードを、分析コンテクストオブジェクト1709中のどこからでも見つける。この探索メソッドは、多くの時間が重視される動作から呼び出される可能性があるので、可能な限り効率的に実施すべきである。
分析コンテクストクラスと同様に、インクアナライザクラスも、ソフトウェアアプリケーション1701がこのクラスのインスタンス(すなわちインクアナライザオブジェクト)を作成することを可能にするパブリックコンストラクタを各種プロパティとともに定義する。例えば、インクアナライザクラスは、分析プロセスの結果が返される処理スレッドを定義する「User Interface Context{get;set;}」と称するプロパティを含むことができる。このプロパティにより、結果を別のオブジェクトと同期することができる。例えば、このプロパティがメインフォームに設定されると、パーサの結果はアプリケーションのメインスレッドで発生する。インクアナライザクラスは、分析プロセスで使用することが可能な各種の条件(criteria)を指定するプロパティ「AnalysisOptions AnalysisOptions{get;set;}」も含むことができる。この条件には、例えば、テキスト認識を可能にすること、表の使用を可能にすること、リストの使用を可能にすること、注釈の使用を可能にすること、および連結および囲みの使用を可能にすること等が挙げられる。
インクアナライザクラスは各種のメソッドを含む。例えば、このクラスは、「AnalysisRegion Analyze()」と称するメソッドを含むことができる。このメソッドは、同期された分析プロセスを開始する。このメソッドに、文書1703の現在の状態を記述し、文書1703中のどのインクを分析する必要があるかを指示する文書要素のデータが渡される。本発明の一部の実施では、文書要素データは、上記のように分析コンテクストオブジェクト1709として(すなわちAnalysisRegion Analyze(Analysis Context))提供することができる。あるいは、個々のインクストロークを、そのストロークへの参照を使用する(すなわちAnalysisRegion Analyze(Strokes))か、インクアナライザオブジェクトのプロパティとして参照する(例えばInkAnalyzer.Strokes{get;set})ことによりAnalyzeメソッドにプロパティを渡さずに、分析プロセスに渡すことができる。
分析プロセスが完了すると、このメソッドは、分析プロセスの結果を含むように変更された文書に依存しない分析コンテクストオブジェクトへの参照を返す。このメソッドは、結果が計算された文書中の範囲を記述するAnalysisRegion値(下記で詳細に説明する)も返す。
インクアナライザクラスは、「AnalysisRegion AnaIyze(AnalysisContext、waitRegion)」と称するメソッドも含むことができる。このメソッドは、上述の同期のAnalysis Region Analyze()メソッドと同じであるが、指定されたwaitRegion範囲の中で結果が必要とされる場合にのみインクを分析させる。より詳細には、このメソッドを呼び出すと、文書1703の分析コンテクストオブジェクト1709と、分析プロセスが同期して分析すべき分析コンテクストオブジェクト1709の領域(これを「waitRegion」と称する)が識別される。本発明の各種の実施例では、分析プロセスがwaitRegionの分析を完了するために分析コンテクストオブジェクト1709のすべての他の領域中の内容を分析する必要がなければ、それらすべての他の領域は無視される。上述のように、このメソッドと共に渡される分析コンテクストオブジェクト1709は、分析を必要とする文書1703の範囲を記述する「DirtyRegion」と称するプロパティを含んでいる。ソフトウェアアプリケーション1701は、特定のwaitRegionを指定することにより、文書1703中のすべてのインクデータを分析させるのではなく、対象とする特定の一領域についてより迅速に分析結果を得ることができる。
これらのAnalyzeメソッドのいずれかが呼び出されると、すべての利用可能な分析プロセスが実行される。また、これらのAnalyzeメソッドは同期呼び出しなので、これらのメソッドが完了した時に一致プロセスを実行する必要がなく、またこれらのメソッドが完了した時にイベントが発生しない。
インクアナライザクラスは、「BackgroundAnalyze(AnalysisContext)」と称するメソッドも含むことができる。このメソッドは、指定された分析動作を開始するが、別個のバックグラウンド分析スレッドでその動作を開始する。したがって、このメソッドは、実際の分析動作がバックグラウンドで完了するとほぼ即時にメインの処理スレッドにコントロールを返す。詳細には、このメソッドは、分析プロセスが正常に開始された場合には「真」の値を返す。この場合も、このメソッドに渡されるAnalysisContext値が文書1703の分析コンテクストオブジェクト1709を識別し、分析する必要がある文書1703中のインクを指示する。バックグラウンドスレッドで分析動作が完了すると、Resultsイベントを発生させて、ソフトウェアアプリケーション1710が結果にアクセスできるようにする。このイベントは、結果と、結果が返された時に文書1703の現在の状態に対応する分析コンテクストオブジェクト1709にその結果を組み込むために使用される一致メソッドとを含んでいる。
これら3つのAnalyzeメソッドはそれぞれ、「Analysis Region」クラスのメソッド「Clone」を呼び出すことに留意されたい。このメソッドについては下記で詳細に説明する。これらのAnalyzeメソッドは、「Clone」メソッドを使用して、後に分析プロセスで分析結果を示すように変更される、文書に依存しない分析コンテクストオブジェクトを作成する。
インクアナライザクラスは、「Reconcile(AnalysisContext current、AnalysisResultsEventArgs resultArgs)」と称するメソッドも含むことができ、このメソッドは、BackgroundAnalyze(AnalysisContext)メソッドを呼び出すことによって生じた結果イベントを受け取った後にソフトウェアアプリケーション1701が呼び出す。Reconcileメソッドは、文書に依存しない分析コンテクストオブジェクトに含まれる分析結果を、ソフトウェアアプリケーション1701によって保持されている分析コンテクストオブジェクト1709の現在のバージョンと比較する。このメソッドは、分析コンテクストオブジェクト1709の現在のバージョンに追加または削除する必要があるノードを識別し、また、認識結果、位置、そのノードに関連付けられたインクストローク、あるいは分析動作の結果に関連付けられた任意の他のデータ等、既存ノードのプロパティのいずれかが変化しているかどうかを識別する。このメソッドはまた、その識別された変化を現在のバージョンの分析コンテクストオブジェクト1709に書き込む。このメソッドは、行コンテクストノードにおける単語コンテクストノードの順序など、コンテクストノードの順序の順序付けに影響される。
分析結果(すなわちプロパティAnalysisResultsEventArgsの値)は、パブリックの結果構造とプライベートの結果構造とを含んでいるのでこのメソッドと共に返される。パブリックな構造は、ソフトウェアアプリケーション1701が一致段階で生じる変化を事前に確認できるようにするために返される。プライベートな構造は、ソフトウェアアプリケーション1701が一致プロセスの前に分析結果を変更できないようにするために含められる。
インクアナライザクラスは、「Recognizers RecognizersPriority()」および「SetHighestPriorityRecognizer(recognizer)」と称するメソッドも含むことができる。インクを認識する必要がある場合は、言語と能力に応じて適切なレコグナイザが使用される。したがって、Recognizers RecognizersPriority()メソッドは、Ink Analyzerオブジェクトによって評価される順序で認識プロセスを返す。この順序は、利用可能な認識プロセスに応じてシステムごとに決定されるが、Ink Analyzerオブジェクトに対してSetHighestPriorityRecognizer(recognizer)を呼び出すことにより、ソフトウェアアプリケーション1701ごとに無効にすることができる。InkAnalyzerは、適切なレコグナイザが見つかるまでこの順序付けられたリストを列挙する。SetHighestPriorityRecognizer(recognizer)メソッドは、認識プロセスの優先順位を生成(raise)する。特定の認識プロセスの優先順位を生成することにより、現在の認識動作の能力と必要とされる言語に一致する場合にはその認識プロセスが使用される。基本的に、SetHighestPriorityRecognizer(recognizer)は、指定された認識プロセスをRecognizersPriorityメソッドから返されるリストの一番上にプッシュする。
インクアナライザクラスは、分析コンテクストオブジェクトをパラメータとして使用することができる「AnalysisRegion Abort()」と称するメソッドも含むことができる。このメソッドは、フォアグラウンドまたはバックグラウンドの分析動作を早く終了させることができる。このメソッドは、中断される前に分析されていた範囲を記述する分析領域を返す。したがって、ソフトウェアアプリケーション1701が後の時間に分析動作を継続するつもりである場合は、その領域を、文書1703の現在の状態に対応する分析コンテクストオブジェクト1709のDirtyRegionに併合することができる。さらに、インクアナライザクラスは、実際的である限り頻繁にInkAnalyzerオブジェクトに対して発生する「AnalysisResultsEventHandler」と称するイベントを含むことができる。より詳細には、このイベントは、分析プロセスと分析プロセスの間に少なくとも5秒に一回発生することができる。このイベントを使用して、進行中の非同期の分析プロセス(群)のステータスについての更新をアプリケーション1701に提供することができる。
インク分析APIは、分析コンテクストクラスおよびインクアナライザクラス以外のクラスも含むことができる。例えば、本発明の各種実施例によるインク分析APIは、コンテクストノードクラスを含むことができる。このクラスは、「ContextNodeType Type{get;}」と称するプロパティなど、分析コンテクストオブジェクト1709および文書に依存しない分析コンテクストオブジェクトを構成するコンテクストノードに関連する各種のコンポーネントを含むことができる。当業者には理解されるように、各コンテクストノードにはタイプがあり、各タイプが遵守しなければならない特定の規則セットがある。この規則には、例えば、許可される子コンテクストノードのタイプ、ストロークを直接コンテクストノードに関連付けてよいか否か、あるいはその子コンテクストノードを介してのみ関連付けてよいか否かについての規則が含まれる。
可能なコンテクストノードのタイプは、ContextNodeTypesの列挙中で定義することができ、例えば(これらに限定しないが)次のようなタイプが可能である。それは、非テキストデータに注釈を付すインクデータを表すInkAnnotationノード、描画を形成するインクデータを表すInkDrawingノード、単語を形成するインクデータを表すInkWordノード、テキストの行を形成する単語に対応する1つまたは複数のInkWordノードおよび/またはTextWordノードを含むLineノード、段落ノード、画像ノード、あるいはリスト中にあることが予想される同様のノードを含むことが可能なListItemノード、および、それぞれがリスト中の項目を記述する1つまたは複数のListItemノードを含むListノードである。また、可能なノードタイプには非インクの描画画像を表すNonInkDrawingノード、ContextNodeTypeの列挙の他の値に包含されないデータを表すObjectノード、段落を形成する行に対応する1つまたは複数のLineノードを含むParagraphノード、ピクチャ画像を表すPictureまたはImageノード、分析コンテクストオブジェクト中の最上位ノードの役割を果たすRootノード、表を構成する項目を表すノードを含むTableノード、テキストボックスを表すTextBoxノード、TextWordノード、および、まだ分類されていないインクデータに対応するUnclassifiedInkノード、も含むことができる。可能なノードタイプには、他ノードのグループに対応するGroupノード、中黒項目についてのInkBulletノード、表の行に提示される文書要素についてのRowノード、および表のセル中に提示される文書要素についてのCellノードも含めることができる。
コンテクストノードクラスは、現在のコンテクストノードのグローバル一意識別子である「GUID Id{get;}」と称するプロパティも含むことができる。必要なコンテクストノードにアクセスできるようにするために、単一の分析コンテクストオブジェクト中の各コンテクストノードは、必ず一意の識別子を持たなければならない。このクラスは、関連するコンテクストノードが実際に位置する文書空間中の場所を識別する「AnalysisRegion Location{get;}」と称するプロパティも含むことができる。先に述べたように、AnalysisRegionは、1つまたは複数の可能性としては互いに素の長方形のような構造を共にグループ化する2次元構造である。このクラスは、関連するコンテクストノードに関連付けられたインクストロークを識別する「StrokeCollection Strokes{get;}」と称するプロパティも含むことができる。本発明の各種の実施例では、葉コンテクストノード(単語、描画、中黒ノードなど)だけがストロークを持つことがインク分析APIによって許可される。ソフトウェアアプリケーション1701は、このプロパティを使用して、葉ノードレベルにあるストロークをすべての祖先コンテクストノードから参照付ける(例えば、ルートノードが、関連する分析コンテクストオブジェクト中のすべてのストロークへのストローク参照を含む)。
さらに、このクラスは、関連するコンテクストノードを含んでいる親コンテクストノードを識別する「ContextNode ParentNode{get;}」と称するプロパティを含むことができる。本発明の各種の実施例では、コンテクストノードは必ず親コンテクストノードの子ノードとなるように作成され、ルートコンテクストノードが分析コンテクストオブジェクトの静的メンバになる。このクラスは、関連するコンテクストノードの直接の子であるすべてのコンテクストノードを識別するプロパティ「ContextNode[] SubNodes{get;}」も含むことができる。すなわち、このプロパティは、分析コンテクストオブジェクト中で1レベル下の子コンテクストノードだけを識別する。例えば、段落コンテクストノードの場合のこのプロパティの値は、その段落ノードに含まれる行コンテクストノードのみを識別し、それらの行コンテクストノードの子である単語コンテクストノードは識別しない。
このクラスは、「RecognitionResult RecognitionResult{get;}」と称するプロパティも含むことができ、RecognitionResultは2つ以上の言語の2つ以上のテキスト行を表すことができるので、このプロパティは、関連する認識分析プロセスによって計算された認識結果を提供する。Recognition Resultは、認識分析プロセスによって設定され、RecognitionResultオブジェクトを作成するために使用されるRecognitionDataプロパティ(下記でより詳細に説明する)がデータの重複を回避するためにコンテクストノードツリーの1レベルでしか設定できなくとも、文書に依存しない分析コンテクストオブジェクト中のすべてのコンテクストノードに利用することができる。ノードにRecognitionDataが関連付けられていない場合、そのノードは、そのすべての下位ノードの認識結果を併合するか、または自分の親から認識結果を抽出する。このクラスは、RecognitionResult値の永続的な形態である「Stream RecognitionData{get;set;}」と称するプロパティも含むことができる。ここでも、認識分析プロセスが、関連するコンテクストノードに対して設定されるStream RecognitionData値を生成する。次いで、その値に基づいてRecognitionResultオブジェクトが構築される。
Context Nodeクラスはさらに、ContextLinkオブジェクトの配列を提供する「ContextLink[] Links{get;}」と称するプロパティを含むことができる。ContextLinkオブジェクトは、2つのコンテクストノード間の代替の関係を記述する。通例、コンテクストノードは他のコンテクストノードと親子関係を有するが、ContextLinkはコンテクストノード間の代替の関係を可能にする。ContextLinkは例えば、2つのコンテクストノードの接続、あるコンテクストノードの別のコンテクストノードへの固定、別のコンテクストノードによるコンテクストノードの包含、あるいはソフトウェアアプリケーション1701が定義する所望タイプのリンクを可能にすることができる。下記でより詳細に説明するように、AddLinkメソッドを呼び出すことによりこの配列にContextLinkを追加することができる。同様に、DeleteLinkメソッドを呼び出すことによりこの配列からContextLinkを削除することができる。これも下記でより詳細に説明する。
Context Nodeクラスは、さらに、プロパティ「IsContainer{get;}」と「IsInkLeaf{get;}」とを含むことができる。プロパティIsContainer{get;}は、関連するコンテクストノードが葉コンテクストノードでない場合(すなわち関連するコンテクストノードが子コンテクストノードを含み、したがって囲みコンテクストノードと見なされる場合)に「真」の値をとり、その他の場合は「偽」の値をとる。IsInkLeaf{get;}プロパティは、現在のコンテクストノードが囲みコンテクストノードでない場合に「真」の値をとり、その他の場合は「偽」の値をとる。すなわち、現在のコンテクストノードが子コンテクストノードを含まない場合、そのノードは葉コンテクストノードと見なされる。また、本発明の各種の実施例では、InkLeafコンテクストノードは、ストロークデータへの参照を含むものとされるのに対して、囲みコンテクストノードにはこの制約がないことにも留意されたい。囲みコンテクストノードは、ソフトウェアアプリケーション1701の指示に応じて、ストロークデータを参照することも、しないこともある。
Context Nodeクラスは、プロパティ「Rect RotatedBoundingBox{get;set;}」も含むことができる。このプロパティの値は、レイアウトおよび分類の分析プロセスで計算される。関連するコンテクストノードに関連付けられたインクデータがある角度で書かれている場合でも、コンテクストノードの境界はなお水平方向に位置合わせされる。しかし、RotatedBoundingBoxプロパティの値は、関連するコンテクストノードに関連付けられたインクデータが書かれた角度に合わせて調整される。さらに、このクラスは、関連するコンテクストノードの値を変更することが許可されているかどうかどうかをInkAnalyzerに通知するプロパティ「ReClassifiable{get;}」を含むことができる。
これらのプロパティに加えて、Context Nodeクラスは、各種のメソッドも含むことができる。例えば、このクラスは、「ContextNode CreateSubNode(ContextNodeType type)」と称するメソッドを含むことができる。このメソッドは、特定のタイプの子コンテクストノードを作成することを可能にする。本発明の各種の実施例では、このメソッドは、有効な子タイプの関連コンテクストノードの作成だけを許可し、それにより形式が正しくないデータ構造が作成されないようにする。例えば、このメソッドは、行コンテクストノードがInkWordおよびTextWordの子コンテクストノードを作成することだけを許可することができる。このクラスは、関連する分析コンテクストオブジェクトから参照される子コンテクストノードを削除する「void DeleteSubNode(ContextNode node)」と称するメソッドも含むことができる。ただし、本発明の各種の実施例では、参照されるコンテクストノードがさらにストロークすなわち子コンテクストノードを含む場合は、このメソッドは失敗することに留意されたい。また、参照コンテクストノードが関連するコンテクストノードの直接の子でない場合もこのメソッドは失敗する。ソフトウェアアプリケーション1701が独自の分析コンテクストオブジェクト1709を実施し、このメソッドを使用する場合、このメソッドは、空でないコンテクストノードまたは、関連するコンテクストノードの直接の子でないコンテクストノードを削除しないことにより、分析コンテクストオブジェクト1709中に形式が正しくないデータ構造が生成されないようにすることに留意されたい。
さらに、このクラスは、指定される領域内に位置するコンテクストノードの配列を返すメソッド「ContextNode[] HitTestSubNodes(AnalysisRegion region)」を含むことができる。ただし、すべての子孫が返されるのではなく、その要素の直接の子ノードだけが返されることに留意されたい。この領域は、先に説明したように1つまたは複数の長方形の集合などであるAnalysisRegionオブジェクトで定義される。本発明の各種の実施例によれば、あるコンテクストノードの位置の一部が指定領域と重なる場合は、そのコンテクストノードが配列で返される。このメソッドは、例えば文書に依存しない分析コンテクストオブジェクトを作成し、分析結果を文書1703の現在の状態に対応する分析コンテクストオブジェクトと一致させるために用いられる。したがって、このメソッドは頻繁に呼び出され、InkAnalyzerオブジェクトによる反復的な高速アクセスのために最適化すべきである。
Context Nodeクラスは、「MoveStroke(Stroke stroke、ContextNode destination)」と称するメソッドも含むことができる。このメソッドは、ストロークの関連付けをある葉コンテクストノードから別の葉コンテクストノードに移動する。本発明の各種の実施例では、このメソッドは、葉コンテクストノード間でのみ使用される。このクラスは、兄弟コンテクストノードに対して関連するコンテクストノードの順序を変える「MoveSubNodeToPosition(int OldIndex、int NewIndex)」と称するメソッドも含むことができる。例えば、文書1703がある行に例えば単語1、単語2、および単語3の3つの単語を有する場合、その単語の順序は、親コンテクストノードから返される下位ノードの配列によって暗示される。このメソッドはその順序を変えることができ、単語1のコンテクストノードを位置1から位置3に移動することにより、関連する親コンテクストノードに対して単語1がその行で最後の単語であることが指示される。
さらに、このクラスは、現在のコンテクストノードに新しいContextLinkオブジェクトを追加する「AddLink(ContextLink link)」と称するメソッドを含むことができる。本発明の各種実施例で、関連するコンテクストノードに関連付けられたContextLinkの配列へのContextLinkの追加が成功するように、ContextLinkオブジェクトは、関連するコンテクストノードへの参照を含まなくてはならない。このクラスは、「DeleteLink(ContextLink link)」と称するメソッドも含むことができる。このメソッドは、関連するコンテクストノードのContextLinkの配列から、指定されたContextLinkオブジェクトを削除あるいは除去する。本発明の各種実施例では、このメソッド呼び出しは、関連するコンテクストノードに関連付けられたContextLinkの配列中にContextLinkが存在しない場合でも、常に成功して完了することに留意されたい。
インク分析APIはAnalysis Hintクラスも含むことができる。上述のクラスの多くと同様に、Analysis Hintクラスは、Analysis Hintオブジェクトを空の状態に初期化する「AnalysisHint()」と称するコンストラクタを含むことができる。このクラスは、「AnalysisRegion Location{get;}」と称するプロパティなどいくつかのプロパティを含むこともできる。AnalysisRegion Location{get;}プロパティは、AnalysisHintを適用することが可能な文書1703中の場所を(AnalysisRegionとして)指定する。例えば、文書1703が、タイトル部分がページの一番上にある自由形式のメモである場合、アプリケーション1701は、タイトル領域に対してAnalysisHintを設定して、インクの水平線がその領域に予想されることを示すことができる。このAnalysis Hintは、分析プロセスの精度を高める一助となる。
このクラスは、AnalysisHintを適用することが可能な文書1703中の場所に使用する特定の「擬似事実」を指定する「string Factoid{get;set;}」と称するプロパティも含むことができる。当業者には知られるように、擬似事実は、予想されるインクデータの使用法(例えば通常のテキスト、数字、郵便番号、ファイル名、ウェブのURLなどとしての使用)について認識プロセスにヒントを与える。このクラスは、「RecognizerGuide Guide{get;set;}」および「OverrideLanguageId{get;set;}」と称するプロパティも含むことができる。RecognizerGuide Guide{get;set;}プロパティは、AnalysisHintを適用することが可能な文書1703中の場所に適用すべき書き込みガイドを指定する。書き込みガイドは、例えば、ユーザが行または文字をどこに書くかをユーザに指定し、レコグナイザ分析プロセスに通知することにより、レコグナイザ分析プロセスの精度を高める助けとなることができる。OverrideLanguageId{get;set;}プロパティは、AnalysisHintを適用することが可能な文書1703に対して言語のヒントを指定する。Language Hintを設定することにより、InkAnalyzerオブジェクトは、コンテクストノードに指定された言語の代わりに指定された言語を使用する。
このクラスは、認識しようとするインク行より前に書かれた、あるいはタイプされたテキストを指定する「PrefixText{get;set;}」と称するプロパティも含むことができる。このクラスはさらに、AnalysisHintを適用することが可能な文書1703中の場所で認識プロセスが遵守すべき特定のタイプのモードを指定する「RecognitionModes RecognitionFlags{get;set;}」と称するプロパティを含むことができる。さらに、このクラスは、認識しようとするインク行の後に書かれた、またはタイプされたテキストを指定する「SuffixText{get;set;}」と称するプロパティと、認識分析プロセスが使用すべき特定の単語のセットを指定する「WordList WordList{get;set;}」と称するプロパティを含むことができる。単語のリストは、医療用フォームに書かれることが予測される医学用語のリストなど、ユーザが実際に入力データを書き終わる前に予想される認識結果が分かる場合に使用することができる。
さらにこのクラスは、「WordMode{get;set}」と称するプロパティを含むことができる。この値が「真」である場合、分析プロセスは、分析領域全体に対して単一の単語を返すように自身を偏らせる。このクラスは、「Coerce{get;set}」と称するプロパティも含むことができ、このプロパティは、「真」である場合には、分析プロセスが関連するヒント中で設定された擬似事実または単語リスト値に結果を制約することを強制する。このクラスは、「AllowPartialDictionaryTerms{get;set}」と称するプロパティも含むことができる。このプロパティが「真」である場合、認識分析プロセスは、自身の認識ディクショナリから一部の単語を返すことを許される。
本発明の各種実施例によれば、インク分析APIはさらにAnalysis Regionクラスを含むことができる。このクラスは例えば、AnalysisRegionオブジェクトを構築する複数のコンストラクタを含むことができる。例えば、このクラスは、任意の領域を有するAnalysisRegionオブジェクトを構築する第1のコンストラクタと、2次元の長方形についてのパラメータに基づいてAnalysisRegionオブジェクトを構築する第2のコンストラクタと、4つの空間座標に基づいてAnalysisRegionオブジェクトを構築する第3のコンストラクタを含むことができる。デフォルトのコンストラクタは例えば空の領域を作成する。このクラスはいくつかのプロパティも含むことができる。このクラスは例えば、AnalysisRegionの境界となる長方形を取り出す「Rectangle Bounds{get;}」と称するプロパティ、関連するAnalysisRegionオブジェクトが空の内部を有するかどうかを示す「IsEmpty{get;}」と称するプロパティ、および関連するAnalysisRegionが無限に設定されているか否かを示す「IsInfinite{get;}」と称するプロパティを含むことができる。
このクラスは、関連するAnalysisRegionオブジェクトのクローンを作成する「AnalysisRegion Clone()」と称するメソッドなど、いくつかのメソッドも含むことができる。このクラスは、指定されたAnalysisRegionオブジェクト(otherRegionと称する)が関連するAnalysisRegionオブジェクトと同一であるかどうかをテストする「Equals(AnalysisRegion otherRegion)」と称するメソッドも含むことができる。このメソッドは、指定されるAnalysis Regionオブジェクトの内部が関連するAnalysis Regionオブジェクトの内部と同一である場合は「真」の値を返し、その他の場合は「偽」の値を返す。
このクラスはさらに、指定される分析領域に合わせて関連するAnalysisRegionオブジェクトを縮小する(crop down)「Intersect(AnalysisRegion regionToIntersect)」メソッドも含むことができる。したがって、このメソッドの結果得られるAnalysisRegionオブジェクトは、指定された分析領域と重複するか、または交差した範囲だけを含む。このクラスは、指定される長方形に合わせて関連するAnalysisRegionを縮小する「Intersect(Rectangle rectangle)」と称するメソッドも含むことができる。この場合も、結果得られるAnalysisRegionオブジェクトは、指定された長方形と重複したか、交差した範囲のみを含む。このクラスは、関連するAnalysisRegionオブジェクトの内部を空に初期化する「MakeEmpty()」と称するメソッドと、関連するAnalysisRegionによって占められる範囲を無限に設定する「MakeInfinite()」と称するメソッドも含むことができる。このクラスはさらに、関連するAnalysisRegionオブジェクトに合体する、または加えるAnalysisRegionオブジェクトを指定する「Union(AnalysisRegion regionToUnion)」と称するメソッドや、指定される長方形を関連するAnalysis Regionオブジェクトと合体する「Union(Rectangle rectangle)」と称するメソッドなど、異なった形で定義された範囲を合体または分離するための各種メソッドを含むことができる。Union(Rectangle rectangle)メソッドでは、関連するAnalysisRegionオブジェクトの座標空間によって長方形を指定することができる。言うまでもなく、このクラスは、所望の範囲の定義に基づいて、範囲を組み合わせる、または別の範囲からある範囲を抽出する多数の他のメソッドを含むことができる。
インク分析APIは、Recognition Resultクラスも備えることができる。先に述べたクラスの多くと同様に、Recognition Resultクラスも1つまたは複数のコンストラクタを含むことができる。例えば、このクラスは、所与の認識ラティス(lattice)からRecognitionResultsオブジェクトを構築する「RecognitionResult(Stream lattice)」と称するコンストラクタを含むことができる。本発明の各種実施例で、認識ラティスは、認識プロセスの結果をシリアル化した形態である。このメソッドは、例えば、関連するRecognitionResultオブジェクトの構築に使用されるバイト配列として認識ラティスを指定することができる。このクラスは、所与のコンテクストノードからRecognitionResultsオブジェクトを構築する「RecognitionResult(ContextNode node)」と称するコンストラクタも含むことができる。また、「RecognitionResult(string Text、int StrokeCount)」と称するコンストラクタも含むことができ、このコンストラクタは、指定されたテキスト値からRecognitionResultsオブジェクトを構築し、そのオブジェクトは、指定された数のストロークに関連付けられ、認識プロセスで実際の手書きインクデータに対応する代替の認識値が得られなかった場合に補正のために使用することができる。さらに、このクラスは、2つの既存のRecognition Resultsオブジェクトを共に併合することによりRecognitionResultsオブジェクトを構築する「RecognitionResult(RecognitionResult leftRecognitionResult、RecognitionResult rightRecognitionResult)」と称するコンストラクタを含むことができる。
Recognition Resultクラスは、単一のインクオブジェクトに含まれるストロークの集合を表すストローク索引の配列を提供する「StrokeCollection StrokeCollection{get;}」と称するプロパティや、認識結果の最良の選択肢を提供する「RecognitionAlternate TopAlternate{get;}」と称するプロパティなど、1つまたは複数のプロパティも含むことができる。このクラスは、認識分析プロセスによる現在の結果の最上位の選択肢を選択することの信頼度(例えば強い、中程度、弱いなど)を提供する「RecognitionConfidence RecognitionConfidence{get;}」と称するプロパティと、認識分析プロセスから得られた分析結果の最良の結果のストリングを返す「string TopString{get;}」と称するプロパティも含むことができる。
Recognition Resultsクラスは、認識分析プロセスから得られた分析結果の最良の結果ストリング中の選択からの選択肢の集合を指定する(この場合各選択肢は1つのみのインクセグメントに対応する)「public RecognitionAlternateCollection GetAlternateCollectionFromSelection(selectionStart、selectionLength、maximumAlternates)」と称するメソッドなど、複数のメソッドも含むことができる。このメソッドの入力パラメータとしては、例えば、選択肢の集合が返されるテキスト選択の開始部を指定する値、選択肢の集合が返されるテキスト選択の長さを指定する値、および返される選択肢の最大数を指定する値などが可能である。このメソッドは、認識結果の最良の結果のストリング中の選択からRecognitionAlternateCollectionの選択肢の集合を返すことができる。
Recognition Resultsクラスはさらに、「RecognitionResult Merge(RecognitionResult left、string separator、RecognitionResult right)」と称するメソッドを含むことができる。このメソッドを使用して、単一のストリングから新しいRecognitionResultオブジェクト(平坦なラティスになる)を作成する、既存のRecognitionResultオブジェクトの開始部または最後に単一のストリングを付加する、あるいは2つの既存のRecognitionResultオブジェクト間に単一のストリングを連結することができる。このクラスは、既知の選択肢を用いて認識結果を変更するように指示する「ModifyTopAlternate(RecognitionAlternate alternate)」と称するメソッドも含むことができる。本発明の一部の実施形態では、デフォルトでは、認識分析プロセスの結果の中で最良の結果のストリングが、最上位の選択肢に対応する。ただし、このメソッドを使用して、認識分析プロセスの結果中で最上位の選択肢以外の選択肢を使用するように指定することができる。新しい最上位の選択肢を使用した結果、以前の区分とは異なる区分になる場合、ModifyTopAlternateメソッドはその変更を反映するように自動的にコンテクストノードを更新する。認識結果を変更するために使用できる選択肢を取り出すために、このメソッドは、下記で詳細に説明するGetAlternatesFromSelectionメソッドを呼び出すことに留意されたい。このクラスは、関連するRecognitionResultsオブジェクトを認識ラティスの形で永続的に保持する「Stream Save()」と称するメソッドも備えることができる。認識ラティスは、認識プロセスの結果を表すために使用されるシリアル化されたフォーマットである。
インク分析APIは、Analysis Optionsの列挙型も有することができる。この型は、分析プロセスで利用可能なすべてのオプションを使用可能にする「const AnalysisOptions Default」と称するフィールドなど、分析プロセスでインクデータを分析する方式を指定する1つまたは複数のフィールドを含むことができる。このフィールドは、例えば、テキスト認識、表の使用、リストの使用、注釈の使用、連結および囲みの使用、および中間結果の使用を可能にすることができる。この型は、注釈の検出を使用可能および使用不可にする「const AnalysisOptions EnableAnnotations」と称するフィールド、連結および囲みの検出を可能および不可にする「const AnalysisOptions EnableConnectorsAndContainers」と称するフィールド、および、連続して行われる異なるプロセスの使用間に(例えば構文解析プロセスとその後に行われる認識プロセスとの間)ソフトウェアアプリケーション1701に分析結果を返すことを可能および不可にする「const AnalysisOptions EnableIntermediateResuIts」と称するフィールドも含むことができる。この型は、リストの検出を可能および不可にする「const AnalysisOptions EnableLists」と称するフィールドと、表の検出を可能および不可にする「const AnalysisOptions EnableTables」と称するフィールドも備えることができる。この列挙型はさらに、テキスト認識分析プロセスを可能および不可にする「const AnalysisOptions EnableTextRecognition」と称するフィールドを含むことができる。ただし、追加的な分析プロセス(または同一の分析プロセスの異なるバージョン)を利用できる場合、この型は、それに応じて追加的なAnalysisOptionsを含むことができることに留意されたい。
さらに、インク分析APIは、AnalysisResultsEventArgsクラスを含むことができる。このクラスは、分析結果を含み、AnalysisResultsイベントが発生した時にソフトウェアアプリケーション1701に返されるデータ構造を作成する「public AnalysisResultsEventArgs()」と称するコンストラクタを備えることができる。このクラスは、分析プロセスを実行したInkAnalyzerオブジェクトを識別する「InkAnalyzer InkAnalyzer{get;}」と称するプロパティも含むことができる。
このAPIは、幾何学的な線を表す「Line」オブジェクトの使用を認識する一部のタイプのオペレーティングシステムで有用である可能性があるLineクラスも備えることができる。このクラスは、Lineオブジェクトを作成する「public Line(Point beginPoint、Point endPoint)」と称するコンストラクタなどのコンストラクタを含むことができる。このクラスは、線オブジェクトの始点を表す「public Point BeginPoint{get;set;}」と称するプロパティや、線オブジェクトの終点を表す「public Point EndPoint{get;set;}」と称するプロパティなどの各種のプロパティも含むことができる。
上記のクラスに加え、インク分析APIは、Recognition Alternateクラスも含むことができる。このクラスは、レコグナイザのディクショナリと比較される、インクセグメントに可能な単語の一致を表す要素を含むことができる。例えば、このクラスは、単一の線(線は2つの点として表現される)上に存在するRecognitionAlternateオブジェクトのアセンダ線を提供する「Line Ascender{get;}」と称するプロパティ、単一の線上に存在するRecognitionAlternateオブジェクトのベースラインを提供する「public Line Baseline{get;}」と称するプロパティ、および単一の線上に存在するRecognitionAlternateオブジェクトのデセンダ線を提供する「Line Descender{get;}」と称するプロパティを含むことができる。このクラスは、現在のRecognitionAlternateオブジェクトに対するRecognitionResultsオブジェクトを提供する「RecognitionResult Extract{get;}」と称するプロパティも含むことができる。このプロパティは、例えば、ある単語を含む行のRecognitionResultオブジェクトからその単語のRecognitionResultオブジェクトを抽出するために使用することができる。
このクラスは、単一の線上に存在するRecognitionAlternateオブジェクトの中線を提供する「Line Midline{get;}」と称するプロパティ、あるインクオブジェクトに含まれるストロークの集合を提供する(すなわちRecognitionResultに関連付けられたストロークを表すStrokeCollectionを提供する)「StrokeCollection Strokes{get;}」と称するプロパティ、および、1つまたは複数のオブジェクトに含まれ、RecognitionResultに関連付けられたストロークを表すストロークの集合を提供する「StrokeCollection[] StrokesArray{get;}」と称するプロパティも含むことができる。このクラスは、認識分析プロセスがRecognitionAlternateオブジェクトまたはジェスチャの認識の際に判定した信頼度(例えば強い、中程度、弱いなど)を提供する「RecognitionConfidence RecognitionConfdence{get;}」と称するプロパティも含むことができる。行でないノードについては、関連するコンテクストノードの子の最も低いRecognitionConfidenceが返される。このクラスは、選択肢の結果ストリングを指定する「string RecognizedString{get;}」と称するプロパティも含むことができる。したがって、単語コンテクストノードより上にあるコンテクストノードについては、このメソッドによって結果ストリングが共に連結される。例えば、行ノードは、その行ノードのすべての子ノードすなわち単語ノードの結果を含んだ結果ストリングを含む。そして、段落ノードは、当該段落ノードのすべての子ノードすなわち行ノードの結果を含んだ結果ストリングを含む。
Recognition Alternateクラスは、例えば、知られているテキスト範囲に対応する各インクオブジェクトからStrokeCollectionを指定する「StrokeCollection[] GetStrokesArrayFromTextRange(int selectionstart、int selectionlength)」と称するメソッドなど、1つまたは複数のメソッドも含むことができる。このクラスは、既知のストロークの入力集合を含み、レコグナイザが選択肢を提供することができるストロークの最小の集合を指定する「StrokeCollection[] GetStrokesFromStrokesArrayRanges(StrokeCollection[] strokesArray)」と称するメソッドも含むことができる。より詳細には、ストロークは、その集合に対応するストローク索引の配列をそれぞれが含むインクオブジェクトの配列によって返される。このメソッドによって返されるインクストロークの集合は、入力集合と一致するか、あるいは、入力集合が、すべての入力ストロークを含む最小の認識結果の一部としか一致しない場合は入力集合より大きい可能性があることに留意されたい。このクラスはさらに、知られるストロークの入力集合を含み、レコグナイザが選択肢を提供することができるストロークの最小の集合を指定する「StrokeCollection GetStrokesFromStrokesRanges(StrokeCollection strokes)」と称するメソッド、および、既知のテキスト範囲に対応するStrokeCollectionを指定する「StrokeCollection GetStrokesFromTextRange(int selectionstart、int selectionlength)」と称するメソッドを含むことができる。
このクラスはさらに、既知のストロークセットを含む選択肢をレコグナイザが返すことが可能な認識されたテキストの最小範囲を指定する「void GetTextRangeFromStrokes(ref int selectionstart、ref int selectionend、StrokeCollection strokes)」と称するメソッド、および、既知のストロークセットを含む選択肢をレコグナイザが返すことが可能な認識されたテキストの最小範囲を指定する「void GetTextRangeFromStrokesArray(ref int selectionstart、ref int selectionend、StrokeCollection[] strokesarray)」と称するメソッドも含むことができる。このクラスは「RecognitionAlternateCollection SplitWithConstantPropertyValue(GUID propertyType)」と称するメソッドも備えることができ、このメソッドは、当該メソッドが呼び出される対象の選択肢を分割した選択肢の集合を返す。この集合中の各選択肢は、このメソッドに渡されるプロパティのプロパティ値が同じである隣接する認識セグメントを含んでいる。このメソッドを使用して、例えば、認識結果の信頼度の境界(強い、中程度、弱い)、行の境界、あるいはセグメントの境界で元の選択肢を分割した選択肢を得ることができる。このクラスはさらに、選択肢に対するレコグナイザの信頼度など、選択肢の既知のプロパティの値を指定する「byte[] GetPropertyValue(GUID propertyType)」と称するメソッドを含むことができる。ただし、すべての認識分析プロセスがすべてのプロパティタイプの値を提供する訳ではない。したがって、このメソッドは、関連する認識分析プロセスによってサポートされるタイプについてのデータを提供する。
インク分析APIは、Recognition Alternate Collectionクラスも含むことができる。上記のクラスの多くと同様に、このクラスもRecognitionAlternateCollectionオブジェクトを作成するための「RecognitionAlternateCollection()」と称するコンストラクタを含むことができる。このクラスは複数のプロパティも含むことができ、これには、選択肢となる認識値の集合に含まれるオブジェクトまたは集合の数を提供する「Count{get;}」と称するプロパティ、選択肢となる認識値の集合へのアクセスがソフトウェアアプリケーション1701と同期されている(すなわち「スレッドセーフ」である)かどうかを示す値を提供する「IsSynchronized{get;}」と称するプロパティ、および、選択肢となる認識値の集合へのアクセスを同期するために使用できるオブジェクトを提供する「SyncRoot{get;}」と称するプロパティがある。
このクラスは、選択肢となる認識値の現在の集合のすべての要素を、指定された1次元配列の指定された宛先となる配列の添え字にコピーする「virtual void CopyTo(Array array、int index)」と称するメソッド、および、呼び出し元が各コンストラクトを使用して選択肢となる認識値の集合中の各RecognitionAlternateを列挙することを可能にするIEnumerableの標準的な実装である「IEnumerator IEnumerable.GetEnumerator()」と称するメソッドなど、1つまたは複数のメソッドも含むことができる。このクラスは、認識の代替値の集合中のすべてのオブジェクトを含むRecognitionAlternateCollectionEnumeratorを返す「RecognitionAltemateCollectionEnumerator GetEnumerator ()」と称するメソッドも含むことができる。このメソッドを使用して、例えば認識の代替値の集合中の各オブジェクトを取り出すことができる。
インク分析APIは、さらに、Recognition Confidenceの列挙と Recognition Modeの列挙を含むことができ、これらはそれぞれ認識分析プロセスに関連する1つまたは複数のフィールドを含むことができる。例えば、Recognition Confidenceクラスは、提供された選択肢となる認識値のリストに正しい結果があることを認識分析プロセスが確信していることを示す「Intermediate」と称するフィールド、提供される選択肢となる認識値のリスト中に結果があることを認識分析が確信していないことを示す「Poor」と称するフィールド、および、選択肢となる認識値の中の最良の選択肢が正しいことを認識分析プロセスが確信していることを示す「Strong」と称するフィールドなどの複数のフィールドを含むことができる。
同様に、Recognition Modeクラスは、認識分析プロセスがどのように電子インクデータを解釈し、したがって認識結果ストリングを決定するかを指定するフィールドを含むことができる。例えば、このクラスは、認識分析プロセスがそのコンテクストに指定された擬似事実に基づいて認識結果を強制することを指定する「Coerce」フィールド、認識分析プロセスが電子インクデータを単一行として扱うことを指定する「Line」フィールドを含むことができる。このクラスは、認識分析プロセスが認識モードを適用しないことを指定する「None」と称するフィールド、認識分析プロセスが、単一の行または文字を形成するものとして電子インクデータを扱うことを指定する「Segment」と称するフィールドも含むことができる。さらに、このクラスは、複数のセグメント化を使用不可にする「TopInkBreaksOnly」と称するフィールドを含むことができる。
さらに、インク分析APIは、2つのコンテクストノードを共にリンクする方式を定義するContext Linkクラスを含むことができる。ContextLinkオブジェクトはそれ自体で、リンクされる2つのコンテクストノード、リンクの方向、およびリンクのタイプを表す。このクラスは、別のコンテクストノードからリンクされる起点コンテクストノードを指定する「ContextNode SourceNode{get;}」と称するプロパティ、起点コンテクストノードと宛先コンテクストノード間に存在するリンク関係のタイプを指定する「ContextLinkType LinkType{get;}」と称するプロパティ、および、カスタムのリンクが使用されていることを示す「CustomLinkType{get;}」と称するプロパティを含むことができる。カスタムのリンクが使用される状況は、アプリケーションがインクアナライザAPIのリンクシステムを使用して、APIが認識できないアプリケーション固有のリンクを表すことを決定した場合に生じる。
このクラスは、別のコンテクストノードからリンクされる宛先コンテクストノードを指定する「ContextNode DestinationNode{get;}」と称するプロパティも含むことができる。このクラスには2つのコンストラクタを利用できる可能性があり、そのコンストラクタは既存の起点コンテクストノードと宛先コンテクストノードの間の関係を生成する。
このクラスは、2つのコンテクストノードが共有する関係のタイプを定義する「ContextLinkType enum」と称する列挙も含むことができる。これら各種のリンクタイプには、例えば1つのノードがもう一方のノードに固定されていることを記述する「AnchorsTo」タイプがある。両ノードは、構文解析の状況に応じてSourceNodeまたはDestinationNodeプロパティを使用することができる。リンクタイプには、1つのノードがもう一方のノードを含んでいることを記述する「Contains」タイプもある。この関係では、囲みノードをSourceNodeとして参照し、包含される側のノードをDestinationNodeとして参照することができる。リンクタイプにはさらに、1つのノードが別のノードをポイントしていることを記述する「PointsTo」タイプが含まれる。この関係の場合、ポイントを行う側のノードをSourceNodeとして参照し、ポイントされる側のノードをDestinationNodeとして参照することができる。さらに、リンクタイプには、あるノードがもう一方のノードからポイントしていることを記述する「PointsFrom」タイプもある。この関係では、もう一方のノードからポイントしているノードをSourceNodeとして参照し、ポイントの起点となるノードをDestinationNodeとして参照することができる。
インクタイプはさらに、あるノードが別のノードの水平方向の長さにわたることを記述する「SpansHorizontally」タイプ、および、あるノードが別のノードの垂直方向の長さにわたることを記述する「SpansVertically」タイプを含むことができる。これらのタイプでは、通常は最後に書かれた、もう一方のノードを範囲として含む(文字の上に線を引いて消す、下線を引く、余白バー)ノードをSourceNodeとして参照することができ、一方、範囲として包含される側のノードをDestinationNodeとして参照することができる。リンクタイプには、カスタムのリンクタイプが使用されていることを記述する「Custom」タイプも含まれる。この値が使用される時、ContextLinkオブジェクトの「CustomLinkType」プロパティは、そのリンクの目的についてより多くの詳細を提供することができる。
したがって、インクアナライザAPIは、上記で詳しく述べたように文書中の電子インクを非同期に分析し、その後分析プロセスの結果を文書の現在の状態と一致させるための各種の機能とサービスとを提供する。さらに、上記の各種クラスは、Microsoft Windows(登録商標)動作環境、MicrosoftCOM動作環境、Unix(登録商標)またはLinux動作環境、あるいはその他の適切なコンピュータ動作環境など各種のオペレーティングシステムおよび環境に適用できることを理解されたい。さらに、本発明の各種の実施によるアプリケーションプログラミングインターフェースは、上記のクラスコンポーネントの1つまたは複数を省略しても、所望のサービスまたは機能を提供する追加的コンポーネントを含んでもよいことを理解されたい。
一致(reconciliation)
上記で詳細に述べたように、本発明の各種の実施例では、文書1703中の未分析の電子インクがバックグラウンドの分析プロセスによって分析されている間にソフトウェアアプリケーション1701が動作を継続することができる。このため、ソフトウェアアプリケーション1701は、分析プロセスの結果と矛盾するいくつかの形で文書1703を変更する可能性がある。例えば、ソフトウェアアプリケーション1701は、文書1703に新しい電子インクデータ1705を入力する、あるいは文書1703から既存の電子インクデータ1705を削除する可能性がある。さらに、ソフトウェアアプリケーション1701は、既存の電子インクデータ1705の位置を移動する、あるいは既存の電子インクデータ1705のプロパティを変更するなどにより、既存の電子インクデータ1705を編集する場合がある。さらには、ソフトウェアアプリケーション1701は、既存の電子インクデータ1705に影響を与える形で非インク文書要素1707を追加、削除、あるいは変更する可能性がある。例えば、ソフトウェアアプリケーション1701は、電子インクデータ1705で注釈が付されたタイプ入力テキストを削除する可能性がある。
ソフトウェアアプリケーション1701は、追加的に既存の電子インクデータ1705を「ピンで固定(pin)」して、分析プロセスがそのデータを変更できないようにすることができる。例えば、ユーザがインクストロークグループについてのレイアウトまたは分類を手動で指定する場合、ソフトウェアアプリケーション1701は、構文解析プロセスで生成される結果に関係なく、それらのインクストロークをその特定のレイアウトに保つ、またはその分類で保つことを指示することができる。同様に、ユーザは、認識プロセスで生成される結果に関係なく、インクストロークのグループに対して特定の認識結果を指定することができる。
本発明の各種の実施により、各種タイプのピンを用いることができる。例えば、インク分析ツール1901は、ソフトウェアアプリケーション1701がインクを「強固に」ピンで固定できるようにすることができる。この構成では、ピンで固定されたノードより下の葉ノードにはインクストロークを追加することができず、ピンで固定されたノードより下の葉ノードからはストロークを除去することができず、子ノードの追加または除去が許されず、ピンで固定されたノードより下のノードの親ノードの変更が許可されない。これに代えて、あるいはこれに加えて、インク分析ツール1901は、新しい(late)ストロークによる「強固な」ピン固定も可能にすることができ、この場合は、指定された条件下で新しいストロークを追加することができ、ピンで固定されたノードより下の葉ノードからストロークを除去することが禁止され、子ノードの追加または除去が禁止され、ピンで固定されたノードより下のノードの親ノードの変更が許されない。さらに、インク分析ツール1901は、ソフトウェアアプリケーション1701が上記に代えて、あるいは上記に加えて、インクを「緩く」ピン固定できるようにすることができる。この構成では、ピンで固定されたノードより下の葉ノードからストロークを除去することができず、ストロークを追加するための指定された規則があり(この規則により新しいストロークを追加することができる)、そして子ノードのグループ化の変更、追加、および除去が許される。ピンは除去することができ、ピンが除去されると、それまで固定されていたノードとその子ノードは「ダーティ」、すなわち再分析の必要があるとみなすことができることに留意されたい。
さらに、本発明の各種の例によるインク処理では、上記で詳細に説明した複数の分析プロセスを用いることができる。したがって、後続の第2の分析プロセスが実行されている間に、以前に行われた分析プロセスの結果により電子インクデータ1705が変更される可能性がある。そのため、分析プロセスの結果を文書1703の現在の状態と一致させて、文書1703の現在の状態に有効な結果のみを文書1703の分析コンテクストオブジェクト1709に適用しなければならない。すなわち、現在の分析コンテクストオブジェクト1709(および場合によっては分析プロセスの結果)を変更して、分析プロセスの結果と文書1703の現在の状態との間の不一致あるいは「矛盾」を取り除く。
一致プロセスの結果が有効になるように、文書1703の状態は一致プロセス中には変化すべきでないことに留意されたい。そのため、一致プロセスは、ソフトウェアアプリケーション1701が実行されている主要スレッドを用いて実行することができ、一致プロセスの実行によりソフトウェアアプリケーション1701の動作が一時的に停止する可能性がある。あるいは、データ構造のロッキングなどの他の技術を用いて、文書1703の状態が一致プロセス中に変わらないようにしてもよい。したがって、ユーザがソフトウェアアプリケーション1701の動作に不満を感じないように、一致プロセスは可能な限り迅速に行うことが望ましい。一致プロセスの別の考慮事項は、別個のバックグラウンドの分析スレッドで実行される分析プロセスの動作に対する影響である。現在の分析コンテクストオブジェクト1709(すなわち文書1703の現在の状態を反映している分析コンテクストオブジェクト1709)と分析結果との不一致があまりにも広く定義された場合、大量の電子インクが不必要に再分析されることになる。言うまでもなく、本発明から逸脱せずに、一致を行う際に文書の整合性を保護する他の方式を使用することができる。
本発明の各種実施例では、分析プロセスと一致プロセスは、一致プロセスの効率と利便性を向上するために以下の規定の1つまたは複数に従うことができる。第1に、分析プロセスは、文書に依存しない分析コンテクストオブジェクト1903中の文書要素に対応するノードを可能な限り再使用することができる。すなわち、不一致は、文書要素に新しく、関連のないノードを作成することで回避すべきではない。また、一致プロセスは、ソフトウェアアプリケーション1701によって指定される「ピンによる固定」を尊重すべきである。分析プロセスは通常はソフトウェアアプリケーション1701によるピンの指定に準拠するが、ソフトウェアアプリケーション1701は、分析プロセスの実行中に電子インクデータ1705を固定する可能性がある。さらに、一致プロセスは、一致プロセスが完了した後に現在の分析コンテクストオブジェクト1709中に空のノードが残らないことを確実にすべきである。ただし、本発明の代替の実施により、これらの規定の1つまたは複数を省いてもよく、従わなくともよいことに留意されたい。例えば、本発明の一部の実施では、分析コンテクストオブジェクト1709が空のノードを含むことができるようにする場合がある。
これらの規定に加えて、一致プロセスは通例、分析コンテクストオブジェクト1709によって指示されるインターフェース規則に準拠しなければならない。例えば、本発明の一部の実施では、分析コンテクストオブジェクト1709は、子ノードがない場合を除いては文書要素のノードを削除できないようにすることができる。
先に指摘したように、分析プロセスが開始される前に行われた分析コンテクストオブジェクト1709への変更と何らかの形で矛盾する変更を分析プロセスが文書に依存しない分析コンテクストオブジェクト1903に行った場合に不一致が生じる。不一致は、必須型の不一致と任意型の不一致との2タイプに分けることができる。
必須型の不一致は、分析プロセスによって文書に依存しない分析コンテクストオブジェクト1903に行われた変更を、文書1703の現在の状態に対応する分析コンテクストオブジェクト1709に適用できない時に生じる。必須型の不一致は、例えば、ソフトウェアアプリケーション1701が分析コンテクストオブジェクト1709中のあるノードを「ピン」あるいは固定し、分析プロセスが、文書に依存しない分析コンテクストオブジェクト1903中のそれに対応するノードを変更したときに生じる。必須型の不一致は、分析プロセスが文書に依存しない分析コンテクストオブジェクト1903中のノードに何らかの種の変更を加えたが、ソフトウェアアプリケーション1701が分析コンテクストオブジェクト1709からそのノードに対応するノードを削除した時、および、分析プロセスが文書に依存しない分析コンテクストオブジェクト1903中の対応するノードを削除しているのに、ソフトウェアアプリケーション1701が分析コンテクストオブジェクト1709中の対応ノードにストロークあるいは子ノードを追加した時にも生じる。さらに、必須型の不一致は、分析プロセスが文書に依存しない分析コンテクストオブジェクト1903中の対応するノードの順序を変更するか、そのノードへのリンクを作成しているのに、ソフトウェアアプリケーション1701が分析コンテクストオブジェクト1709中のノードを削除した場合にも生じる。
任意型の不一致は、ソフトウェアアプリケーション1701が、文書に依存しない分析コンテクストオブジェクト1903中で分析プロセスによって変更された値に関連する分析コンテクストオブジェクト1709中の値を変更したが、分析コンテクストオブジェクト1709のインターフェースのピンの制約、要素再使用の制約、および継承の制約により、分析プロセスによって行われた変更を分析コンテクストオブジェクト1709に適用することがなお可能な場合に生じる。任意型の不一致は、変更として分析コンテクストオブジェクト1709になお適用することができ、あるいは回避することができる。さらに、一致プロセスが、単に一部タイプの任意型の不一致を一切無視してもよい。
任意型の不一致の明瞭な一例は、分析コンテクストオブジェクト1709と文書に依存しない分析コンテクストオブジェクト1903両方の元々のノードに、インクストロークAおよびBに対応する子ノードAおよびBがある場合に生じる。その後、ソフトウェアアプリケーション1701が、インクストロークCについての第3の子Cノードを分析コンテクストオブジェクト1709に加える可能性があり、一方、分析プロセスは、インクストロークDに対応する第3の子ノードDを文書に依存しない分析コンテクストオブジェクト1903に追加する。本発明の各種の実施形態では、一致プロセスは、分析結果に基づいて分析コンテクストオブジェクト1709中の親ノードに子ノードDを追加することができる。この分析コンテクストオブジェクト1709中の親ノードに対する変更は禁止されないが、この変更により、なおソフトウェアアプリケーション1701が望まない形で親ノードの特性が変化する。例えば、親ノードに関連付けられたインクがその後分析済みとみなされる可能性があり、インクストロークのグループへのインクCの影響を考慮する再分析を受けない可能性がある。さらに、親ノードについての認識結果が間違った子ノードすなわちストロークを参照するようになっている可能性があり、これも再度補正されることがない。
このため、本発明の各種実施例では、分析プロセスの結果に基づいて分析コンテクストオブジェクト1709を更新する際に任意型の不一致についての変更を適用しない。この基準には、任意型の不一致に基づく変化を識別し、阻止するための追加的な処理が必要になるが、この基準は実施が比較的容易であり、維持しやすい。言うまでもなく、本発明のさらに他の実施例では、他の基準に従って任意型の不一致に対応する変更を実施することができる。より詳細には、そうした代替の実施例では、分析コンテクストオブジェクト1709中に論理的に矛盾する永続的な関係を生成しない、任意型の不一致による変更を実施することができる。
また、不一致は、1つの不一致が別の不一致を生じさせる可能性があるという点で推移的な影響を有する可能性があることにも留意されたい。例えば、分析プロセスは、ある行にノードLを作成し、次いでノードLの子ノードとしてある単語にノードWを作成することができる。ノードLの作成が何らかの種の不一致のために分析コンテクストオブジェクト1709に適用されなかった場合、ノードWの作成は必須型の不一致になる。
本発明の各種実施例は、分析プロセスの結果を文書1703の現在の状態と一致させるためにログを利用した方式を用いることができる。このログを用いる方式では、文書に依存しない分析コンテクストオブジェクト1903は、分析プロセスによって行われた文書に依存しない分析コンテクストオブジェクト1903に対する変更のログを含む。このログは、例えば変更レコードのリストの形態とすることができる。各変更のレコードは、行われた変更のタイプ(例えば文書に依存しない分析コンテクストオブジェクト1903を変更するために呼び出されたメソッドを識別することによる)、変更が行われた文書要素(例えばメソッドが呼び出された文書に依存しない分析コンテクストオブジェクト1903中のノードを識別することによる)、およびそのメソッド呼び出しの引数を再作成するのに必要な情報を含むことができる。有利には、文書に依存しない分析コンテクストオブジェクト1903はインク分析ツール1901および分析プロセスによって実装されるので、変更ログはソフトウェアアプリケーション1701からは見えないようにすることができる(ただし、必要な場合は代法としてログをアプリケーション1701に公開してよい)。
変更ログの方式を使用して一致プロセスを実行するために、インク分析ツール1901は、各変更のレコードを変更の時間順に調べる。すなわち、インク分析ツール1901は、文書に依存しない分析コンテクストオブジェクト1903に行われた1つ1つの変更を識別する。変更ごとに、インク分析ツール1901は、図27に示すプロセスを実施することができる。初めにステップ2701で、インク分析ツール1901は、変更を適用するために必要とされる現在の分析コンテクストオブジェクト1709中の対応ノードへのアクセスを試みる。この取り出しのステップは、ソフトウェアアプリケーション1701が分析コンテクストオブジェクト1709から必要なノードの1つまたは複数を削除しており、その結果必須型の不一致が発生している場合には失敗する可能性があることに留意されたい。
次いで、ステップ2703で、インク分析ツール1901は、その変更により必須型または任意型の不一致が生じるかどうかを判定する。この判定を行う手順については下記でより詳細に説明する。ステップ2705で、インク分析ツール1901は、変更を行うか、またはその変更により一致プロセスの基準で禁止されている必須型または任意型の不一致が生じる場合は変更を禁止する。例えば、変更により、一致プロセスの基準で禁止されている必須型の不一致または任意型の不一致が生じる場合、インク分析ツール1901は、変更を行おうとしていた文書1703の対応領域を表す分析コンテクストオブジェクト1709のノードへの変更を阻止することができる。一方、変更が適用される場合は、インク分析ツール1901は、適切なメソッドを呼び出して分析コンテクストオブジェクト1709中の必要なノードに所望の変更を行うことができる。
分析プロセスが分析コンテクストオブジェクト1709に新しい要素ノードを追加したが、その新しいノードにストロークノードを移動できない場合は、分析プロセスも、ストロークノードが新しいノードに無事に移動されたと考えてその要素ノードの削除を試みていない。したがって、現在の分析コンテクストオブジェクト1709中の空のノードに対応する要素ノードが、文書に依存しない分析コンテクストオブジェクト1903に生じることになる。したがって、分析コンテクストオブジェクト1709のすべての変更が処理されると、ステップ2707でインク分析ツール1901は文書に依存しない分析コンテクストオブジェクト1903を確認して、文書に依存しない分析コンテクストオブジェクト1903中のノードに対応する分析コンテクストオブジェクト1709中の「空の」ノードを削除する。この空のノードを削除するステップは任意であり、本発明から逸脱せずに省略してよい。
文書に依存しない分析コンテクストオブジェクト1903は空のノードを含んではならず、一致プロセスは、文書に依存しない分析コンテクストオブジェクト1903に空のノードが作成されないようにすべきことに留意されたい。また、このステップでは、例外として、分析コンテクストオブジェクト1709のルートノードは空であっても削除を試みないことにも留意されたい。最後にステップ2709で、インク分析ツール1901は、文書に依存しない分析コンテクストオブジェクト1903の分析結果と現在の分析コンテクストオブジェクト1709との不一致をソフトウェアアプリケーション1701に対して識別し、それによりソフトウェアアプリケーション1701は、その不一致の影響を受ける文書1703の領域を続く分析プロセスの際に含めることができる。
次いで上記のステップ2703の不一致の検出に戻り、文書に依存しない分析コンテクストオブジェクト1903の変化に対応する分析コンテクストオブジェクト1709中のすべてのノードがアクセスされると、分析コンテクストオブジェクト1709中の各ノードに生じる可能性があるすべての他の必須型の不一致を静的に検出することができる(あるいはノードごとに必須型の不一致がないことを検出することができる)。より詳細には、必須型の不一致は、分析コンテクストオブジェクト1709のインターフェースによって指定された規則に基づいて検出することができる。
ただし、任意型の不一致は、通例は、文書1703に関する追加的な状態情報を用いないと識別することができない。これは、任意型の不一致による変更は、分析コンテクストオブジェクト1709のインターフェースによって命令されず、代わりに、ソフトウェアアプリケーション1701が行った変更と分析プロセスが行った変更の両方が分析コンテクストオブジェクト1709中の同じノードに影響を与えている時には、分析プロセスによって行われた変更に優先される、ソフトウェアアプリケーション1701が行った変更についての任意の選択に基づくためである。これらの不一致は、代わりに、現在の分析コンテクストオブジェクト1709と文書に依存しない分析コンテクストオブジェクト1903の元のバージョンとを比較して、分析コンテクストオブジェクト1709中のどのノードがソフトウェアアプリケーション1701によって変更されているかを判定することによって検出することもできる。
一致の基準は、例えば、ソフトウェアアプリケーション1701による親ノードへの子ストロークノードの追加または削除は、その親ノードにとって任意型の不一致であると定義することができる。そのような変更が生じているかどうかを判定するために、インク分析ツール1901は、現在の分析コンテクストオブジェクト1709中のノードの下位にある子ストロークノードを調べ、その番号とGuid(または他の一意の識別子)を、元のバージョンの文書に依存しない分析コンテクストオブジェクト1903中の対応ノードの下位にある子ストロークノードと比較することができる。子ストロークノードがそれらの点(および所望の他の点)で一致する場合、インク分析ツール1901は、分析プロセスによって行われた変更を分析コンテクストオブジェクト1709中の親ノードに適用することができる。
引き続きこの例で、ログ項目中の次の変更は、文書に依存しない分析コンテクストオブジェクト1903中で親ノードの下位になるように移動される別のストロークノードからなる可能性がある。この変更による必須型の不一致がない場合、インク分析ツール1901は、対応する変更を分析コンテクストオブジェクト1709に行うことを許可される。ただし、インク分析ツール1901は、元のバージョンの文書に依存しない分析コンテクストオブジェクト1903を調べて任意型の不一致が存在するかどうかを判定する際に、現在の分析コンテクストオブジェクト1709中の親ノードが、元のバージョンの文書に依存しない分析コンテクストオブジェクト1903の親ノードよりも1つ多い従属ストロークノードを有すると判断し、任意型の不一致が存在すると誤って判断してしまう(すなわち自身が行った変更に基づいて不一致が存在すると判断する)。
したがって、ログを利用する一致プロセスでは、現在の分析コンテクストオブジェクト1709と元のバージョンの文書に依存しない分析コンテクストオブジェクト1903との比較による一致によって行われた以前の変更を除外しなければならない。本発明の各種実施例では、この除外は、変更リストの項目を調べる前に、現在の分析コンテクストオブジェクト1709のすべてのノードとそれに対応する元のバージョンの文書に依存しない分析コンテクストオブジェクト1903のノードとを比較し、一致しないノードのリストを保持することによって行うことができる。
これに代えて、あるいはこれに加えて、本発明の各種実施例では、対応する要素を取り出す際には必ず使用される、分析結果を含む文書に依存しない分析コンテクストオブジェクト中の要素に対応する現在の分析コンテクストオブジェクト1709の要素のキャッシュを保持することができる。予備的なパスはないが、このキャッシュは、対応する要素に任意型の不一致がないと最初に判定された時にデータが取り込まれる。任意で、このキャッシュは、結果中のどの要素に任意型の不一致があったかを常に把握することもできる。この方式は、変更ログが短い場合には任意型の不一致を見つけるパス方式よりも性能が良好であるが、分析結果を含む文書に依存しない分析コンテクストオブジェクト1903が多数のノードを含んでいる場合には性能が落ちる場合もある。それは、また、他の方式と同様に複雑ではない。
キャッシュ中の要素の親コンテクストノードもキャッシュすべきことに留意されたい。より詳細には、子コンテクストノードへの変更は、その親コンテクストノードのプロパティの変更と見なされる。したがって、キャッシュに格納されたコンテクストノードの親コンテクストノードも、この時点で、ソフトウェアアプリケーション1701によって行われた変更があるかどうか評価する必要がある。キャッシュ内の各コンテクストノードの親ノードのキャッシュは、ルートノードを過ぎるまで、または変更が検出されるまで、ツリーの上位まで繰り返す必要がある(例えば親ノードから、祖父母ノード、會祖父母ノードへ)。ただし、多くの状況では、ツリーは通常非常に深くなることはないので、この繰り返しは数ノードに過ぎない。
また、本発明の各種実施例では、元のバージョンの文書に依存しない分析コンテクストオブジェクト1903は任意型の不一致の検出だけに使用されることにも留意されたい。本発明の実施例で任意型の不一致の検出が不要である場合は、元のバージョンの文書に依存しない分析コンテクストオブジェクト1903と対応する要素のキャッシュをともに省いてよい。この「ログを利用する」方式は、下記の「比較による」方式に比べて維持が容易である可能性がある。これは、この方式は、分析プロセスによって行われた変更を判定するのに必要とする検索がより少なく、文書に依存しない分析コンテクストオブジェクト1903に対する動作(「ノードの削除」や「ノードの作成」など)が別々に処理され、したがって新しいタイプの動作が他の動作に影響を与える傾向がないためである。
分析結果を文書1703の現在の状態と一致させる「ログを利用する」手法に代えて、本発明の各種実施例では、一致のために「比較に基づく」方式を採用することができる。比較に基づく方式の最も大きな特徴は、文書に依存しない分析コンテクストオブジェクト1903に行われた変更のログを保持せず、そのため、分析結果を含む文書に依存しない分析コンテクストオブジェクト1903と、元のバージョンの文書に依存しない分析コンテクストオブジェクト1903とを比較することによる以外は、分析プロセスが行ったことについての情報を収集しない点である。したがって、この方式では、任意型の不一致についての判断に関係なく、元のバージョンの文書に依存しない分析コンテクストオブジェクト1903が常に必要とされる。
この方式を使用して、インク分析ツール1901はまずストロークマップを作成する。すなわち、元のバージョンの文書に依存しない分析コンテクストオブジェクト1903中のすべてのインク葉ノードについて、現在の分析コンテクストオブジェクト1709に対応するノードがあれば、その葉ノードをハッシュテーブル(またはその他の適切なデータ構造)に加える。したがって、このハッシュテーブルは、元のバージョンの文書に依存しない分析コンテクストオブジェクト1903のストロークのGUID(または他の一意のノード識別子)を、現在の分析コンテクストオブジェクト1709の葉ノードへの参照にマッピングする。
次いで、インク分析ツール1901は、ソフトウェアアプリケーション1701が分析コンテクストオブジェクト1709で変更したすべてのノードを識別する。これは、上記で詳述した任意型の不一致を判定する手法を用いて行うことができる。元のバージョンの文書に依存しない分析コンテクストオブジェクト1903中のノードごとに、現在の分析コンテクストオブジェクト1709に対応するノードがあり、そのノードが元のバージョンの文書に依存しない分析コンテクストオブジェクト1903のノードと何らかの形で著しく異なる場合、インク分析ツール1901は、そのノードがアプリケーションによって変更されており、不一致となる可能性があると判断する。そのようなノードへの参照は、分析コンテクストオブジェクト1709に追加すべきではない分析結果ノードに対応する第1のリスト(以下でこのリストをresultsNodesNotToAddリストと称する)と、任意型の不一致を生じるノードの第2のリストに保存する。
元のバージョンの文書に依存しない分析コンテクストオブジェクト1903中のノードごとに、インク分析ツール1901は、分析結果を含む文書に依存しない分析コンテクストオブジェクト1903と現在の分析コンテクストオブジェクト1709との両方の対応ノードを調べる(lookup)。分析コンテクストオブジェクト1709の各ノードについて、インク分析ツール1901は、ソフトウェアアプリケーション1701がそのノードを削除したかどうかを判定する。そのようなノードは元のバージョンの文書に依存しない分析コンテクストオブジェクト1903には存在するが、分析コンテクストオブジェクト1709に対応するノードがない。分析結果を含む文書に依存しない分析コンテクストオブジェクト1903中の対応するノードが存在すれば、そのノードをresultsNodesNotToAddリストに追加する。
次いで、インク分析ツール1901は、分析プロセスが文書に依存しない分析コンテクストオブジェクト1903からそのノードを削除しているかどうかを判定する。この削除は、現在の分析コンテクストオブジェクト1709に対応するノードがあり、変化していないが、分析結果を含む文書に依存しない分析コンテクストオブジェクト1903に対応するノードがない時に検出される。分析プロセスによって削除されたノードは、削除ノードのリストに保存することができる。そのようなノードは、現在の分析コンテクストオブジェクト1709には追加しないが、分析結果を含む文書に依存しない分析コンテクストオブジェクト1903に対応するノードがないのでresultsNodesNotToAddリストには入れない。
ソフトウェアアプリケーション1701がノードを削除も変更もしておらず、分析プロセスがノードを削除していない場合、インク分析ツール1901は、分析プロセスがノードを変更しているかどうかを判定することができる。ソフトウェアアプリケーション1701によって行われた変更を検出する際に使用する上述と同じ手法を使用して、分析プロセスによって行われた変更を検出することができる。分析プロセスによって変更されたノードは、resultsNodesNotToAddリストに加え、分析コンテクストオブジェクト1709中のノードで適切なメソッドを呼び出すことにより伝播させる。ソフトウェアアプリケーション1701も分析プロセスもノードを変更または削除していない場合、そのノードには何も行われていないことになり、インク分析ツール1901は、そのノードをresultsNodesNotToAddリストに追加する。これは、そのノードが結果を含む文書に依存しない分析コンテクストオブジェクト1903に存在し、分析コンテクストオブジェクト1709に追加すべきでないからである。
次いで、分析結果を含む文書に依存しない分析コンテクストオブジェクト1903中の各ノードについて、そのノードがresultsNodesNotToAddリストにない場合は、インク分析ツール1901は、分析コンテクストオブジェクト1709中に対応するノードを作成することにより、分析プロセスによるそのノードへの変更を伝播させることができる。分析結果中のノードのトラバースは、親ノードが子ノードより先に作成されることが保証されるように、上から下への先行順のトラバースを使用して行うことができる。
分析コンテクストオブジェクト1709に新しい葉ノードを作成する際、分析結果に含まれる、そのノードに関連付けられたすべてのインクストロークも分析コンテクストオブジェクト1709中の他のノードからその新しいノードに移動することができる。そして、上述のストロークマップを使用して、ストロークを移動するための起点要素を識別することができる。起点要素が存在しない場合(必須型の不一致が生じる)、または起点要素がこれも上述した任意型の不一致リストに含まれる場合、インクストロークは移動しない。分析コンテクストオブジェクト1709に対する不要な呼び出しを省くために、このインク分析ツール1901は、不一致がないストローク起点ノードが少なくとも1つない場合は、子コンテクストノードを作成するメソッドの呼び出しを回避することができる。これと同じストローク起点のチェックは非インクの葉ノードにも行われ、例えば行を構成する単語の少なくとも1つが少なくとも1つの移動が成功したストロークを含まない場合には、その行のノードを作成しない。
そのため、新しく作成されたノードには認識ラティスなどの他の情報も適用される。認識ラティスは、特定のストロークを移動することができず、適用された(すなわち阻止されない)任意型の不一致が生じ、その結果一時的に論理的な矛盾が生じた場合でもなお適用される。ただし、失敗したストローク移動は、変更が阻止される文書領域に対応する分析コンテクストオブジェクト1709の部分の指定に反映され、ソフトウェアアプリケーション1701は阻止された領域を再度分析するように指示されるので、この矛盾は一時的なものである。
分析コンテクストオブジェクト1709から削除すべきノードごとに、インク分析ツール1901は、リストチェックして、分析コンテクストオブジェクト1709に対するすべての他の編集および追加が行われたその状況でそのノードを実際に削除できるかどうかを調べる。削除すべきであり、実際にすべての子ノードとストロークとがないノードは、分析コンテクストオブジェクト1709から削除する。そのようなノードを削除すると、他の残りの子を持つ祖先があるまですべての祖先ノード(ルートノードまで。ただしルートノードは含まない)を順に削除する。
最終的に、インク分析ツール1901は、分析結果を含む文書に依存しない分析コンテクストオブジェクト1903と分析コンテクストオブジェクト1709との間でノードの順序付けのグローバルな比較を行って、分析プロセスによる分析コンテクストオブジェクト1709の変更を検出し、伝播させる。ただし、この比較では元のバージョンの文書に依存しない分析コンテクストオブジェクト1903を無視するので、ソフトウェアアプリケーション1701によって行われた順序付けの変更を検出する方法はないことに留意されたい。次いで、分析コンテクストオブジェクト1709に対応するノードがある分析結果中の各囲みノードについて、その囲みノードの子の順序づけを比較する。両方の囲みノードが全く同じ子のセットを有する場合は、分析結果中の子ノードと同じGUID(または他のタイプの識別子)を持たないノードが分析コンテクストオブジェクト1709中の囲みリストの同じ位置に見つかるまで、分析結果中の囲みの子のリストをループすることにより、分析結果中の順序付けを分析コンテクストオブジェクト1709に伝播する。そのような不一致が見つかると、分析コンテクストオブジェクト1709中の子リストのさらに下の方でそれに対応するノードを見つけなくてはならない。インク分析ツール1901は次いで、そのノードを求めて分析コンテクストオブジェクト1709の子リストの残る部分を検索し、子ノードを移動するメソッドを呼び出して、分析コンテクストオブジェクト1709中でのそのノードの順序を修正する。インク分析ツール1901はその後、分析結果中のノードのループを続ける。
言うまでもなく、分析リストまたはソフトウェアアプリケーション1701のいずれかがどちらかのリストのノードを削除している、またはリストにノードを挿入している可能性があるので、リストが全く同じであるという前提は成立しない。「子リストマッパ」オブジェクトを使用して、共通して保持されている要素のみを含む「切り詰めた(pruned)」リストを提示することにより前提が成立した場合をシミュレートする。次いで、上述の手順をマッピングされた子リストに行い、移動を、実際の索引とリストマッパオブジェクトによる呼び出しに変換する。
このように、上述の本発明の各種実施例による一致技術により、分析プロセスの開始以降に文書の内容が変化している場合でも、分析プロセスの結果を文書中の現在の文書要素に適用することができる。これらの一致技術はしたがって、文書をホストするソフトウェアアプリケーションの動作と非同期に文書中の電子インクを分析することを可能にする。さらにこれらの一致技術は、既存の独自に開発されたロッキングまたは他の同期ストラテジを用いる既存のマルチスレッドソフトウェアアプリケーションを含む、各種のソフトウェアアプリケーションによって有利に用いることができる。
イベント駆動型システム
上述のように、本発明の各種の実施例は、文書に依存しない分析コンテクストオブジェクトをコピーすることにより文書の状態の「スナップショット」を作成し、次いで文書に依存しない分析コンテクストオブジェクトを非同期に分析し、その間、文書をホストするソフトウェアアプリケーションは動作を継続する。あるいは、本発明の各種実施例は、非同期のインク分析を行うための文書に依存しない分析コンテクストオブジェクトを使用せずに済ませることもできる。代わりに、そうした本発明の実施例では、密閉された(sealed)コンポーネントを使用して文書のすべてのインクと意味データとを記憶することができる。より詳細には、こうした本発明の実施例では、ストロークの追加、削除、または変更などのインクイベントと、単語へのストロークのグループ化、意味ノードの追加、またはテキスト認識結果とストロークとの関連付けなどの構造イベント、という文書に行うことが可能な2タイプの変更を認識する。どのイベントも、そのイベントを外部のリスナに対して完全に記述するのに必要なすべてのデータを含んでいる。例えば、「ストローク追加」のイベントはすべてのストロークデータを含む。これらの「リッチな」イベントでは、リスナは、イベントを受け取った順序で適用することにより、インクオブジェクトの正確な複製を保持することができる。
図28に、本発明の各種実施例による、この構成を用いる方式の一例を示す。この図で分かるように、アプリケーション2801はインク分析ツール2803を用いる。インク分析ツール2803は、アプリケーション2801のインクデータ2805と文書構造2807(例えばツリー構造)を保持する。アプリケーションは、イベントキュー2809、パーサプロセス2811、および認識プロセス2817も用いる。パーサプロセス2811は、インクデータ2805のクローン2813と文書構造2807のクローン2815を保持する。同様に、認識プロセス2817は、インクデータ2805のクローン2819と文書構造2807のクローン2821を保持する。
アプリケーション2801は、インクデータを生成すると、メソッド2823を介してそのインクデータをインク分析ツール2803に提供する。それに応答して、インク分析ツール2803は、インクデータの変化に対応するイベントを生成し、すべてのイベントにタグを付加し、指定されたタグを有するイベントをリッスンするコンポーネントとして1つまたは複数の所望の分析プロセスを定義する。例えば、インクへのユーザによるすべての変更はタグ「UserChange」で印をつけることができ、このタグを有するイベント2825は、変更に応答して同期してイベントキュー2809に送られる。その後のいずれかの時点で、パーサプロセス2811および認識プロセス2817は、イベントキュー2809からタグのついたイベントを取り出す。
第1の分析プロセス(例えばパーサプロセス2811)は、インク分析ツール2803によって発行されるすべてのイベントをリッスンし、タグUserChangeを有するイベントに応答する。第1の分析プロセスは、次いで、そのイベントによって指定される変更を自身が有するインクデータクローン2813と文書構造クローン2815との内部コピーに適用し、イベント中に記述されるデータを分析し、その変更によって生じるタグイベント2827を作成して、タグ「ParserlChange」を付す。そのイベント2827は、インク分析ツール2803によって中継されてイベントキュー2809に戻される。したがって、第2の分析プロセス(例えば手書きの認識プロセス2817)は、Parserl Changeタグを有するイベントをリッスンする。応答して、第2の分析プロセスは、そのイベントによって指定される変更を自身が保持するインクデータクローン2819と文書構造クローン2821との内部コピーに適用し、応答してイベント中に記述されるデータを分析する。第2のアナライザは次いで、分析結果を用いてイベント2829を作成し、タグ「HandwritingRecognitionChange」でタグ付けする。インク分析ツール2803は、パーサプロセス2811および認識プロセス2817からイベントを受け取ると、イベント2831をアプリケーション2801に送って文書構造2807の変化を通知する。
本発明のこれらの実施形態は、複数のタグを有するイベントをリッスンし、分析プロセスの変更によるイベントに内部処理に基づいて異なるタグでタグ付けすることにより、各分析プロセスを支援することもできる。したがって、本発明のこれら代替の実施は、文書をホストするソフトウェアアプリケーションの動作と非同期の文書中の電子インク分析も可能にすることができる。
結論
本発明について本発明を実行する現時点で好ましい形態を含む特定の実施例との関係で説明したが、当業者は、添付の特許請求の範囲で述べる本発明の精神および範囲内に該当する、上述のシステムおよび技術の多数の変形形態および入れ替えがあることを理解されよう。