以下、添付図面を参照して、本発明に係る数式レイアウト変更装置、数式レイアウト変更方法および数式レイアウト変更プログラムの好適な実施形態について説明する。
まず、図1を参照して、実施形態における数式レイアウト変更装置を含む数式認識システム1の構成について説明する。図1に示すように、数式認識システム1は、機能的には、例えば、数式認識部11と、表示部12と、変更部13とを有する。
ここで、数式認識システム1は、物理的には、例えば、CPUと、メモリと、入力装置と、表示装置とを含んで構成される。メモリには、例えば、CPUで処理されるプログラムやデータを記憶するROMと、主として制御処理のための各種作業領域として使用されるRAMとが含まれる。入力装置には、例えば、マウスやキーボード、電子ペン、スキャナ等が含まれる。表示装置としては、例えば、ディスプレイが該当する。これらの要素は、互いにバスを介して接続されている。CPUが、ROMに記憶されたプログラムを実行し、入力装置から入力したデータやRAMに展開されたデータを用いて各種の処理を行い、処理結果を表示装置に表示することで、図1に示す数式認識システム1が有する各部の機能を実現できる。
数式認識部11は、入力データである数式データを認識し、後述するレイアウト情報および数式構造情報を生成する。本実施形態における数式データは、手書きの数式をデータ化したものである。手書きの数式をデータ化したものとしては、例えば、電子ペン入力によるストローク(点列)データや、鉛筆等で紙に手書きしたものをスキャナ入力した画像データが該当する。なお、数式データのデータ形式はこれに限定されない。それぞれのデータ形式に合わせたアルゴリズムを組み込むことで他の処理への影響を回避可能なデータ形式であれば、どのようなデータ形式であってもよい。
変更部13は、ユーザの編集操作に従って後述するレイアウト情報および数式構造情報を修正する。この変更部13が、本発明に係る数式レイアウト変更装置の機能に該当する。
表示部12は、後述するレイアウト情報および数式構造情報に基づいて、数式認識部11によって認識した後の数式または変更部13によって修正した後の数式をディスプレイ16に表示する。
以下において、数式認識部11、変更部13および表示部12の機能について詳細に説明する。図1に示すように、数式認識部11は、レイアウト解析部111と、文字認識部112と、数式構成部113とを有する。
レイアウト解析部111は、レイアウト解析処理を実行するとともに、レイアウト解析処理で生成したレイアウト情報をレイアウト情報DB14に格納する。レイアウト解析処理は、入力した数式データが1文字単位に区分し、区分した各文字の位置や大きさを算出するとともに、算出した各文字の位置や大きさに基づいて、各文字間の繋がりに関する情報等を算出する。そして、レイアウト解析処理は、算出した各種の情報に基づいて、レイアウト情報を生成する。なお、レイアウト解析処理を実現する解析手法として、例えば、特開平08−305793号公報および特開平09−50485号公報に記載されている一般的な解析手法を用いることができる。
図2を参照してレイアウト情報について説明する。レイアウト情報は、データ項目として、例えば、文字表記項目、文字タイプ項目、文字サイズ項目、文字矩形項目、リンク情報項目、内包情報項目および添え字情報項目を有する。レイアウト情報は、レイアウト解析部111によって区分した文字ごとに生成する。
文字表記項目には、例えば、“Σ”や“=”のように、その文字の意味を表す文字コードを格納する。なお、後述する文字認識処理によって文字コードの候補が複数存在する場合には、第1候補の文字コードだけではなく第2候補以降の文字コードも格納することとしてもよい。
文字タイプ項目には、例えば、“内包文字”や“通常文字”のように、その文字が他の文字を内包しているか否かを示す文字の種類を格納する。
文字サイズ項目には、例えば、“大”や“小”のように、その文字を画面に表示する際の文字フォントのサイズを格納する。文字サイズは、例えば、“Σ”や“∫”等の演算記号には“大”を割り当て、添え字には“小”を割り当てる。
文字矩形項目には、“(X1,Y1)−(X2,Y2)”のように、その文字を画面に表示する際の位置として文字を含む矩形のうちの2点(始点−終点)の座標値を格納する。
リンク情報項目には、例えば、“左:「k」”や“右:「0」”のように、その文字が他のどの文字と繋がりがあるのかを示す情報を格納する。数式では、各文字が縦横の直線的な並びになることが多いため、上下左右にどの文字があるのかを記録しておくことで、数式を構成する文字間の関係を認識できる。
内包情報項目には、例えば平方根のように数学記号が対象式等の文字を包含する場合、その包含する文字の範囲を、例えば、“始端:「(」、終端:「」」”のように格納する。
添え字情報項目には、例えば、“Σ”のように数学記号の上下等に添え字を記述している場合に、添え字となる文字に関する情報(添え字の意味、添え字の位置、接続タイプ、接続先の文字矩形、リンク情報)を、添え字の個数分だけ格納する。
リンク情報項目、内包情報項目および添え字情報項目によって、文字間の接続関係が表現可能となる。
図3を参照してレイアウト情報についてより具体的に説明する。
図3(a)は、総和演算の数式を示した図である。図3(a)に示す数式は、総和記号“Σ”が、添え字として演算範囲を示す“K=0”および“8”を有し、総和演算の対象となる右辺式“(ak+bk)”を内包している。右辺式“(ak+bk)”および添え字式“K=0”は、左から右に直線的に繋がり、右辺式“(ak+bk)”の変数“a”および“b”は、添え字として変数“k”を有している。
図3(b)は、図3(a)に示す総和演算の数式を構成する構成要素のうち、総和記号“Σ”および添え字に含まれる“=”のレイアウト情報を吹き出し部に模式化して表した図である。
“=”のレイアウト情報を参照すると、文字タイプは“通常文字”であることがわかり、リンク情報によると“=”の左隣に“k”が接続し、右隣に“0”が接続していることがわかる。また、内包情報および添え字情報は共に“なし”となっているため、“=”に内包する文字は存在せず、“=”の添え字となる文字も存在しないことがわかる。
“Σ”のレイアウト情報を参照すると、文字タイプは“内包文字”であることがわかる。リンク情報が“なし”となっているため、“Σ”は他の文字への接続を有さず、解析対象の数式は総和演算単体の数式であることがわかる。また、内包情報によると、“Σ”に内包する文字の範囲が“(”から“)”までとなっているため、“Σ”は、“(ak+bk)”を右辺式として内包していることがわかる。さらに、添え字情報に“k=0”と“8”の情報を格納しているため、“Σ”の上下に位置する添え字が“k=0”と“8”であることがわかる。
なお、レイアウト情報のデータ構成は、図2に示すデータ構成には限定されず、数式を構成する各文字間の関係を表現できれば、他のデータ構成であってもよい。
図1に示す文字認識部112は、文字認識処理を実行するとともに、文字認識処理によって認識した文字でレイアウト情報を更新する。文字認識処理では、レイアウト解析部111によって1文字単位に区分した各文字に対して文字認識を行う。なお、文字認識処理を実現する文字認識手法としては、あらゆる文字認識手法を用いることができる。具体的には、例えば、基本ストローク手法やパターンマッチング手法を用いることができる。
数式構成部113は、数式構造認識処理を実行するとともに、数式構造認識処理によって生成した数式構造情報を数式構造情報DB15に格納する。数式構造認識処理では、レイアウト情報に基づいて数式の演算方法や演算順序を表す数式構造情報を生成する。数式構造情報は、例えば、数学記号の規則、個々の文字が有する意味、周辺に存在する文字との位置関係、文字サイズの大小関係等に基づいて、生成する。
図4を参照して数式構造情報について説明する。図4(a)は、一般的なツリー型のデータ構造を示す。本実施形態における数式構造情報は、例えば、図4(a)に示すツリー型のデータ構造によって表すことができる。このデータ構造は、処理や定義等を表す“節”と、定数や変数等を表す“葉”と、それらを接続する“枝”とから成る階層構造を有する。数式の演算方法や演算順序は、上記データ構造の下層から上層に向かってツリーを辿ることで表できる。図4(b)は、図3(a)の数式に基づいて生成した数式構造情報の一例を示したものである。図4(b)に示すデータ構造の下層から上層に向かってツリーを辿ると、図3(a)に示す総和演算の数式を表現できる。
なお、数式構造情報のデータ構造は、図4に示すツリー型のデータ構造には限定されず、数式を計算する順序や方法等の数式構造を示すことができれば、他のデータ構造であってもよい。
図1に示すように、変更部13は、操作判定部131と、編集表示部132と、レイアウト変更部133とを有する。
操作判定部131は、レイアウト情報DB14および数式構造情報DB15に登録されているレイアウト情報および数式構造情報により表される数式に対して行われたユーザの編集操作の内容を判定する。ユーザが編集操作を行う入力装置は、編集箇所を座標レベルで指し示すことができるものであればよい。具体的には、例えば、電子ペンやマウス等のポインティングデバイスを用いることができる。
編集表示部132は、ユーザの編集操作に応じて移動する文字や、サイズが変わる文字等をディスプレイ16に表示する。
レイアウト変更部133は、ユーザの編集操作に応じてレイアウト情報を更新する。レイアウト変更部133がレイアウト情報を更新すると、数式認識部11の数式構成部113は、更新したレイアウト情報に基づいて数式構造認識処理を実行し、数式構造情報を更新する。
レイアウト変更部133は、レイアウト情報を変更する変更処理として、範囲変更処理、連動型意味変更処理および非連動型意味変更処理を実行する。つまり、レイアウト変更部133は、範囲変更処理を実行する第1の変更部と、連動型意味変更処理を実行する第2の変更部と、非連動型意味変更処理を実行する第3の変更部と、を有する。なお、これら3種類の変更処理によって、数式構造の誤りとして考えられるパターンのほとんどをカバーすることが可能となる。以下に3種類の変更処理の内容について詳細に説明する。
範囲変更処理は、ユーザの編集操作によって編集対象に指定した数学記号の演算対象となる構成要素の範囲を変更することで数式の意味を変更する処理である。
範囲変更処理で編集対象となる数学記号としては、例えば、括弧記号“()”、絶対値記号“||”、行列記号“[]”、分数記号“−”、平方根記号“√”、ベクトル記号“→”、総和記号“Σ”、総積記号“Π”、積分記号“∫”、連立方程式記号“{”が該当する。これらの数学記号は、数学記号と各構成要素との位置関係によって演算範囲が決まる数学記号である。これらの数学記号の物理的な長さまたは大きさによって、数式を構成する各構成要素のどの部分が演算対象となるのかを示すことができる。例えば、分数記号“−”の場合には、演算対象となる分母および分子の範囲は、分数記号“−”の長さによって定まる。つまり、数学記号の物理的な長さまたは大きさを伸縮することで、演算対象となる構成要素の範囲を変更することが可能となる。
なお、範囲変更処理で編集対象となる数学記号は、例えば、テーブルに記憶され、参照可能に管理される。
図5を参照して、範囲変更処理による変更内容について具体的に説明する。図5は、平方根記号“√”の演算対象となる構成要素の範囲を、“2”から“2−y”に変更する際の過程を模式的に示した図である。
最初に、ユーザが編集対象となる“√”をポインティングデバイスでタップすると、“√”が伸縮可能な状態に移行する。続いて、ユーザが“√”の右上端部をポインティングデバイスで右方向に移動させると、ポインティングデバイスの移動に応じて“√”の横線が右方向に伸びていく。続いて、“√”の横線が“y”の上方を経過し終えた時点でユーザがポインティングデバイスを離すと、“√”の演算対象となる構成要素の範囲が確定する。つまり、この時点で“√”の横線の下部に位置する“2−y”が平方根記号“√”の演算対象となる。
なお、図5では演算範囲を右方向に拡張する例を示したが、左方向への縮小や、上下方向への伸縮も同様の操作で行うことができる。
連動型意味変更処理は、ユーザの編集操作によって編集対象に指定した構成要素を他の位置に移動することで数式の意味を変更する処理である。構成要素を他の位置に移動する方法としては、例えば、構成要素を特定の数学記号の特定位置に移動する方法と、特定の数学記号の特定位置にある構成要素をこの数学記号の特定位置以外に移動させる方法とがある。
連動型意味変更処理で編集対象となる数学記号としては、例えば、べき乗“Xn”、べき乗根“n√”、添え字“Xn”、総和記号“Σ”、総積記号“Π”、積分記号“∫”、極限記号“lim”、対数記号“loga”が該当する。これらの数学記号は、数学記号の特定位置にある構成要素を用いて演算する数学記号である。構成要素が数学記号の特定位置にあるか否かによって構成要素が数学記号の演算に用いられるものであるのか否かが決まる。
なお、連動型意味変更処理で編集対象となる数学記号は、例えば、テーブルに記憶され、参照可能に管理される。
例えば、“X”の“2”乗の場合、文字認識で“X”および“2”の認識に成功した場合であっても、“2”の位置および大きさを誤認識すると、“X2”と認定されることがある。このような場合に、“2”を“X”の右隣りから右上に移動することで、“2”が“X”の指数であることを示す。この移動操作によって、“X2”を“X”の“2”乗に変更できる。一方、“X2”を“X”の“2”乗に誤認識した場合には、“2”を“X”の右上から右隣に移動することで、“2”が“X”の指数ではないことを示す。この移動操作によって、“X”の“2”乗を“X2”に変更できる。
図6を参照して、連動型意味変更処理による変更内容について具体的に説明する。図6(a)は、独立した構成要素として認識した“X”および“i”を、“i”を“X”の特定位置に移動することで、“i”を“X”の指数または添え字に変更する際の過程を模式的に示した図である。
最初に、ユーザが編集対象となる“i”をポインティングデバイスで選択してそのまま“i”を“X”の右上または右下に向けてドラッグすると、ドラッグに合わせて“i”の表示位置が移動する。続いて、“i”を“X”の右上または右下に移動した時点でユーザがポインティングデバイスを離すと、“i”の移動後の位置が確定する。続いて、移動後の位置が指数または添え字の位置であると判定された場合に、“i”の表示サイズを小さくする等して、“i”が“X”の指数または添え字に変更されたことをユーザに明示する。
なお、“i”の表示サイズを変更するタイミングは、“i”の移動後の位置が確定した後には限定されない。例えば、“i”を移動しているときにリアルタイムで徐々に表示サイズを変更してもよい。これにより、ユーザは操作内容を確認しながら移動操作を確実に行うことができる。
図6(a)では、1文字を移動させる場合について例示したが、図6(b)では、複数文字を移動させる場合について例示する。図6(b)は、独立した構成要素として認識した“2”、“n”、“√a”(aの平方根)を、“2n”を“√a”の特定位置に移動、または“n√a”を“2”の特定位置に移動することで、“2n”を“√a”の累乗根に変更、または“n√a”を“2”の指数に変更する際の過程を模式的に示した図である。
最初に、ユーザが編集対象となる“2n”または“n√a”をポインティングデバイスで選択してそのまま“2n”を“√a”の左上または“n√a”を“2”の右上に向けてドラッグすると、ドラッグに合わせて“2n”または“n√a”の表示位置が移動する。続いて、“2n”を“√a”の左上に移動または“n√a”を“2”の右上に移動した時点でユーザがポインティングデバイスを離すと、“2n”または“n√a”の移動後の位置が確定する。続いて、移動後の位置が累乗根または指数の位置であると判定した場合に、“2n”または“n√a”の表示サイズを小さくして、“2n”が“√a”の累乗根または“n√a”が“2”の指数に変更したことをユーザに明示する。
なお、図6では通常文字を添え字に変更する例を示したが、添え字を通常文字に変更することも同様の操作で行うことができる。
非連動型意味変更処理は、ユーザの編集操作によって編集対象に指定した構成要素に基づいて解釈可能な解釈候補をユーザに提供し、一の解釈候補をユーザに選択することで数式の意味を変更する処理である。非連動型意味変更処理で編集対象となる数学記号としては、例えば、フーリエ変換記号“F”、ラプラス変換記号“L”、デルタ関数記号“δ”、総和記号“Σ”、総積記号“Π”、括弧記号“()”、行列記号“[]”が該当する。これらの数学記号は、数学記号中に複数の解釈を含む可能性のある数学記号である。
なお、非連動型意味変更処理で編集対象となる数学記号は、例えば、テーブルに記憶され、参照可能に管理される。
例えば、数式の構成要素に、“S”、“i”、“n”、“x”という文字列が含まれている場合に、この文字列の解釈としては、正弦関数を示す“Sin”および“x”と、2変数の乗算を示す“Si”および“nx”と、添え字として“inx”を有する変数“S”と、が考えられる。このように複数の解釈が存在する場合には、レイアウト情報に照らし合わせて最適な解釈を選択しても、必ずしも正しい解釈であるとは限らない。解釈ミスが判明した場合に、1文字ずつ個別に修正していては作業効率が低下する。非連動型意味変更処理は、これらの事情を考慮したものであり、予め考え得る解釈パターンを解釈候補としてユーザに提供し、ユーザに正しい解釈を選択することで、作業効率の向上を図るものである。
非連動型意味変更処理は、一つの数式を複数行に亘って記述した結果、複数の数式として解釈された場合や、複数の数式を誤って一つの数式として解釈された場合の変更処理としても有効である。解釈候補が多すぎて表示しきれない場合には、上位候補を優先して表示することや、解釈の評価値を定義して評価値が一定値以上となる候補を表示することとしてもよい。
図7を参照して、非連動型意味変更処理による変更内容について具体的に説明する。図7は、“Si”および“nx”として認識した数式の構成要素を、正弦関数“Sinx”に変更する際の過程を模式的に示した図である。
最初に、ユーザが編集対象となる“Si”および“nx”の文字列を範囲指定してポインティングデバイスで選択する。続いて、“S”、“i”、“n”、“x”という文字列に基づいて解釈可能な解釈候補の一覧を表示する。解釈候補の一覧を表示する要件として、例えば、編集対象文字列の再選択や、解釈候補一覧の表示ボタン選択等を定めることができる。
続いて、解釈候補の一覧から、正しい解釈である“Sinx”をポインティングデバイスで選択する。続いて、解釈候補の一覧が非表示となり、“Si”および“nx”として認識した数式の構成要素を、ユーザが選択した正弦関数“Sinx”に変更する。
なお、解釈候補一覧に表示する解釈候補は、数式認識部11によって数式を認識する際に解釈できた候補のうち、2位以下の候補を使用することとすればよい。また、解釈候補一覧から選択して変更した場合には、選択した時点で解釈候補一覧に表示する解釈候補を更新することとしてもよい。
図1に示すように、表示部12は、数式表示部121を有する。数式表示部121は、数式構成部113が出力した数式構造情報に対応する数式をディスプレイ16に表示する。つまり、数式表示部121は、数式認識部11が数式を認識した場合には、認識後の数式をディスプレイ16に表示し、変更部13が数式を変更した場合には、変更後の数式をディスプレイ16に表示する。
次に、図8を参照して本実施形態における数式認識システム1の動作について説明する。図8は、数式認識システム1における数式認識処理の手順を説明するためのフローチャートである。
最初に、ユーザの入力指示が、数式データの認識を依頼する認識指示か、数式データの修正を依頼する修正指示かを判定する(ステップS101)。認識指示や修正指示は、例えば、メニュー選択やボタン選択等によって入力されることとしてもよいし、ジェスチャ入力によって入力されることとしてもよい。
上記ステップS101の判定で、ユーザの入力指示が認識指示であると判定した場合に、レイアウト解析部111は、レイアウト解析処理を実行する(ステップS102)。続いて、文字認識部112は、文字認識処理を実行する(ステップS103)。続いて、数式構成部113は、数式構造認識処理を実行する(ステップS104)。続いて、表示部12は、数式構造認識処理が出力する数式構造情報に対応する数式をディスプレイ16に表示する(ステップS105)。
一方、上記ステップS101の判定で、ユーザの入力指示が修正指示であると判定した場合に、操作判定部131は、ユーザの編集操作の内容を判定する(ステップS106)。
レイアウト変更部133は、上記ステップS106の判定でユーザの編集操作が伸縮操作であると判定した場合には、範囲変更処理を実行し(ステップS107)、ユーザの編集操作が移動操作であると判定した場合には、連動型意味変更処理を実行し(ステップS108)、ユーザの編集操作が選択操作であると判定した場合には、非連動型意味変更処理を実行する(ステップS109)。続いて、上述したステップS104に処理を移行する。
なお、ステップS106以降の数式編集処理は、ステップS101〜ステップS105までの数式認識処理をあらかじめ実行し、レイアウト情報および数式構造情報がレイアウト情報DB14および数式構造情報DB15に登録されている数式に対して実行できる。
図9を参照して、図8のステップS107で実行する範囲変更処理の処理手順について説明する。
最初に、レイアウト変更部133は、伸縮操作の対象に指定した文字が範囲変更処理の対象となる数学記号であるか否かを判定する(ステップS201)。この判定がNOである場合(ステップS201;NO)には、範囲変更処理を終了する。
一方、このステップS201の判定で操作対象に指定した文字が処理対象となる数学記号であると判定した場合(ステップS201;YES)に、レイアウト変更部133は、伸縮操作による伸縮方向が、操作対象となる数学記号の伸縮可能な方向であるか否かを判定する(ステップS202)。例えば、操作対象となる数学記号が、分数記号“−”である場合には分数記号“−”の伸縮可能な方向は左右方向となり、積分記号“∫”である場合には積分記号“∫”の伸縮可能な方向は上下方向となる。この判定がNOである場合(ステップS202;NO)には、範囲変更処理を終了する。
一方、このステップS202の判定で伸縮操作による伸縮方向が操作対象となる数学記号の伸縮可能な方向であると判定した場合(ステップS202;YES)に、レイアウト変更部133は、伸縮操作が継続中であるか否かを判定する(ステップS203)。この判定がYESである場合(ステップS203;YES)に、レイアウト変更部133は、伸縮可能な範囲内であるか否かを判定する(ステップS204)。ここで、伸縮可能な範囲としては、例えば、数式全体の外接矩形の範囲や、ディスプレイ16の表示領域の範囲等を設定できる。また、伸縮範囲内に文字が1文字も含まれない状況を回避するために、伸縮可能な範囲に最小値を設定することとしてもよい。
上記ステップS204の判定で伸縮可能な範囲内ではないと判定した場合(ステップS204;NO)には、後述するステップS206に処理を移行する。一方、伸縮可能な範囲内であると判定した場合(ステップS204;YES)に、編集表示部132は、操作対象となる数学記号を表示する際のサイズを、伸縮操作に応じたサイズに変更する(ステップS205)。
続いて、編集表示部132は、操作対象となる数学記号の表示サイズを更新し(ステップS206)、上記ステップS203に処理を移行する。つまり、伸縮可能な範囲内で伸縮操作を行っている場合には、その伸縮操作に応じた表示サイズで表示し、伸縮可能な範囲を超えて伸縮操作を行っている場合には、制限範囲内での表示サイズで表示する。
一方、上記ステップS203の判定で伸縮操作が終了(決定)したと判定した場合(ステップS203;NO)に、レイアウト変更部133は、伸縮操作によって数式構造が変化するか否かを判定する(ステップS207)。この判定がNOである場合(ステップS207;NO)には、範囲変更処理を終了する。例えば、範囲変更処理の対象となる数学記号を伸縮した場合であっても、その数学記号に内包される構成要素が同じであれば、レイアウト情報を更新する必要はない。
一方、このステップS207の判定で伸縮操作によって数式構造が変化すると判定した場合(ステップS207;YES)に、レイアウト変更部133は、操作対象の数学記号に内包されている構成要素のレイアウト情報を更新する(ステップS208)とともに、操作対象の数学記号に内包されていない構成要素のレイアウト情報も更新する(ステップS209)。このステップS209で更新対象となる構成要素としては、例えば、伸縮操作によって数学記号の内包構成要素から除外された構成要素や、伸縮操作によって内包されることとなった構成要素が操作前に内包していた数学記号に関わる構成要素が該当する。
続いて、数式構成部113は、更新後のレイアウト情報に基づいて数式構造情報を生成し、レイアウト変更部133は、生成した数式更新情報に対応する数式が、数式として成立するか否かを判定する(ステップS210)。この判定がYESである場合(ステップS210;YES)には、範囲変更処理を終了する。一方、このステップS210で数式として成立しないと判定した場合(ステップS210;NO)には、エラー処理を実行して(ステップS211)、範囲変更処理を終了する。エラー処理としては、例えば、伸縮操作による変更をキャンセル扱いとして変更前の状態に戻す処理、エラーであることをメッセージやビープ音によってユーザに通知する処理等が該当する。
図10を参照して、図5に示す変更を行った場合におけるレイアウト情報の変更内容について具体的に説明する。図10(a)は、変更前の“√(2)−y”(2の平方根−y)のレイアウト情報を模式的に示す図であり、図10(b)は、変更後の“√(2−y)”(「2−y」の平方根)のレイアウト情報を模式的に示す図である。
最初に、ユーザが“√”を編集対象として指定したときに、レイアウト変更部133は、レイアウト情報の文字表記項目の内容を参照し、範囲変更処理の対象となる数学記号であるか否かを判定する。数学記号であるか否かは、テーブルを参照して判定できる。
続いて、“√”の右上端をポインティングデバイスで右方向に伸ばし始めたときに、レイアウト変更部133は、レイアウト情報の文字矩形項目の座標値を参照し、伸縮操作されている“√”の描画状態を伸縮操作に応じて更新する。
続いて、ユーザがポインティングデバイスを離して伸縮位置が確定したときに、レイアウト変更部133は、“√”の演算範囲を決定するために、“√”が内包している構成要素を、レイアウト情報のリンク情報項目に基づいて探索する。
図10(a)に示す各リンク情報では、“√”の右側には“−”が繋がっており、“−”の右側には“y”が繋がっているため、“−”および“y”の各文字矩形項目の値と“√”の文字矩形項目の値とを比較して、“√”の演算範囲を決定することになる。この処理に併せて、“√”の文字矩形項目の妥当性を検証することとしてもよい。この検証の結果、例えば、演算範囲に構成要素が1文字も含まれていない場合にはエラーとすることや、数式の右端の文字から大きくはみ出すような伸縮操作が指示された場合には、“√”の文字矩形情報を数式の右端の文字にする等の補正処理を行うことができる。
図10に示すように、範囲変更処理の結果、“√”の文字矩形情報を、伸縮後の“√”に対応する矩形座標に変更し、“√”のリンク情報を、“右:「−」”から“なし”に変更し、“√”の内包情報を、“始端&終端:「2」”から“始端:「2」、終端:「y」”に変更する。また、“−”のリンク情報を、“左:「√」、右:「y」”から“左:「2」、右:「y」”に変更する。
なお、レイアウト情報を変更した後は、変更したレイアウト情報に基づいて数式構造情報を生成し、変更後の数式が数式として成立するか否かを判定する。例えば図10(b)に示すように、“√(2−y)”(「2−y」の平方根)に変更した場合には数式として成立するが、“√(2−)y”(「2−」の平方根とyとの積)に変更した場合には、「2−」の平方根という意味不明の数式となるため、エラーとする。この場合は、ユーザに対してエラーであることを通知し、修正前の状態に戻す等のエラー処理を行う。
図11を参照して、図8のステップS108で実行する連動型意味変更処理の処理手順について説明する。
最初に、レイアウト変更部133は、移動操作が継続中であるか否かを判定する(ステップS301)。この判定がYESである場合(ステップS301;YES)に、レイアウト変更部133は、操作対象が添え字系(べき乗等を含む)であるか否かを判定する(ステップS302)。この判定がYESである場合(ステップS302;YES)に、レイアウト変更部133は、操作対象が添え字領域から離脱しているか否かを判定する(ステップS303)。
このステップS303の判定で操作対象が添え字領域から離脱していないと判定した場合(ステップS303;NO)には、後述するステップS307に処理を移行する。一方、操作対象が添え字領域から離脱していると判定した場合(ステップS303;YES)に、編集表示部132は、操作対象となる構成要素を表示する際のサイズを、移動操作に応じたサイズに拡大する(ステップS304)。
続いて、編集表示部132は、操作対象となる構成要素の表示サイズを更新し(ステップS307)、上記ステップS301に処理を移行する。つまり、添え字系の構成要素が添え字領域から離脱した場合には、その移動操作に応じた表示サイズに拡大表示し、添え字系の構成要素が添え字領域内にある場合には、添え字系のままの表示サイズで表示する。
一方、上記ステップS302の判定で操作対象が添え字系ではないと判定した場合(ステップS302;NO)に、レイアウト変更部133は、操作対象が添え字領域に進入しているか否かを判定する(ステップS305)。
このステップS305の判定で操作対象が添え字領域に進入していないと判定した場合(ステップS305;NO)には、後述するステップS307に処理を移行する。一方、操作対象が添え字領域に進入していると判定した場合(ステップS305;YES)に、編集表示部132は、操作対象となる構成要素を表示する際のサイズを、移動操作に応じたサイズに縮小する(ステップS306)。
続いて、編集表示部132は、操作対象となる構成要素の表示サイズを更新し(ステップS307)、上記ステップS301に処理を移行する。つまり、添え字系以外の構成要素が添え字領域に進入した場合には、その移動操作に応じた表示サイズに縮小表示し、添え字系以外の構成要素が添え字領域外にある場合には、そのままの表示サイズで表示する。
一方、上記ステップS301の判定で移動操作が終了(決定)したと判定した場合(ステップS301;NO)に、レイアウト変更部133は、移動操作によって数式構造が変化するか否かを判定する(ステップS308)。この判定がNOである場合(ステップS308;NO)には、連動型意味変更処理を終了する。例えば、連動型意味変更処理の対象となる数学記号を移動した場合であっても、その数学記号の意味が変わらないのであれば、レイアウト情報を更新する必要はない。
一方、このステップS308の判定で移動操作によって数式構造が変化すると判定した場合(ステップS308;YES)に、レイアウト変更部133は、操作対象の移動元の数式に含まれる構成要素のレイアウト情報を更新する(ステップS309)とともに、操作対象の移動先の数式に含まれる構成要素のレイアウト情報も更新する(ステップS310)。
続いて、数式構成部113は、更新後のレイアウト情報に基づいて数式構造情報を生成し、レイアウト変更部133は、生成した数式更新情報に対応する数式が、数式として成立するか否かを判定する(ステップS311)。この判定がYESである場合(ステップS311;YES)には、連動型意味変更処理を終了する。一方、このステップS311で数式として成立しないと判定した場合(ステップS311;NO)には、エラー処理を実行して(ステップS312)、連動型意味変更処理を終了する。
図12を参照して、図6(b)に示す変更を行った場合におけるレイアウト情報の変更内容について具体的に説明する。図12(a)は、変更前の“2n√a”(2とnとaの平方根との積)のレイアウト情報を模式的に示す図であり、図12(b)は、変更後の“2(n√a)”(2の「n√a」乗)のレイアウト情報を模式的に示す図である。
最初に、ユーザが“n√a”を編集対象に指定したときに、レイアウト変更部133は、レイアウト情報の文字矩形項目の内容を参照し、編集対象の文字列全体の外接矩形を算出する。
続いて、ユーザがポインティングデバイスで“n√a”を移動しているときに、レイアウト変更部133は、編集対象の文字列に含まれる各構成要素の文字矩形項目の座標値を更新し、“n√a”の描画状態を移動操作に応じて更新する。
続いて、ユーザがポインティングデバイスを離して伸縮位置が確定したときに、レイアウト変更部133は、“n√a”と他の構成要素との接続関係を検証する。“n√a”の外接矩形と他の構成要素の文字矩形項目の座標値とを比較して、“n√a”が他の構成要素の斜め上や斜め下に位置すると判定した場合に、レイアウト変更部133は、“n√a”を添え字と見なして各構成要素の接続関係を変更する。一方、“n√a”が他の構成要素の斜め上や斜め下に位置しないと判定した場合に、レイアウト変更部133は、“n√a”を通常文字と見なして各構成要素の接続関係を変更する。
図12に示すように、連動型意味変更処理の結果、“2”のリンク情報を、“右:「n」”から“なし”に変更し、“2”の添え字情報を、“なし”の状態から“n√a”の情報を追加した状態に変更する。また、“n”の文字サイズ情報を、“中”から“小”に変更し、“n”の文字矩形情報を、移動後の矩形座標に変更し、“n”のリンク情報を、“左:「2」、右:「√」”から“左:なし、右:「√」”に変更し、“n”の添え字情報を、“なし”の状態から“2”の情報を追加した状態に変更する。
なお、レイアウト情報を変更した後は、変更したレイアウト情報に基づいて数式構造情報を生成し、変更後の数式が数式として成立するか否かを判定する。例えば図6(b)に示すように、“2n”を“√”の左上に移動した場合には数式として成立するが、“2”を“n”の左上に移動した場合には、意味不明の数式となるため、エラーとする。この場合は、ユーザに対してエラーであることを通知し、修正前の状態に戻す等のエラー処理を行う。
図13を参照して、図8のステップS109で実行する非連動型意味変更処理の処理手順について説明する。
最初に、レイアウト変更部133は、選択操作の操作対象が1文字であるか否かを判定する(ステップS401)。この判定がNOである場合(ステップS401;NO)に、数式構成部113は、操作対象の文字列のレイアウト情報に基づいて数式構造情報を生成し(ステップS402)、レイアウト変更部133は、生成した数式構造情報に基づいて、操作対象の文字列の意味を選択するための選択メニューを生成する(ステップS403)。そして、後述するステップS406に処理を移行する。
一方、上記ステップS401の判定で選択操作の操作対象が1文字であると判定した場合(ステップS401;YES)に、レイアウト変更部133は、操作対象の文字が非連動型意味変更処理の対象となる文字であるか否かを判定する(ステップS404)。この判定がNOである場合(ステップS404;NO)には、非連動型意味変更処理を終了する。なお、非連動型意味変更処理の対象となる一文字としては、例えば、数学記号(フーリエ変換記号、ラプラス変換記号)または変数名の双方になり得る“F”や“L”が該当する。また、非連動型意味変更処理の対象となる一文字であるか否かは、テーブルを参照して判定できる。
一方、このステップS404の判定で操作対象の文字が非連動型意味変更処理の対象となる文字であると判定した場合(ステップS404;YES)に、レイアウト変更部133は、操作対象の文字の解釈(意味)を選択するための選択メニューを生成する(ステップS405)。
続いて、編集表示部132は、上記ステップS403またはステップS405で生成した選択メニューをディスプレイ16に表示する(ステップS406)。なお、図7に示す“Sinx”の下方に表示している選択メニューには、3つの解釈候補を表示している。
続いて、ユーザが選択メニューから一の解釈候補を選択すると、選択操作によって数式構造が変化するか否かを判定する(ステップS407)。この判定がNOである場合(ステップS407;NO)には、非連動型意味変更処理を終了する。例えば、メニュー選択操作をキャンセルした場合には数式構造が変化しないので、レイアウト情報を更新する必要はない。
一方、このステップS407の判定で選択操作によって数式構造が変化すると判定した場合(ステップS407;YES)に、レイアウト変更部133は、選択した解釈候補に含まれる構成要素のレイアウト情報を更新する(ステップS408)。
続いて、数式構成部113は、更新後のレイアウト情報に基づいて数式構造情報を生成し、レイアウト変更部133は、生成した数式更新情報に対応する数式が、数式として成立するか否かを判定する(ステップS409)。この判定がYESである場合(ステップS409;YES)には、非連動型意味変更処理を終了する。一方、このステップS409で数式として成立しないと判定した場合(ステップS409;NO)には、エラー処理を実行して(ステップS410)、非連動型意味変更処理を終了する。
図14を参照して、図7に示す変更を行った場合におけるレイアウト情報の変更内容について具体的に説明する。図14(a)は、変更前の“Si”および“nx”のレイアウト情報を模式的に示す図であり、図14(b)は、変更後の“Sinx”のレイアウト情報を模式的に示す図である。
非連動型意味変更処理の場合には、選択対象の各構成要素の解釈を、解釈候補のメニューで選択した解釈に置き換えることになる。具体的には、例えば、図14(a)に示す各構成要素のレイアウト情報を削除して、図14(b)に示す各構成要素のレイアウト情報に置き換えることになる。
上述したように、実施形態における数式認識システム1によれば、レイアウト解析部111によって解析した数式を構成する構成要素のレイアウト情報を、ユーザの編集操作に応じて変更できる。
例えば、所定の数学記号に対して伸縮操作を行った場合には、伸縮操作に従って伸縮した数学記号の演算対象となる構成要素の範囲を変更できる。
また、所定の構成要素に対して移動操作を行った場合には、移動操作に従って移動した構成要素の位置を移動後の位置に変更し、移動操作に従って移動した構成要素のサイズを移動後の位置に対応するサイズに変更できる。
さらに、所定の構成要素に対して選択操作が行われた場合には、選択操作により選択した構成要素に基づいて解釈可能な複数の解釈候補を表示し、当該表示した複数の解釈候補から一の解釈候補を選択した場合に、選択操作により選択した構成要素のレイアウトを一の解釈候補が示すレイアウトに変更できる。
これにより、解析後の数式に含まれる構成要素に対してユーザが直接編集操作(伸縮操作、移動操作、選択操作)を行って構成要素の位置や大きさ、解釈等を変更できる。したがって、ユーザは、編集操作を通じて編集内容を直接指示しながら、解析後の数式のレイアウトを、所望するレイアウトに変更することが可能となる。それゆえに、数式の誤認識部分を簡易かつ直感的に修正できる。
また、変更過程および変更後の数式をディスプレイにリアルタイムで表示できるため、編集操作における操作回数や操作ミスの低減が可能となり、編集時の操作性を向上できる。
[変形例]
なお、上述した各実施形態は、単なる例示に過ぎず、実施形態に明示していない種々の変形や技術の適用を排除するものではない。すなわち、本発明は、その趣旨を逸脱しない範囲で様々な形態に変形して実施できる。
例えば、上述した実施形態において説明した図9のステップS210、図11のステップS311、図13のステップS402およびS409では、数式構成部113が数式構造情報を生成しているが、数式構造情報を生成する機能をレイアウト変更部133に付与し、上記各ステップにおいてレイアウト変更部133が数式構造情報を生成することとしてもよい。
また、上述した実施形態では、数式認識システム1が、範囲変更処理、連動型意味変更処理および非連動型意味変更処理の3種類の変更処理を実行しているが、必ずしも3種類全てを実行する必要はなく、少なくとも1種類の変更処理を実行することができればよい。
また、上述した実施形態では一つの装置で本発明を実施しているが、本発明は複数の装置で実施することもできる。この場合には、上述した実施形態における装置が有する各機能を複数の装置に分散し、これら複数の装置群を上述した実施形態における監視状況表示装置と同様に機能させればよい。