以下に、添付図面を参照して、編集装置、方法、及びプログラムの実施形態を詳細に説明する。
[第1の実施形態]
<概要>
本実施形態に係る編集装置が有する機能(編集機能)について説明する。本実施形態に係る編集装置は、入力データから、編集時に操作可能な1又は複数のオブジェクト(操作対象オブジェクト)を生成する。本実施形態に係る編集装置は、生成したオブジェクトを表示し、オブジェクトの連結、結合、又は分離を指示するジェスチャー操作(直感的な編集操作)を受け付ける。本実施形態に係る編集装置は、受け付けた操作に従って、操作時に指定されたオブジェクトに対して、連結、結合、又は分離の編集処理を行い、編集結果に相当する新たなオブジェクト(編集結果オブジェクト)を生成する。その結果、本実施形態に係る編集装置は、生成した新たなオブジェクトを表示し、編集操作が反映された内容に編集画面を更新する。これにより、本実施形態に係る編集装置では、直感的な編集操作が可能となる。本実施形態に係る編集装置は、このような編集機能を有している。
従来の方法では、誤った箇所を何らかの手段で指定し、誤った箇所を消去して入力しなおすことで修正するものがある。また、従来の方法には、誤った箇所に対して代替候補を表示し、代替候補を選択することで修正するものもある。しかし、これらの方法では、修正時に何らかのキー操作が必要になり、近年、普及している小型の情報端末では、その操作は煩雑なものである。
例えばスマートフォンやタブレットなどの情報端末では、表示画面にタッチセンサを備え、人間の直感に即したジェスチャー操作が行える。このような情報端末では、誤った箇所の修正なども直感的な操作によって行え、編集が容易であることが望ましい。
そこで、本実施形態に係る編集装置は、入力データから、編集操作単位のオブジェクトを生成し、表示画面を介して受け付けたジェスチャー操作に従って、生成したオブジェクトの編集を行う仕組みとした。
その結果、本実施形態に係る編集装置では、入力データに対して直感的な操作を行うことができ、編集操作が容易となり、誤った箇所を修正するなどの編集作業の負担を軽減できる。これにより、本実施形態に係る編集装置は、ユーザ(例えば「編集者」)に対する利便性の向上を図ることができる。
以下に、本実施形態に係る編集装置が有する機能の構成とその動作について説明する。なお、以下の説明では、入力された音声の認識結果から生成されたテキスト文を編集する場面を例に説明を行う。
《構成》
図1は、本実施形態に係る編集装置100の機能構成例を示す図である。図1に示すように、本実施形態に係る編集装置100は、入力受付部11、表示部12、オブジェクト制御部13、オブジェクト管理部14、及び言語処理部15などを有する。
入力受付部11は、入力データを受け付ける。本実施形態に係る入力受付部11は、音声の認識結果から、発話文を人間が可読可能なテキストを生成することで、入力データを受け付ける。そのため、入力受付部11は、音声の入力を受け付ける音声入力部111と、入力された音声を認識し、認識結果からテキストを生成し、出力する音声認識部112などを有する。音声入力部111は、例えばマイクロフォンなどから音声信号を受け取り、デジタル化した音声データを出力する。音声認識部112は、出力された音声データを受け取り、音声認識により、例えば、文の区切りを検出し、検出した区切りごとの認識結果を得る。音声認識部112は、得た認識結果を出力する。これにより、入力受付部11は、認識結果から生成したテキストを入力データとする。
表示部12は、例えば、ディスプレイなどの表示画面に各種情報を表示する。また、表示部12は、例えば、タッチセンサなどにより、画面上の操作(「操作点の接触状態」や「操作点の移動」など)を検出し、検出結果から操作指示を受け付ける。本実施形態に係る表示部12は、編集時に操作可能な1又は複数のオブジェクトを表示し、オブジェクトの連結、結合、又は分離の各種編集操作を受け付ける。
オブジェクト制御部13は、編集時に操作可能な1又は複数のオブジェクトに対する編集を制御する。オブジェクト制御部13は、入力受付部11で受け付けた入力データ(テキスト)に対して、編集時に操作可能な1又は複数のオブジェクト(編集可能な操作単位のオブジェクト)を生成する。オブジェクト制御部13は、音声認識部112の1つの認識結果に対して、1つのオブジェクトを生成する。つまり、オブジェクト制御部13は、認識結果ごとに、編集時の操作対象オブジェクトを生成する。その結果、生成されたオブジェクトは、表示部12により編集画面に表示される。また、オブジェクト制御部13は、生成したオブジェクトの連結、結合、又は分離の編集処理を行う。このときオブジェクト制御部13は、表示部12が受け付けた操作指示に従って、操作時に指定されたオブジェクトに対して、連結、結合、又は分離の編集処理を行い、新たなオブジェクトを生成する。そのため、オブジェクト制御部13は、連結部131、結合部132、及び分離部133などを有する。連結部131は、2つのオブジェクトを連結し、新しいオブジェクト(連結オブジェクト)を生成する。また、結合部132は、2つ以上のオブジェクトを結合し、新しいオブジェクト(結合オブジェクト)を生成する。また、分離部133は、1つのオブジェクトを複数個に分離し、2つ以上のオブジェクト(分離オブジェクト)を生成する。つまり、オブジェクト制御部13は、編集操作ごとに、編集結果オブジェクトを生成する。このようして生成された新たなオブジェクトは、表示部12により画面に表示され、編集操作が反映された内容に編集画面が更新される。
ここで、オブジェクト制御部13が生成するオブジェクトについて説明する。オブジェクトは、編集時の操作対象に相当し、認識結果の属性と認識結果を表示する表示領域の属性とを有するデータである。例えば、テキストが認識結果として出力される場合に生成されるオブジェクト(以下「オブジェクトO」という)は、文属性と形状属性との2つの属性を有する。この場合、文属性の値(以下「文S」という)は、テキスト(文字又は文字列)で表現される文(認識結果)となる。また、形状属性の値は、テキストが表示される表示領域の形状を表す画面上の座標となる。具体的には、画面左上隅を原点として、垂直方向下向きを正の方向とするx軸と、水平方向右向きを正の向きとするy軸との座標系で表現された2つの座標点P=(x1,y1)及びQ=(x2,y2);(x1<x2,y1<y2)の組[P,Q](以下「形状[P,Q]」という)である。このような形状属性の2つの座標値からは、左上隅(x1,y1)、右上隅(x1,y2)、右下隅(x2,y2)、左下隅(x2,y1)を各頂点とする矩形が一意に定まる。よって、[P,Q]は、オブクジェクトOの領域(オブジェクト領域)が矩形に相当することを表している。なお、以下の説明では、文Sと形状[P,Q]との各属性の値を有するオブジェクトOを{S,[P,Q]}と表す。また、座標点PとQとの中点(=(P+Q)/2)を、オブジェクトOの中心点、又は、オブジェクトOの座標という。また、オブジェクトOが、認識結果を文Sとして有する場合には、「オブジェクトOに対応づけられた文S」又は「文Sに対応づけられたオブジェクトO」と表現する。
オブジェクトOの形状属性[P,Q]は、次のように決定される。図2は、本実施形態に係るオブジェクトOの表示例を示す図である。図2には、認識結果に相当する3つの文A、B、Cが対応づけられた各オブジェクトOの表示例が示されている。この場合、全ての文字は、同じ幅w、同じ高さhであるとし、オブジェクトOに対応づけられた文Sが、n文字の文字列からなるとする。
このとき、座標点Qは、以下(式1)と(式2)とで表現(算出)できる。
Qのx座標 = 座標点Pのx座標+幅w×文字数n ・・・ (式1)
Qのy座標 = 座標点Pのy座標+高さh ・・・ (式2)
一方、座標点Pは、これまでN個のオブジェクトOが表示されているとすると、以下(式3)と(式4)で表現(算出)できる。
Pのx座標 = 画面の左端からの距離ws ・・・ (式3)
Pのy座標 = オブジェクトOの個数N×高さh+オブジェクトOの個数N×オブジェクトO間の間隔hs ・・・ (式4)
このように、オブジェクト制御部13が生成したオブジェクトOは、画面の左端から所定の距離ws及び所定の間隔hsをあけて、左から右に、順次表示される。その結果、認識結果に相当する文Sは、オブジェクトOの矩形[P,Q]内部に横書きで表示される。
なお、画面幅は有限である。そのため、上記のような座標決定では、文Sの文字数nが、画面の横幅を超えたときや、表示するオブジェクトOの個数Nが増えたときなどの場合、オブジェクトOは、画面の縦方向からはみ出してしまう場合が考えられる。このような場合には、表示部12が、次のような表示処理を行えばよい。例えば、表示するオブジェクトOが、画面の下端より下に位置するときは、表示するオブジェクトOの高さh分、画面を上にスクロールするように表示する。また、横幅(w×n)が画面に収まらないときは、1つのオブジェクトOの高さhを、複数行分とって表示する。このように、表示部12は、表示する画面領域に応じて、表示するオブジェクトOを、画面に収まるような処理を行えばよい。
図1の説明に戻る。オブジェクト管理部14は、オブジェクトOを管理する。オブジェクト管理部14は、オブジェクト制御部13から、生成されたオブジェクトOを受け取り、記憶領域に記憶し、保存する。なお、オブジェクトOの記憶領域は、例えば、編集装置100が備える記憶装置の所定の記憶領域に相当する。オブジェクト管理部14は、オブジェクト制御部13からの指示に従って、オブジェクトOのデータ参照、読み込み、書き込みなどの各種データ操作を行う。
言語処理部15は、認識結果に相当する文Sに対して言語処理を行う。言語処理部15は、例えば、文Sを単語や形態素などの所定の単位に分解する。また、言語処理部15は、言語に基づく処理により、分解結果の文Sに対して、文字の修正や句読点の挿入など、文法上の修正を行う。
以下に、上記機能部の連携動作により可能となる編集操作について説明する。
《操作例》
本実施形態に係る編集機能は、オブジェクトOの連結、結合、分離の各編集操作が可能な環境を提供する。オブジェクトOの連結操作とは、2つのオブジェクトOを連結し、新しいオブジェクトO(連結オブジェクト)を生成する操作である。また、オブジェクトOの結合操作とは、2つ以上のオブジェクトOを結合し、新しいオブジェクトO(結合オブジェクト)を生成する操作である。また、オブジェクトOの分離操作とは、1つのオブジェクトOを分離し、2つ以上のオブジェクトO(分離オブジェクト)を生成する操作である。このように、本実施形態に係る編集機能は、直感的な編集操作を可能な環境を提供する。
図3は、本実施形態に係るオブジェクトOを連結する操作例を示す図である。図3(A)に示すように、2つのオブジェクトOを連結する場合、まず、ユーザは、画面上に表示されたオブジェクトOを指でタッチし(図中には、タッチした状態を黒丸で示す)、連結するオブジェクトOを指定する。その後、ユーザは、指をタッチした状態のままで、連結したいオブジェクトOの方向へ移動し(図中には、移動の軌跡を点線で示す)、連結したいオブジェクトO上で指を離すことで、オブジェクトOの連結処理を指示する。これを受けて、オブジェクト制御部13は、受け付けた指示に従って、2つのオブジェクトOを連結し、言語処理部15は、連結後の新しいオブジェクトOに対して文法上の文字修正を行う。その結果、図3(B)に示すように、2つのオブジェクトOに対応づけられた各文Sが、文字修正された1つの文(「来ています」が「着ています」に修正された連結文)となって画面に表示される。
図4は、本実施形態に係るオブジェクトOを結合する操作例を示す図である。図4(A)に示すように、3つのオブジェクトOを結合する場合、まず、ユーザは、画面上に表示された各オブジェクトOそれぞれを3本の指でタッチし(図中の黒丸)、結合する各オブジェクトOを指定する。その後、ユーザは、3本の指をタッチした状態のままで、画面上の同じ位置に3本の指を移動し(図中の点線)、指を離すことで、各オブジェクトOの結合処理を指示する。これを受けて、オブジェクト制御部13は、受け付けた指示に従って、3つのオブジェクトOを結合し、言語処理部15は、結合後の新しいオブジェクトOに対して文法上の文字修正を行う。その結果、図4(B)に示すように、3つのオブジェクトOに対応づけられた各文Sが、文字修正された1つの文(結合文)となって画面に表示される。
図5は、本実施形態に係るオブジェクトOを分離する操作例を示す図である。図5(A)に示すように、1つのオブジェクトOを3つの新たなオブジェクトOに分離する場合、まず、ユーザは、画面上に表示されたオブジェクトOを3本の指でタッチし(図中の黒丸)、分離する新しいオブジェクトOを指定する。その後、ユーザは、3本の指をタッチした状態のままで、画面上の異なる位置に3本の指を移動し(図中の点線)、指を離すことで、オブジェクトOの分離処理を指示する。これを受けて、オブジェクト制御部13は、受け付けた指示に従って、オブジェクトOを3つの新しいオブジェクトOに分離する。その結果、図5(B)に示すように、オブジェクトOに対応づけられた文Sが指定された3つの文(分離文)となって画面に表示される。
このような編集操作は、次のように実現される。例えば、表示部12は、タッチセンサにより、指などの画面上の操作点(タッチされた画面上の座標)を検出し、画面上の操作を受け付ける。このようにして受け付けられた操作は、表示部12からオブジェクト制御部13へと、操作イベントして通知される。その後、オブジェクト制御部13は、検出された操作点ごとの操作イベントを識別する。その結果、オブジェクト制御部13は、例えばジェスチャー操作時に、画面上のどの点をタッチしたのか、画面上のどの点に移動したか、画面上のどの点から指が離れたのかなどのタッチイベントを識別し、タッチイベントとイベントに対応する情報を取得する。
図6は、本実施形態に係るタッチイベントのデータ例を示す図である。図6に示すように、オブジェクト制御部13は、各種タッチイベントに対応するデータを取得する。取得するデータには、例えば、タッチイベントが「PUSH DOWN」の場合、タッチされた時刻、画面上の操作点の座標(x,y)、及び操作点の識別子などがある。また、タッチイベントが「MOVE」の場合、移動開始時刻、画面上の移動先の座標(x,y)、及び操作点の識別子などがある。また、タッチイベントが「PUSH UP」の場合、指が離れた時刻、画面上の操作点の最終座標(x,y)、及び操作点の識別子などがある。なお、このような情報は、例えば、OS(Operating System)などの基本ソフトウェアやマルチタッチプラットフォームなどが有するAPI(Application Program Interface)を介して取得できる。つまり、オブジェクト制御部13は、既存の仕組みを用いて、受け付けた編集操作に関する情報を取得できる。
以下に、本実施形態に係る編集装置100で実行される編集機能の基本処理について説明する。
《処理》
図7は、本実施形態に係る編集装置100の処理手順例を示すフローチャートである。図7に示す処理は、主にオブジェクト制御部13が実行する。図7に示すように、本実施形態に係るオブジェクト制御部13は、マルチタッチ検出ルーチンを実行することで(ステップS1)、画面上でタッチされたすべての操作点を検出する。次にオブジェクト制御部13は、操作点の個数Nから、検出された操作点があるか否か(N≠0)を判定する(ステップS2)。その結果、オブジェクト制御部13は、検出された操作点がなければ(ステップS2:NO)、処理を終了する。一方、オブジェクト制御部13は、検出された操作点があれば(ステップS2:YES)、検出された操作点の個数Nが2つ以上か否か(N>1)を判定する(ステップS3)。その結果、オブジェクト制御部13は、検出された操作点の個数Nが1つの場合(ステップS3:NO)、連結ルーチンを実行し(ステップS4)、処理を終了する。一方、オブジェクト制御部13は、検出された操作点の個数Nが2つ以上の場合(ステップS3:YES)、2つ以上のN個の操作点が、すべて同一のオブジェクトO内にあるか否かを判定する(ステップS5)。その結果、オブジェクト制御部13は、N個の操作点が同一のオブジェクトO内にない場合(ステップS5:NO)、結合ルーチンを実行し(ステップS6)、処理を終了する。一方、オブジェクト制御部13は、N個の操作点が同一のオブジェクトO内にある場合(ステップS5:YES)、分離ルーチンを実行し(ステップS7)、処理を終了する。
<詳細>
ここからは、上記処理の詳細処理について説明する。
《オブジェクト制御部13の詳細処理》
図8は、本実施形態に係るマルチタッチ検出ルーチンの処理手順例を示すフローチャートである。図8に示す処理は、図7に示すステップS1の処理例である。本実施形態に係るマルチタッチ検出ルーチンは、1つ以上の操作点のタッチを検知するために、1つ目の操作点がタッチされてからの経過時間Teの間に、別のタッチ検出を待ち、その間にタッチされた操作点を配列pに記録する。
図8に示すように、本実施形態に係るオブジェクト制御部13は、まず、タッチイベント(操作イベント)を検出するまで待機する(ステップS10:NO)。その結果、オブジェクト制御部13は、最初のタッチイベントを検出すると(ステップS10:YES)、「PUSH DOWN」イベントであると判断する。これにより、オブジェクト制御部13は、検出した操作点の識別子をid1とし、配列p[1]を{id1,(x1,y1)}として(ステップS11)、操作点の識別子と操作点の座標とを対応づける。次にオブジェクト制御部13は、最初のタッチイベントを検出してからの経過時間Te以内に(ステップS12:YES)、次のタッチイベントを検出するまで待機する(ステップS13:NO)。その結果、オブジェクト制御部13は、次のタッチイベントを検出すると(ステップS13:YES)、検出したタッチイベントの種類を判別する(ステップS14)。なお、オブジェクト制御部13は、経過時間Te以内に、次のタッチイベントを検出しなかった場合(ステップS12:NO)、処理を終了する。
オブジェクト制御部13は、検出したタッチイベントの種類が「PUSH DOWN」イベントの場合、配列p[1]と同時にタッチされた操作点として、操作点の個数Nを1つ増やす。オブジェクト制御部13は、配列p[N]を{idN,(xN,yN)}として、配列pに追加する(ステップS15)。また、オブジェクト制御部13は、検出したタッチイベントの種類が「PUSH UP」イベントの場合(一瞬タッチされたがすぐに離れた場合)、操作点p[n]´を離された操作点とする(ステップS16)。次にオブジェクト制御部13は、離された操作点p[n´]を配列p[n];(n=1,...,N)から削除し、あらためて配列番号を振り直し(ステップS17)、検出した操作点の個数NをN−1とする(ステップS18)。また、オブジェクト制御部13は、検出したタッチイベントの種類が「MOVE」イベントの場合、操作中の指のぶれとみなして、検出したタッチイベントを無視する(ステップS19)。これにより、マルチタッチ検出ルーチンの実行後には、検出した操作点が記録された配列p[n]={idn,(xn,yn)};(n=1,...,N)が得られる。
《連結処理》
図9は、本実施形態に係る連結ルーチンの処理手順例を示すフローチャートである。図9に示す処理は、図7に示すステップS4の処理例である。本実施形態に係る連結ルーチンは、本実施形態に係るオブジェクト制御部13が有する連結部131の処理であり、2つのオブジェクトOを連結し、連結したオブジェクトOを生成する。
本実施形態に係るオブジェクト制御部13は、マルチタッチ検出ルーチンで、タッチによる1つの操作点が検出された場合に、連結ルーチンを実行する。
図9に示すように、オブジェクト制御部13は、検出した操作点p[1]={id1,(x1,y1)}を受け取る。これを受けて、連結部131は、操作点p[1]がオブジェクトOの内部(境界線上を含む)か否かを判定する(ステップS20)。
その結果、連結部131は、操作点p[1]がオブジェクトOの内部になければ(ステップS20:NO)、いずれのオブジェクトOも指定されていないとし、連結ルーチンを終了する。
なお、上記判定は、次のように行うことができる。ある点A=(ax,ay)が、オブジェクトOの内部(境界線上を含む)に位置する点か否かの判定は、オブジェクトO={S,[P,Q]}の点P,Qに対し、P=(px,py),Q=(qx,qy)として、「点P≦点A、かつ、点A≦点Q」によって判定できる。ただし、点P≦点Aとは、「px≦ax、かつ、py≦ay」という意味に相当する。つまり、点P≦点Aとは、「画面上では、点Pは、点Aより左上側にある」という意味に相当する。点Pは、オブジェクトOの表示領域の矩形の左上端点に相当し、点Qは、矩形の右下端点に相当する。これにより、「点P≦点A、かつ、点A≦点Q」であれば、点Aは、矩形[P,Q]の内部、又は、境界線上にあると判定される。以下の説明では、上記判定方法を内点判定方法と称す。
また、連結部131は、操作点p[1]がオブジェクトOの内部にあれば(ステップS20:YES)、操作点p[1]を内部に持つオブジェクトO1={S1,[P1,Q1]}を特定する(ステップS21)。つまり、連結部131は、操作点p[1]がオブジェクトO1に含まれていることが検出されたとする。このとき、画面上では、表示部12が、オブジェクト制御部13からの指示を受けて、オブジェクトO1を他のオブジェクトOと異なる表示色に変えるなど、オブジェクトO1の操作対象状態をユーザが視認できるように、表示態様を変更するようにしてもよい。
次に連結部131は、操作点p[1]の「PUSH UP」イベントを検出するまで待機する(ステップS22:NO)。その結果、連結部131は、「PUSH UP」イベントを検出すると(ステップS22:YES)、オブジェクト管理部14に保存されているオブジェクトO1以外のすべてのオブジェクトOに対し、内点判定方法により、操作点p[1]のイベント発生位置(x,y:指を離した座標)が、オブジェクトO1(第1対象オブジェクト)以外のオブジェクトO2(第2対象オブジェクト)の内部か否かを判定する(ステップS23)。つまり、指がどのように動こうとも、最後に指を離した位置だけで判定する。
その結果、連結部131は、操作点p[1]のイベント発生位置(x,y)が、オブジェクトO1の内部にある、又は、すべてのオブジェクトOの内部にない場合(ステップS23:NO)、連結ルーチンを終了する。一方、連結部131は、操作点p[1]のイベント発生位置(x,y)が、オブジェクトO1以外のオブジェクトO2={S2,[P2,Q2]}の内部にある場合(ステップS23:YES)、オブジェクトO1とオブジェクトO2とを連結し、言語処理部15において、文S1と文S2とを連結した文(連結文)の修正文Sを生成する(ステップS24)。このとき連結部131は、次のような処理を行う。
連結部131は、連結操作の移動後に、オブジェクトO1がオブジェクトO2の上にあれば、文S1に文S2を連結する。一方、オブジェクトO2がオブジェクトO1の上にあれば、文S2に文S1を連結する。これにより、連結した文S’を生成する。具体的には、例えば、S1=「長袖のシャツを」、S2=「来ています」ならば、文S1に文S2を連結した文S’は、「長袖のシャツを来ています」となる。逆に、文S2に文S1を連結した文S’は、「来ています長袖のシャツを」となる。次に言語処理部15が、連結した文S’に対して文法上の修正を行う。このとき言語処理部15は、例えば、日本語であれば同音異義語の修正、英語であれば大文字小文字の修正、言語によらず句読点の挿入など、言語処理による文S’(連結文)の修正や整形などを行う。次に連結部131は、修正文Sに対応づけられた新しいオブジェクトOの形状を決定する。このとき点Pは、P1とP2のうち、y座標の小さい点(画面上で上側にある点)とする。また、連結部131は、右下端点Qは、点Pの座標(x,y)、修正文Sの文字数n、文字の幅w、及び文字の高さhなどから算出する。これにより、新しいオブジェクトOの形状が決定される。
次に連結部131は、修正文Sと修正文Sに対応づけられた新しいオブジェクトOの形状から、新しいオブジェクトO={S,[P,Q]}を生成する(ステップS25)。その結果、連結部131は、連結したオブジェクトO1とオブジェクトO2とを、オブジェクト管理部14から消去し、生成した新しいオブジェクトOを保存する(ステップS26)。次に連結部131は、連結したオブジェクトO1とオブジェクトO2とを、画面上からも消去し、生成した新しいオブジェクトOを表示する(ステップS27)ように、表示部12に指示する。
図10は、本実施形態に係る修正文Sを生成する処理手順例を示すフローチャートである。図10に示す処理は、図9に示す連結ルーチンのステップS24で実行される処理例である。本実施形態に係る言語処理部15は、文Sに対して、文字の修正や句読点の挿入など、文法上の修正を行う。例えばユーザが「長袖のシャツを、着ています」と、読点の位置で、間を置きながら発声した場合の音声認識は、それを2つの発声と解釈して、認識結果「長袖のシャツを」「来ています」となる。最後の「来ています」は、音声認識が、発声を2つに区切ったために同音異義語に誤ってしまったものである。さらに、この2つの文が翻訳されるとき、翻訳対象文が未完成な文のため、翻訳も適切に行われない。従来では、このような誤りが生じると、ユーザは、再度、同じ文を発声し直さなければならない。しかし、再発声しても、音声認識が誤認識を起こしたり、再び、無意識に発声の間にポーズをあけたりするために誤認識してしまうことがある。このようなことから、「来ています」が「着ています」に修正されるなど、同音異義語などの文法上の誤りを自動で修正できることが望まれる。本実施形態に係る言語処理部15は、このような修正機能を、以下の処理を実行することで実現する。
図10に示すように、本実施形態に係る言語処理部15は、まず、連結した文S’を受け取る。これを受けて、言語処理部15は、連結した文S’に対して形態素解析を行い、ラティスを生成する(ステップS30)。図11は、本実施形態に係る形態素解析結果として出力されるラティスの概念図である。図11には、連結した文S’が「長袖のシャツを来ています」であった場合のラティスの生成例が示されている。
図10の説明に戻る。次に言語処理部15は、生成したラティスに、同音異義語の並列パスを追加する(ステップS31)。図12は、本実施形態に係るラティスに対するパスの追加例を示す図である。図12(A)には、「来」に対して、「き」と「着」とが同音異義語として追加された例が示されている。
図10の説明に戻る。次に言語処理部15は、生成したラティスの全アークに、句読点パスを追加する(ステップS32)。図12(B)には、「シャツ」と「を」とのアークに対して、「、」と「。」との句読点パスが追加された例が示されている。
図10の説明に戻る。次に言語処理部15は、上記処理が施されたラティスに対して、ngramによるスコアを付与する(ステップS33)。次に言語処理部15は、このようなラティス構造に対して、trigramのスコアを算出し、Viterbiアルゴリズムにより、連結した文S’の始端から終端までの最適パス(スコア最大のパス)を算出する(ステップS34)。なお、形態素1から形態素2、さらに形態素3に至るパスのtrigramのスコアは、形態素1に続き形態素2が出現し、さらに形態素3が出現する確率に相当する。これは、統計的に予め求められるものとする(このとき句読点も形態素として扱うものとする)。これを、P(形態素3|形態素1,形態素2)と表現すると、連結した文S’の始端から、形態素1−Nを通り、終端に至るパスのスコアは、以下(式5)で表現(算出)できる。
パスのスコア = ΣlogP(形態素n|形態素n−2,形態素n−1) ・・・ (式5)
ただし、n=1,...,N+1であり、n=1の場合の形態素−1と形態素0とを始端、形態素N+1を終端とする。
その結果、言語処理部15は、算出した最適パスの形態素列を、修正文Sとして出力する。
このような言語処理により、例えば、スコアP(着|シャツ,を)とスコアP(来|シャツ,を)とが算出された場合は、P(着|シャツ,を)の方が、P(来|シャツ,を)よりスコアが大きい(確率が高い)。よって、出力される修正文Sは、「長袖のシャツを着ています。」となり、連結した文S’の「来」の誤りが修正される。これにより、本実施形態では、「シャツ」に対して、「来ている」ではなく「着ている」が正しいという言語仕様(文脈や知識)に従った修正を自動に行うので、テキスト入力などの修正操作が軽減され、煩雑な編集作業を行わなくてもよい。
なお、上記処理では、結果として、修正した文(修正文)Sが、連結した文S’と同じになり、修正されない場合もある。また、同音異義語と同様に、大文字・小文字の違う単語を並列パスとして追加すると、英語や日本語でも、英語表記されたものについて、大文字・小文字を修正できる。また、上記には、文Sの修正が可能であることを示すためのアルゴリズムの一例を示したが、これに限らず、既存のテキスト修正方法を用いてもよい。
《結合処理》
図13は、本実施形態に係る結合ルーチンの処理手順例を示すフローチャートである。図13に示す処理は、図7に示すステップS6の処理例である。本実施形態に係る結合ルーチンは、オブジェクト制御部13が有する結合部132の処理であり、2つ以上のオブジェクトOを結合し、結合したオブジェクトOを生成する。
本実施形態に係るオブジェクト制御部13は、マルチタッチ検出ルーチンで、タッチによる2つ以上(K≧2)の操作点が検出され、検出された操作点がすべて同一のオブジェクトO内にない場合に、結合ルーチンを実行する。
図13に示すように、オブジェクト制御部13は、検出した操作点p[k]=(xk,yk);(k=1,...K)を受け取る。これを受けて、結合部132は、まず、検出した操作点が、どのオブジェクトOの内部(境界線上を含む)にあるのかを、操作対象オブジェクト抽出ルーチンにより抽出する(ステップS40)。
その結果、結合部132は、操作対象オブジェクト抽出ルーチンの出力(操作点の集合)Q={(q[1],O[1]),...,(q[M],O[M])}を受け取り、各O[m]のコピーO’[m];(m=1,...,M)を作成し、Q={(q[1],O[1],O’[1]),...,(q[M],O[M],O’[M])}とする。なお、q[m]={idm,(xm,ym)}は、p[k]のうち、いずれかのオブジェクトOに内包される操作点を表す。また、O[m]は、q[m]を内包するオブジェクトOを表す。また、O’[m]は、q[m]を内包するオブジェクトOのコピーを表す。また、オブジェクトOは、タッチしたオブジェクトであり、オブジェクトO’は、指の動きにあわせて、オブジェクトOの移動した位置を記憶するためのコピーである。また、mは、1,...,Mである。また、結合部132は、「PUSH UP」イベントが検出されたとき(指が離れ、操作が完了したとき)のオブジェクトOを保持するObj={}を初期化する(要素数0の集合とする)(ステップS41)。
次に結合部132は、抽出したオブジェクト数Mが2以上か否か(M>1)を判定する(ステップS42)。その結果、結合部132は、抽出したオブジェクト数Mが1の場合(ステップS42:NO、ステップS43:YES)、操作点が、1つのオブジェクトOを指定していため、連結ルーチンへと移行する(ステップS44)。なお、結合部132は、抽出したオブジェクト数Mが0の場合(ステップS42:NO、ステップS43:NO)、処理を終了する。一方、結合部132は、抽出したオブジェクト数Mが2以上の場合(ステップS42:YES)、すべての操作点から指が離れず、接触状態の操作点が画面上に存在する間(M>0;ステップS45:YES)、操作点q[l]のタッチイベントを検出する(ステップS45〜S47)。そして、結合部132は、タッチイベント処理ルーチンを実行する(ステップS48)。なお、Mは、タッチイベント処理ルーチンで、「PUSH UP」イベントが検出されるたびに、1ずつ減っていく。
その結果、結合部132は、すべての操作点から指が離れ、接触状態の操作点が画面上に存在せず、操作が完了すると(M=0;ステップS45:NO)、結合オブジェクト生成ルーチンを実行する(ステップS49)。
図14は、本実施形態に係る操作対象オブジェクト抽出ルーチンの処理手順例を示すフローチャートである。図14に示す処理は、図13に示す結合ルーチンのステップS40の処理例である。本実施形態に係る操作対象オブジェクト抽出ルーチンは、検出した操作点を内包するオブジェクトOを抽出する。
図14に示すように、本実施形態に係る結合部132は、検出した操作点p[k]=(xk,yk);(k=1,...K)を受け取る。このとき結合部132は、抽出したオブジェクト数Mを初期化(M=0)とする。なお、Kは、検出した操作点の数を表す。これを受けて、結合部132は、検出したすべての操作点p[k];(k=1,...,K)に対し(ステップS50、ステップS51:YES、ステップS52)、内点判定方法により、操作点p[k]を内包するオブジェクトOが存在するか否かを判定する(ステップS53)。その結果、結合部132は、操作点p[k]を内包するオブジェクトOが存在する場合(ステップS53:YES)、操作点p[k]を内包するオブジェクトOが、オブジェクト管理部14で保存している複数のオブジェクト群を格納される配列O[m];(m=1,...,M)に存在するか否かを判定する(ステップS54)。その結果、結合部132は、操作点p[k]]を内包するオブジェクトOが、オブジェクト群の配列O[m];(m=1,...,M)に存在しない場合(ステップS54:NO)、M+1番目の要素として、操作点p[k]を、抽出したオブジェクトOの操作点(操作完了時の移動先)が記録される配列q[M]として追加する。また、結合部132は、M+1番目の要素として、操作点p[k]を内包するオブジェクトOを配列O[M]として追加する。これにより、操作対象オブジェクトを抽出する。そして、結合部132は、抽出したオブジェクト数Mを1つ増やす(M+1;ステップS55)。結合部132は、このような処理を、検出したすべての操作点p[k]に対して行い、操作対象オブジェクトの抽出結果として、操作点の集合Q={(q[1],O[1]),...,(q[M],O[M])}を出力する。
なお、操作点p[k]は、重複して同一のオブジェクトOをタッチしているかもしれない。また、どのオブジェクトOも指定していないかもしれない。しかし、上記操作対象オブジェクトルーチンで得られたQ={(q[1],O[1]),...,(q[M],O[M])}は、1つのオブジェクトOに対して1つの操作点が対応するように、上記の場合を除いたものとなる。
図15は、本実施形態に係るタッチイベント処理ルーチンの処理手順例を示すフローチャートである。図15に示す処理は、図13に示す結合ルーチンのステップS48の処理例である。本実施形態に係るタッチイベント処理ルーチンは、検出したタッチイベント(操作イベント)を処理する。
図15に示すように、本実施形態に係る結合部132は、抽出したオブジェクトO=O[l]、抽出したオブジェクトOをコピーしたオブジェクトO’=O’[l]、及び抽出したオブジェクトOの操作点(操作完了時の移動先)q=q[l]を受け取る。なお、Objは、現在の抽出したオブジェクトOを保持し、Mは、現在の抽出したオブジェクト数である。これを受けて、結合部132は、オブジェクトOの操作点qのタッチイベントの種類を判別する(ステップS60)。その結果、結合部132は、操作点qのタッチイベントが「MOVE」イベントの場合、移動前の操作点qの座標(u,v)と移動後の操作点qの座標(x,y)とに基づき、操作点の移動量Δ=(Δx,Δy)=(x−u,y−v)を算出する(ステップS61)。次に結合部132は、操作点qの座標を移動後の座標(x,y)に更新する(ステップS62)。次に結合部132は、抽出したオブジェクトOのコピーであるオブジェクトO’の形状[P,Q]を、P=P+Δx,Q=Q+Δyで更新する(ステップS63)。これにより、抽出したオブジェクトOのコピーであるオブジェクトO’が、操作点qの移動量に従って移動する。なお、ここで、表示部12は、「MOVE」イベントの更新にあわせて、タッチされたオブジェクトOを移動させて表示してもよい。一方、結合部132は、操作点qのタッチイベントが「PUSH UP」イベントの場合、オブジェクトOに対する操作が完了したものとして、Objに(O[l],O’[l])を登録する(ステップS64)。次に結合部132は、Qから(q[l],O[l],O’[l])を削除し(ステップS65)、抽出したオブジェクト数Mを1減算する(ステップS66)。なお、図中に示す式「A=A∪{B}」は、∪が和の集合を表し、集合Aに要素Bを登録(追加)することを表現している。以降の説明でも同様の表現を用いる。
図16は、本実施形態に係る結合オブジェクト生成ルーチンの処理手順例を示すフローチャートである。図16に示す処理は、図13に示す結合ルーチンのステップS49の処理例である。本実施形態に係る結合オブジェクト生成ルーチンは、抽出した複数のオブジェクトOを結合し、新しいオブジェクトOを生成する。
図16に示すように、本実施形態に係る結合部132は、抽出した複数のオブジェクトOを保持するObj={(O[1],O’[1]),...,(O[M],O’[M])}を受け取る。なお、Mは、抽出したオブジェクトOの総数である。これを受けて、結合部132は、まず、抽出したオブジェクトO[m]の中心点を、それぞれC[m];(m=1,...,M)とし、C[m]の重心Cを(C[1]+,...,+C[M])/Mとする。また、結合部132は、重心Cからの各オブジェクトOへの距離の最大値Rをmax{|C−C[1],...,C−C[M]|}とする。また、結合部132は、抽出したオブジェクトO[m]をコピーしたオブジェクトO’[m]の中心点を、それぞれC’[m]とし、C’[m]の重心C’を(C’[1]+,...,+C’[M])/Mとする。また、結合部132は、重心C’からの各オブジェクトOへの距離の最大値R’をmax{|C’−C’[1],...,C’−C’[M]|}とする(ステップS70)。なお、このとき、R−R’は、抽出したオブジェクトOが、操作の前後で、どれだけ重心に近づくような移動をしたかを意味するので、R’が小さくなるほど移動量が大きいことを表す。そこで、結合部132は、R’の値が、Rの値に所定の閾値THRを加算した値より小さい(条件式を満たす)か否かを判定する(ステップS71)。
その結果、結合部132は、条件式が満たされない場合(ステップS71:NO)、抽出したオブジェクトOを結合せずに、処理を終了する。この条件式は、例えば、ユーザが、一度、画面をタッチしたが、気が変わって何もせずに指を離した場合、わずかな指の移動が起こりうることを考慮し、所定の閾値THR以上の移動が検出されなければ、結合処理を行わないようにするための式である。
一方、結合部132は、条件式が満たされた場合(ステップS71:YES)、十分な移動量が検出されたと判断する。これにより、結合部132は、結合する文Sの結合順序を決めるため、抽出したすべてのオブジェクトO[m]を、中心点C[m]のy座標の昇順(C[m]のy座標<C[m+1]のy座標)となるようにソートする。結合部132は、ソート後の配列O[m]を、あらためて、抽出したオブジェクトO[m];(m=1,...,M)とする(ステップS72)。なお、抽出したオブジェクトが、必ずしも縦一列に並んでおらず、横に並ぶ(y座標が同じ)オブジェクトOが存在する場合や、規則性なく配置されている場合が考えられる。よって、結合部132は、これらの場合にも対処できるように、y座標が同じ場合、中心点C[m]のx座標について昇順(C[m]のx座標<C[m+1]のx座標)となるようにソートしてもよい。
次に結合部132は、ソート順に従って、画面の上側に表示されている文Sから順に結合した文S’(結合文)=S[1]+,...,+S[M]を生成する。また、結合部132は、言語処理部15において、生成した結合文S’の修正文Sを生成する(ステップS73)。次に結合部132は、修正文Sと、結合した複数のオブジェクトOのなかで最も左上側に位置するオブジェクトOの形状から、新しいオブジェクトOの形状[P,Q]を算出する(ステップS74)。
次に結合部132は、修正文Sと、算出した形状[P,Q]から、新しいオブジェクトO={S,[P,Q]}を生成する(ステップS75)。その結果、結合部132は、結合した複数のオブジェクトO[m]を、オブジェクト管理部14から消去し、生成した新しいオブジェクトOを保存する(ステップS76)。次に結合部132は、結合した複数のオブジェクトO[m]を、画面上からも消去し、生成した新しいオブジェクトOを表示する(ステップS77)ように、表示部12に指示する。
《分離処理》
図17は、本実施形態に係る分離ルーチンの処理手順例を示すフローチャートである。図17に示す処理は、図7に示すステップS7の処理例である。本実施形態に係る分離ルーチンは、オブジェクト制御部13が有する分離部133の処理であり、1つオブジェクトOを分離し、分離した複数のオブジェクトOを生成する。
本実施形態に係るオブジェクト制御部13は、マルチタッチ検出ルーチンで、タッチによる2つ以上(K≧2)の操作点が検出され、検出された操作点がすべて同一のオブジェクトO内にある場合に、分離ルーチンを実行する。
図17に示すように、オブジェクト制御部13は、検出した操作点p[k]=(xk,yk);(k=1,...,K)を受け取る。これを受けて、分離部133は、まず、結合ルーチンのステップS41と同様に、検出した操作点p[k]を内包するオブジェクトOのコピーO’を作成し、操作点の集合Q={(q[1],O,O’),...,(q[K],O,O’)}とする(ステップS80)。
次に分離部133は、操作点の集合Qを入力として、オブジェクト分離ルーチンを実行する(ステップS81)。その結果、分離部133は、オブジェクト分離ルーチンから、操作点と分離領域とが対応づけられた出力Q={(q[1],O[1],O’[1]),...,(q[L],O[L],O’[L])}を受け取り、分離したオブジェクトOを保持するObj={}を初期化し(要素数0の集合とし)、オブジェクト数Mを分離数Lとする(ステップS82)。
次に分離部133は、オブジェクト数Mが1以上か否か(M>0)を判定する(ステップS83)。その結果、分離部133は、オブジェクト数Mが1以上の場合(ステップS83:YES)、Qの操作点q[1],...,q[L]のいずれかで、タッチイベントが発生するまで待機し(ステップS84,S85:NO)、タッチイベントを検出すると(ステップS84,S85:YES)、タッチイベント処理ルーチンを実行する(ステップS86)。これにより、分離したオブジェクトOを保持するObjとオブジェクト数Mとは、タッチイベント処理ルーチンの出力により更新される。
一方、分離部133は、オブジェクト数Mが0の場合(ステップS83:NO)、すべての操作点が、「PUSH UP」イベントによって終了し、操作が完了したものとする。分離部133は、その時点で最も左端にあるオブジェクトO[1]と、最も右端にあるオブジェクトO[L]とを、それぞれのコピーに相当するオブジェクトO’[1]とO’[L]とに移動する。そこで、分離部133は、O’[1]の中心点とO’[L]との中心点の間の距離が、O[1]の中心点とO[L]との中心点の間の距離よりも、所定の距離THD以上大きい(条件式を満たす)か否かを判定する(ステップS87)。
その結果、分離部133は、条件式が満たされなかった場合(ステップS87:NO)、処理を終了する。一方、分離部133は、分離前のオブジェクトOを、オブジェクト管理部14から消去し、分離したオブジェクトO’[l]を保存する(ステップS88)。次に分離部133は、分離前のオブジェクトOを、画面上からも消去し、分離したオブジェクトO’[l]を表示する(ステップS89)ように、表示部12に指示する。なお、このとき表示部12は、分離したオブジェクトO’[l]を、整列された状態で表示してもよい。
図18は、本実施形態に係るオブジェクト分離ルーチンの処理手順例を示すフローチャートである。図18に示す処理は、図17に示す分離ルーチンのステップS81の処理例である。本実施形態に係るオブジェクト分離ルーチンは、操作点の位置からオブジェクトOの分離位置を決定し、分離位置に従って、指定された1つのオブジェクトOを分離し、新しい複数のオブジェクトOを生成し、生成したオブジェクトOと操作点とを対応づける。
図18に示すように、本実施形態に係る分離部133は、操作点の集合Q={(q[1],O,O’),...,(q[K],O,O’)}を受け取る。なお、Kは、検出した操作点の総数である。これを受けて、分離部133は、まず、Qの操作点p[k]を、y座標の昇順(p[k]のy座標<p[k+1]のy座標)となるようにソートする。分離部133は、ソート後の配列Q[k]を、あらためて、操作点の集合Q={(q[1],O,O’),...,(q[K],O,O’)}とする(ステップS90)。なお、このとき分離部133は、y座標が同じ場合、x座標について昇順(p[k]のx座標<p[k+1]のx座標)となるようにソートしてもよい。
次に分離部133は、言語処理部15において、文Sを、所定の単位(例えば「単語」や「形態素」)で分離し、文頭から順に、分離結果S[1],...,S[l]を得る(ステップS91)。
次に分離部133は、オブジェクトO上の分離結果S[i−1]とS[i]との境界線[A[i],B[i]];(i=1,...,l)を算出する(ステップS92)。このとき、A[i]は、分離結果S[i−1]とS[i]との境界線の上端点(1≦i≦l)、B[i]は、分離結果S[i−1]とS[i]との境界線の下端点(1≦i≦l)に相当する。また、S[i−1]とS[i]とが、文頭から(X+1)文字目を境界とする場合(X文字目までがS[i−1]であり、(X+1)文字目からS[i]である場合)、オブジェクトOの形状を[P,Q]とする。このとき、A[i],B[i]の座標は、以下(式6)及び(式7)で表現(算出)できる。
A[i] = (幅w × 文頭からの境界までの文字数X,Pのy座標) ・・・ (式6)
B[i] = (幅w × 文頭からの境界までの文字数X,Qのy座標) ・・・ (式7)
なお、wは1文字幅である。さらに、以下の処理に必要となるため、A[0]は、オブジェクトOの形状を「P,Q]の左上端点P、B[i+1]は、オブジェクトOの形状を「P,Q]の右下端点Qとする。
図19は、本実施形態に係る分離領域の概念図である。図19には、「長袖のシャツ」を3つの形態素に分離した場合の2つの境界線[A[1],B[1]]と[A[2],B[2]]との例が示されている。なお、矩形R[i]は、R[i]=[A[i],B[i+1]]と定義でき、オブジェクトOの分離領域に相当する。また、各分離領域に対応する分離したオブジェクトO[i]は、{S[i],[A[i],B[i]]};(i=1,...,I)となる。
図18の説明に戻る。分離部133は、分離領域のインデックスsを初期化し(s=0)、分離したオブジェクトOが操作点を内包する場合に1とするフラグflag[i];(i=1,...,I)を初期化する(flag[i]=0)。また、分離部133は、操作点と対応づけられたオブジェクトOの集合Q’={}を初期化し(要素数0の集合とし)、x(Qの要素数)を0とする(ステップS93)。
次に分離部133は、すべての操作点p[k];(k=1,...,K)について(ステップS94:YES)、k=1から順に(ステップS95)、内点判定方法により、p[k]を内包する分離領域R[i]を特定する(ステップS96)。
次に分離部133は、R[i]に対応するflag[i]が0か否かを判定し(ステップS97)、flag[i]が1の場合(ステップS97:NO)、すでにR[i]が、他の操作点と対応づけられているとする。よって、分離部133は、重複して対応づけることを避けるために、何もしない。
一方、分離部133は、flag[i]が0の場合(ステップS97:YES)、R[i]が、操作点と対応づけられていないとする。そこで、分離部133は、xを1加算し(x+1;ステップS98)、分離したオブジェクトO[x]を、分離結果{S[s]+S[s+1]+,...,+S[i],[A[s],B[i]]}とする。また、分離部133は、操作点の集合Q’に(q[x],O[x],O’[x])を登録する(ステップS99)。なお、q[x]は、操作点p[x]に相当し、O’[x]は、オブジェクトO[x]をコピーしたオブジェクトOに相当し、S[s]は、分離領域R[i]に含まれる分離文字又は分離文字列に相当する。また、分離部133は、flag[i]を1とし、分離領域のインデックスsをi+1とする(ステップS100)。
その結果、分離部133は、すべての操作点p[k]に対して上記処理が終わると(ステップS94:NO)、Lを、分離した数xとし、操作点q[L」が指す分離領域をR[J]とする。また、分離部133は、所定の単位に分離した分離領域R[J+1],R「J+2」,...,R[I]を結合し、オブジェクトO[L]の領域を生成する。また、分離部133は、オブジェクトO[L]に対応づけられた文S[L]を、所定の単位に分離した分離結果S[L]=S[J+1]+S[J+2]+,...,+S[I](分離結果を結合した文字列)とし、Q[L]をオブジェクトOの右下端点Qとする。また、分離部133は、オブジェクトO’[L]を、更新されたオブジェクトO[L]のコピーとする(ステップS101)。分離部133は、このような処理により操作対象オブジェクトの分離結果として、Qの要素数Lと、Q={(q[1],O[1],O’[1]),...,(q[L],O[L],O’[L])}を出力する。
これにより、指定されたオブジェクトOは、互いに隣接しあうL個のオブジェクトO[x];(x=1,...,L)の領域に分離される。このとき操作点p[k]は、kが小さいほど、画面上では左に位置する。このことから、操作点p[k]に対して処理を行う時点では、p[1],...,p[k−1]で指定された分離領域の中で最も右に位置する分離領域がR[s−1];(s=0のときはR[0])となり、分離領域R[s]は、その右隣の領域に相当する。したがって、操作点p[k]が、分離領域R[i]に含まれる場合、オブジェクトO[x]は、操作点を1つも含まない分離領域R[s]からR[j−1]までの領域と分離領域R[j]とを結合した領域を、オブジェクトOの形状とする。また、その領域内の文字列(分離結果を結合した文字列)を、オブジェクトOの文Sとする。その結果、オブジェクトOが、分離後に新たに生成されたオブジェクトOとなる。よって、生成されたオブジェクトO[x]の領域とオブジェクトO[x+1]の領域;(x=1,...,L−1)は隣接し、文Sは、分離結果を結合した文字列(S[1]+,...,S[L])となる。つまり、分離部133は、まず、操作点により指定されたオブジェクトOを、言語処理部15により所定の単位で分離し、分離した文字又は文字列(分離結果)と分離結果に対応する分離領域を得る。次に分離部133は、操作点の位置からオブジェクトOの分離位置を決定し、分離位置に従って、分離結果と分離領域とを再結合することで、分離後の新しい複数のオブジェクトOを生成し、生成したオブジェクトOと操作点とを対応づける。
図20は、本実施形態に係るオブジェクトOの分離例を示す図である。図20に示すように、「長袖のシャツを着ています」の文Sに対応づけられたオブジェクトOは、形態素ごとに8つに分離される。このとき、3つの操作点p[1],p[2],p[3]のうち、2つの操作点p[1]とp[2]とが「シャツ」の領域を指定し、操作点p[3]が「着」の領域を指定しているとする。この場合、分離部133は、操作点の位置からオブジェクトOの分離位置を決定し、分離位置に従って、分離結果と分離領域とを再結合する。これにより、分離部133は、「長袖のシャツ」の領域と「を着ています」の領域との互いに隣接しあう2つのオブジェクトO[1],O[2]を生成する。その結果、分離部133は、オブジェクト分離ルーチンの出力として、分離数L=2、操作点の集合Q={(p[1],O[1],O’[1]),(p[3],O[2],O’[2])}を出力する。
<まとめ>
以上のように、本実施形態に係る編集装置100によれば、入力受付部11で受け付けた入力データから、オブジェクト制御部13が、編集時に操作可能な1又は複数のオブジェクトOを生成する。本実施形態に係る編集装置100は、表示部12が、生成されたオブジェクトOを表示し、オブジェクトOの連結、結合、又は分離を指示するジェスチャー操作を受け付ける。本実施形態に係る編集装置100は、オブジェクト制御部13が、受け付けた操作に従って、操作時に指定されたオブジェクトOに対して、連結、結合、又は分離の編集処理を行い、新たなオブジェクトOを生成する。その結果、本実施形態に係る編集装置100は、表示部12が、生成された新たなオブジェクトOを表示し、編集操作が反映された内容に編集画面を更新する。
これによって、本実施形態に係る編集装置100は、入力データに対して直感的な操作が行える環境を提供する。その結果、本実施形態に係る編集装置100では、編集操作が容易となり、また、言語の文法上、誤った箇所(誤認識)を自動修正するため、誤った箇所を修正するなどの編集作業の負担を軽減できる。これにより、本実施形態に係る編集装置100は、ユーザに対する利便性の向上を図ることができる。また、本実施形態に係る編集装置100は、オブジェクトOの文Sを他のテキストエディタなどにコピーする、文Sを直接編集する、又はファイルに保存するなどの操作を可能とする機能拡張を、容易に実現できる。これにより、ユーザに対して、高い利便性のサービスを提供できる。
なお、上記実施形態では、入力された音声の認識結果から生成されたテキスト文を編集する場面を例に説明を行ったが、この限りでない。本実施形態に係る編集装置100の機能(編集機能)は、例えば、記号や図形などの編集場面にも適用できる。
[変形例1]
<概要>
本変形例1は、連結操作に加えて、連結したオブジェクトに対応づけられた文に、他のオブジェクトに対応づけられた文を挿入する処理を提案する。例えば挿入操作は、分離操作により、オブジェクトを2つのオブジェクトに分離し、分離した一方のオブジェクトに、挿入する新たなオブジェクトを連結し、連結したオブジェクトに、分離した他方のオブジェクトをさらに連結すればよい。しかし、この場合、分離操作を1回、結合操作を2回、行わなければならず、その操作は煩雑である。そこで、本変形例1では、2つのオブジェクトの連結操作と同じ操作(操作回数)で、新たなオブジェクトを挿入することができる環境を提供する。これにより、ユーザに対する利便性の向上をさらに図ることができる。なお、以下の説明では、上記実施形態と異なる事項について説明を行い、同じ事項については、同一符号を付し、その説明を簡略又は省略する。
<詳細>
《挿入・連結処理》
図21は、本変形例1に係る挿入・連結ルーチンの処理手順例を示すフローチャートである。図21に示す処理は、図7に示すステップS4の連結ルーチンに代わり、実行可能な挿入・連結ルーチンの処理例である。本変形例1に係る挿入・連結ルーチンは、図9に示す連結ルーチンと、ステップS114〜S116の処理が異なる。
図21に示すように、本変形例1に係る連結部131は、操作点p[1]のイベント発生位置(x,y)が、オブジェクトO1以外のオブジェクトO2={S2,[P2,Q2]}の内部にある場合(ステップS113:YES)、操作点p[1]のイベント発生位置(x,y)が、オブジェクトO2の文字上か否かを判定する(ステップS114)。つまり、連結部131は、「PUSH UP」イベントが発生した位置が、オブジェクトO2の文字上か、又は、オブジェクトO2の文字以外の領域内かを判定する。
具体的には、「PUSH UP」イベントが発生した座標を(x,y)、オブジェクトO2の形状を[P,Q]とし、P=(Px,Py)、Q=(Qx,Qy)とする。この場合、判定処理を実行する時点では、イベント発生位置の座標(x,y)は、オブジェクトO2内にある。そのため、以下の(条件式1)から(条件式4)のいずれかの条件式を満たしていれば、オブジェクトO2の矩形の左右の辺のいずれかから、所定の距離THx以内、又は、上下の辺のいずれかから、所定の距離THy以内の位置にあることが分かる。
イベント発生位置の座標x−オブジェクトO2の形状の座標Px<所定の閾値THx ・・・ (条件式1)
オブジェクトO2の形状の座標Qx−イベント発生位置の座標x<所定の閾値THx ・・・ (条件式2)
イベント発生位置の座標y−オブジェクトO2の形状の座標Py<所定の閾値THy ・・・ (条件式3)
オブジェクトO2の形状の座標Qy−イベント発生位置の座標y<所定の閾値THy ・・・ (条件式4)
そこで、連結部131は、イベント発生位置の座標(x,y)が、この条件式を満たす場合、「PUSH UP」イベントが、オブジェクトO2の文字以外の領域で発生したものと判定する。一方、連結部131は、イベント発生位置の座標(x,y)が、この条件式を満たさなかった場合、「PUSH UP」イベントが、オブジェクトO2の文字上で発生したものと判定する。
その結果、連結部131は、「PUSH UP」イベントが発生した位置が、オブジェクトO2の文字以外の領域内の場合(ステップS114:NO)、連結処理を行う(ステップS117〜S120)。
一方、連結部131は、「PUSH UP」イベントが発生した位置が、オブジェクトO2の文字上の場合(ステップS114:YES)、図18に示すオブジェクト分離ルーチンと同じ処理により、オブジェクトO2の境界線(例えば「形態素ごとに分離した場合の各境界線」)を算出する。また、連結部131は、境界線の算出結果に基づき、イベント発生位置の座標(x,y)に最も近い境界で、オブジェクトO2の文S2を、文S21と文S22とに分離する(ステップS115)。例えばイベント発生位置の座標(x,y)が、分離領域R[i]=[A[i],B[i+1]]に属し、A[i]のx座標をa、B[i+1]のx座標をbとする。この場合、イベント発生位置の座標(x,y)に最も近い境界は、境界線[A[i],B[i]];(x−a≦b−x)、又は、境界線[A[i+1],B[i+1]];(x−a>b−x)のいずれかとなる。また、オブジェクトO1,O2の各文を、文S1,S2とすると、文S21は、イベント発生位置の座標(x,y)に最も近い境界より左側に位置する文S2の分離文となる。また、文S22は、イベント発生位置の座標(x,y)に最も近い境界より右側に位置する文S2の分離文となる。これにより、連結部131は、文S21、文S1、文S22の順に結合し、言語処理部15において、結合文S’の修正文Sを生成する(ステップS116)。その後、連結部131は、ステップS118の処理に進み、連結処理を行う。
その結果、ユーザは、文Sを挿入したい場合、画面上で、挿入したいオブジェクトO1を指で押さえ、オブジェクトO2の文字上に指を移動し、文字上の挿入位置で指を離せば、その位置に、指定したオブジェクトO1の文Sを挿入できる。また、文字上ではなく、オブジェクトO2の境界線近くで指を離せば、文Sを連結できる。
このように、本変形例1は、上記挿入・連結ルーチンの処理により、2つのオブジェクトO1,O2の連結操作と同じ操作(操作回数)で、新たなオブジェクトOを挿入することができる環境を提供する。これにより、本変形例1では、ユーザに対する利便性の向上をさらに図ることができる。
[変形例2]
<概要>
上記実施形態では、テキストが左から右へ横方向に表示されるものであった。しかし、日本語のように横書きも縦書きも可能な言語もあれば、アラビア語のように右から左へ横書きする言語もある。さらにアラビア語の場合には、数字は左から右へ横書きする。このように、言語やテキストの内容によっては、書く方向、つまり読む方向(表示の向き)が異なる。そこで、本変形例2では、オブジェクトの結合時(連結時を含む)に、言語、文字の表記方向(縦書き又は横書き)、又は文の内容に応じて、文の結合順を決定する処理を提案する。これにより、ユーザに対する利便性の向上をさらに図ることができる。なお、以下の説明では、上記実施形態と異なる事項について説明を行い、同じ事項については、同一符号を付し、その説明を簡略又は省略する。
<詳細>
《連結処理》
本変形例2では、言語、表記方向、内容に応じて、2つのオブジェクトOの連結順を決定する2つの処理を説明する。具体的には、例えばアラビア語などの表記特徴を有する言語に対応した処理と、日本語などの表記特徴を有する言語に対応した処理である。なお、以下の処理では、言語処理部15に、言語、表記方向、内容に応じて、オブジェクトOに対応づけられた文Sの連結順を決定するルール(規則)が、予め定義されているものとする。
図22は、本変形例2に係る2つのオブジェクトの連結順を決定する処理手順例(その1)を示すフローチャートである。図22に示す処理は、図9に示す連結ルーチンのステップS24、図21に示す挿入・連結ルーチンのステップS116,S117の処理に適用する処理例であり、アラビア語などの表記特徴を有する言語に対応した処理に相当する。本変形例2に係る連結部131は、言語処理部15に定義されているルールに従って連結順を決定し、オブジェクトOを連結し、新しいオブジェクトOを生成する。
図22に示すように、本実施形態に係る連結部131は、オブジェクトO1={S1,[P1,Q1]}に、オブジェクトO2={S2,[P2,Q2]}を連結する。このとき連結部131は、オブジェクトO1(連結しようとしているオブジェクトO)に対するオブジェクトO2(連結されようとしているオブジェクトO)の連結方向を判別する(ステップS200)。
その結果、連結部131は、オブジェクトO1に対するオブジェクトO2の連結方向の判別結果に基づき、言語処理部15に定義されているルールに従って決定した連結順に、オブジェクトO1に対応づけられた文S1とオブジェクトO2に対応づけられた文S2とを連結する。
具体的には、連結部131は、オブジェクトO2がオブジェクトO1より下の連結方向であった場合、オブジェクトO1に対応づけられた文S1に、オブジェクトO2に対応づけられた文S2を連結する(S=S1+S2;ステップS201)。また、連結部131は、オブジェクトO2がオブジェクトO1より上の連結方向であった場合、オブジェクトO2に対応づけられた文S2に、オブジェクトO1に対応づけられた文S1を連結する(S=S2+S1;ステップS202)。このように、連結部131は、連結方向が上下の場合、上に位置するオブジェクトOに対応づけられた文Sが文頭となるような連結順を決定する。
また、連結部131は、オブジェクトO2がオブジェクトO1より左の連結方向であった場合、オブジェクトO1とオブジェクトO2とがともに数字か否かを判定する(ステップS203)。その結果、連結部131は、2つのオブジェクトO1,O2がともに数字であった場合(ステップS203:YES)、オブジェクトO2に対応づけられた文S2に、オブジェクトO1に対応づけられた文S1を連結する(S=S2+S1;ステップS204)。このように、連結部131は、連結方向が左で、ともに数字の場合、左の文Sが右側となるような連結順を決定する。一方、連結部131は、2つのオブジェクトO1,O2のいずれかが数字でなかった場合(ステップS203:NO)、オブジェクトO1に対応づけられた文S1に、オブジェクトO2に対応づけられた文S2を連結する(S=S1+S2;ステップS205)。このように、連結部131は、連結方向が左で、どちらか一方が数字の場合、左の文Sが左側となるような連結順を決定する。
また、連結部131は、オブジェクトO2がオブジェクトO1より右の連結方向であった場合、オブジェクトO1とオブジェクトO2とがともに数字か否かを判定する(ステップS206)。その結果、連結部131は、2つのオブジェクトO1,O2がともに数字であった場合(ステップS206:YES)、オブジェクトO1に対応づけられた文S1に、オブジェクトO2に対応づけられた文S2を連結する(S=S1+S2;ステップS207)。このように、連結部131は、連結方向が右で、ともに数字の場合、右の文Sが左側となるような連結順を決定する。一方、連結部131は、2つのオブジェクトO1,O2のいずれかが数字でなかった場合(ステップS206:NO)、オブジェクトO2に対応づけられた文S2に、オブジェクトO1に対応づけられた文S1を連結する(S=S2+S1;ステップS208)。このように、連結部131は、連結方向が右で、どちらか一方が数字の場合、右の文Sが右側となるような連結順を決定する。
図23は、本変形例2に係る2つのオブジェクトの連結順を決定する処理手順例(その2)を示すフローチャートである。図23に示す処理は、図9に示す連結ルーチンのステップS24、図21に示す挿入・連結ルーチンのステップS116,S117の処理に適用する処理例であり、日本語などの表記特徴を有する言語に対応した処理に相当する。図22に示す処理との違いは、横書きと縦書きを判定している点である。具体的には、図22のステップS203の数字判定処理の代わりに、横書き判定処理を行い、図22のステップS206の数字判定処理の代わりに、縦書き判定処理を行う。
図23に示すように、本実施形態に係る連結部131は、オブジェクトO2がオブジェクトO1より左の連結方向であった場合、横書きか否かを判定する(ステップS213)。その結果、連結部131は、横書きであった場合(ステップS213:YES)、オブジェクトO2に対応づけられた文S2に、オブジェクトO1に対応づけられた文S1を連結する(S=S2+S1;ステップS214)。このように、連結部131は、連結方向が左で、横書きの場合、左の文Sが右側となるような連結順を決定する。一方、連結部131は、横書きでなかった場合(ステップS213:NO)、オブジェクトO1に対応づけられた文S1に、オブジェクトO2に対応づけられた文S2を連結する(S=S1+S2;ステップS215)。このように、連結部131は、連結方向が左で、横書きでない場合、左の文Sが左側となるような連結順を決定する。
また、連結部131は、オブジェクトO2がオブジェクトO1より右の連結方向であった場合、縦書きか否かを判定する(ステップS216)。その結果、連結部131は、縦書きであった場合(ステップS216:YES)、オブジェクトO1に対応づけられた文S1に、オブジェクトO2に対応づけられた文S2を連結する(S=S1+S2;ステップS217)。このように、連結部131は、連結方向が右で、縦書きの場合、右の文Sが左側となるような連結順を決定する。一方、連結部131は、縦書きでなかった場合(ステップS216:NO)、オブジェクトO2に対応づけられた文S2に、オブジェクトO1に対応づけられた文S1を連結する(S=S2+S1;ステップS218)。このように、連結部131は、連結方向が右で、縦書きでなかった場合、右の文Sが右側となるような連結順を決定する。
なお、上記連結方向の判別は、次のように行う。図9に示す連結ルーチンにおいて、「PUSH UP」イベントで検出されたときのオブジェクトO1の座標(x1,y1)、オブジェクトO2の座標(x2,y2)であった場合、連結部131は、以下(式8)〜(式10)を算出する。
D = √((x1−x2)2+(y1−y2)2) ・・・ (式8)
cosθ = (x1−x2)/D ・・・ (式9)
sinθ = (y1−y2)/D ・・・ (式10)
その結果、連結部131は、画面右方向がx軸正の方向、画面下方向がy軸正の方向であることから、条件式(|cosθ|≦THh、かつ、sinθ>THv)を満たす場合、連結方向が上であると判別する。また、連結部131は、条件式(|cosθ|≦THh、かつ、sinθ<−THv)を満たす場合、連結方向が下であると判別する。また、連結部131は、条件式(|sinθ|≦THv、かつ、cosθ>THh)を満たす場合、連結方向が左であると判別する。また、連結部131は、条件式(|sinθ|≦THv、かつ、cosθ<−THh)を満たす場合、連結方向が右であると判別する。なお、THh,THvは、予め定められた閾値である。
《結合処理》
図24は、本変形例2に係る3つのオブジェクトの結合順を決定する処理手順例を示すフローチャートである。図24に示す処理は、図16に示す結合オブジェクト生成ルーチンのステップS73の処理に適用する処理例であり、2つ以上のオブジェクトOの結合に対応した処理に相当する。本変形例2に係る結合部132は、言語処理部15に定義されているルールに従って結合順を決定し、オブジェクトOを結合し、新しいオブジェクトOを生成する。
図24に示すように、本実施形態に係る結合部132は、操作対象オブジェクト抽出ルーチンにより抽出されたオブジェクトO[m];(m=1,...,M)を受け取る。これを受けて、結合部132は、結合するM個のオブジェクトOそれぞれについて、重心C=((O[1]の中心点C[1]+,...,+O[M]の中心点C[M])/M)を算出する。また、このとき結合部132は、結合方向の上下左右ごとに、判別したオブジェクトO[m]を保持する各配列Qt,Qb,Ql,Qr={}を初期化し(要素数0の集合とし)、mを0とする(ステップS220)。
次に結合部132は、抽出されたすべてのオブジェクトO[m]に対して、算出した重心Cに対する各オブジェクトO[m]の結合方向を判別する(ステップS221:YES,S222,S223)。このとき結合部132は、上記連結ルーチンの連結方向と同様に、結合方向の判別を行う。
その結果、結合部132は、結合方向の判別結果に基づき、判別されたオブジェクトO[m]を、対応する配列Qt,Qb,Ql,Qrに登録する(ステップS224〜S228)。具体的には、結合方向が上と判別された判別されたオブジェクトO[m]を配列Qtに登録する。また、結合方向が下と判別された判別されたオブジェクトO[m]を配列Qbに登録する。また、結合方向が左と判別された判別されたオブジェクトO[m]を配列Qlに登録する。また、結合方向が右と判別された判別されたオブジェクトO[m]を配列Qrに登録する。なお、O[m]は、Qxをバッファに、Qt,Qb,Ql,Qrに登録される。
結合部132は、抽出されたすべてのオブジェクトO[M]に対して、結合方向の判別処理が終わると(ステップS221:NO)、Qt,Qbそれぞれの要素であるすべてのオブジェクトOに対して、中心点のy座標の昇順にソートする。また、結合部132は、Ql,Qrそれぞれの要素であるすべてのオブジェクトOに対して、中心点のxの昇順にソートする(ステップS229)。
その結果、Qtが、ソート後に{O[1],...,O[n]}となったとすると、Qt[1]のy座標≦,...,≦Qt[n]のy座標である。このことから、「オブジェクトO[1]にオブジェクトO[2]を上方向から結合した文」とは、O[1]とO[2]との連結オブジェクトに対する結合方向の判別結果に基づき、上方向からオブジェクトO[2]を結合する場合の結合順を適用し、オブジェクトO[1]に対応づけられた文S[1]と、オブジェクトO[2]に対応づけられた文S[2]とを結合して得られる文Stに相当する。つまり、「QtのO[n]を上方向から結合した文」とは、O[1]にO[2]を上方向から結合した後に、さらにnまでの各O[n]を上方向から結合した文に相当する。このように、結合部132は、Qt,Qbについて、ソート後のすべてのオブジェクトOを上方向から結合した文St,Sbを生成する。また、結合部132は、Ql,Qrについて、ソート後のすべてのオブジェクトOを右方向から結合した文Sl,Srを生成する(ステップS230)。最後に、結合部132は、文Stに、文Slを左方向から結合し、文Srを右方向から結合し、文Sbを下方向から結合した文を、M個すべてのオブジェクトOを結合した文Sとして出力する。
なお、結合順によるオブジェクトOの結合については、他の方法も考えられる。この場合、オブジェクトOが、文Sと形状[P,Q]以外に、生成された時刻を表す属性を、さらに有することが前提となる。例えば、結合部132は、生成された時刻が早いオブジェクトOに対応づけられた文Sが、他のオブジェクトOに対応づけられた文Sより文頭側となるように結合するルールに従って、各オブジェクトに対応づけられた文Sを結合すればよい。これにより、例えば、右から左に読む言語であれば、生成時刻の早いオブジェクトOに対応づけられた文Sが、結合後に右側に位置することになる。
このように、本変形例2は、上記処理により、結合方向(連結方向を含む)を判別し、判別結果から、言語、表記方向、内容に応じたルールに従って結合順(連結順を含む)を決定し、決定した結合順に複数のオブジェクトOを結合できる環境を提供する。これにより、本変形例2では、ユーザに対する利便性の向上をさらに図ることができる。
[第2の実施形態]
本実施形態は、オブジェクトに対するアクションオブジェクトを生成する処理を提案する。アクションオブジェクトとは、例えば編集時に操作可能な1つのオブジェクトに対して、動的に生成された1つのオブジェクトに相当する。このようなアクションオブジェクトは、少なくとも、生成元のオブジェクトに対応づけられた文から生成可能なデータを値とする属性を有する。なお、アクションオブジェクトは、必ずしも画面に表示される必要はないため、形状属性を有していなくてもよい。また、アクションオブジェクトは、生成元のオブジェクトと同期して処理される。アクションオブジェクトは、このような特性を有する。
<概要>
図25は、翻訳サービスの提供例を示す図である。図25に示すように、例えば、音声入力による翻訳サービスでは、音声入力をテキスト化し、翻訳結果を生成する。このような翻訳サービスでは、入力音声が、画面右側に発話ごとにテキスト表示され、翻訳結果が、画面左側に表示される。この場合、アクションオブジェクトの属性は、音声入力(入力データ)から生成されたオブジェクトOの翻訳文に相当する。
例えば、ユーザが、日本語から英語に翻訳する翻訳サービスを、次のように利用したとする。ユーザは、「今日は暑いけれど」「長袖のシャツを」「着ています」と、区切って発声し、音声入力する。その結果、翻訳サービスでは、「今日は暑いけれど。」と「長袖のシャツを。」と「来ています。」という3つの文が表示され、それぞれの文を英語に翻訳した翻訳結果「It is hot today, though.」、「a long-sleeved shirt.」、「come.」が表示される。このような利用方法の翻訳結果は、原文が不完全な文の場合、翻訳を間違える可能性が高く、また、訳語としては正しくても文として意味をなさない可能性が高い。
そこで、本実施形態では、3つに分かれた「今日は暑いけれど。」「長袖のシャツを。」「来ています。」のオブジェクトを結合し、「今日は暑いけれど、長袖のシャツを着ています。」に修正した新しいオブジェクトを生成する。このとき本実施形態では、新しいオブジェクトに対応するアクションオブジェクトを生成する。具体的には、「今日は暑いけれど、長袖のシャツを着ています。」の翻訳結果「”It is hot today, but I wear a long-sleeved shirt.”」を属性として有するアクションオブジェクトを生成する。
このように、本実施形態に係る編集装置は、入力データから、編集操作単位のオブジェクトを生成し、表示画面を介して受け付けたジェスチャー操作に従って、生成したオブジェクトの編集を行い、さらに、アクションオブジェクトを、生成元のオブジェクトの編集操作に同期して処理する仕組みとした。
その結果、本実施形態に係る編集装置では、入力データに対して直感的な操作を行うことができ、編集操作が容易となり、誤った箇所を修正するなどの編集作業の負担を軽減できる。これにより、本実施形態に係る編集装置は、ユーザに対する利便性の向上を図ることができる。
以下に、本実施形態に係る編集装置が有する機能の構成とその動作について説明する。なお、以下の説明では、入力された音声の認識結果から生成されたテキスト文を編集し翻訳する場面を例に説明を行う。また、以下の説明では、上記実施形態と異なる事項について説明を行い、同じ事項については、同一符号を付し、その説明を簡略又は省略する。
《構成》
図26は、本実施形態に係る編集装置100の機能構成例を示す図である。図26に示すように、本実施形態に係る編集装置100は、上記実施形態で説明を行った各機能部に加えて、原文を翻訳する翻訳部16を有する。翻訳部16は、オブジェクト制御部13で編集されたオブジェクトOに対応づけられた文Sを、指定言語に翻訳し、翻訳結果を、オブジェクト制御部13に渡す。これを受けて、オブジェクト制御部13は、翻訳結果に基づき、オブジェクトOに対応するアクションオブジェクトを生成する。このときオブジェクト制御部13は、翻訳部16から受け取った翻訳結果を属性の値とするアクションオブジェクトを生成する。このようにして生成されたアクションオブジェクトは、オブジェクト管理部14により、生成元のオブジェクトOに対応づけて管理される。
以下に、本実施形態に係る編集装置100で実行される編集機能の処理について説明する。
《処理》
図27は、本実施形態に係る編集装置100の処理手順例を示すフローチャートである。図27に示す処理は、主にオブジェクト制御部13が実行する。なお、本実施形態に係る編集装置100では、オブジェクトOの連結、結合、分離などの各種編集操作に加えて、オブジェクトOの消去操作が可能である。図27に示すように、本実施形態に係る編集装置100は、例えば、電源がオフされるなどの装置が終了するまで(ステップS240:NO)、オブジェクト制御部13により、以下の処理を実行する。
本実施形態に係るオブジェクト制御部13は、まず、入力データからオブジェクトを生成すると(ステップS241:YES)、生成したオブジェクトOに対応するアクションオブジェクトを生成する(ステップS242)。このときオブジェクト制御部13は、オブジェクト管理部14に、生成したアクションオブジェクトを、生成元のオブジェクトOに対応づけて保存する。また、このとき、表示部12が、画面上の表示を更新してもよい。また、サービスを提供するソフトウェア(アプリケーション)が、アクションオブジェクトの生成に伴う所定の処理を実行してもよい。なお、オブジェクト制御部13は、入力データからオブジェクトを生成しなかった場合(ステップS241:NO)、ステップS242の処理をスキップする。
次にオブジェクト制御部13は、オブジェクトOに対して、編集操作が行われたか否かを判定する(ステップS243)。その結果、オブジェクト制御部13は、オブジェクトOが操作された場合(ステップS243:YES)、オブジェクトOに対する編集操作を判別する(ステップS244)。なお、オブジェクト制御部13は、オブジェクトOに対して、編集操作が行われなかった場合(ステップS243:NO)、ステップS240の処理に移行する。
その結果、オブジェクト制御部13は、受け付けた編集操作が、連結操作又は結合操作の場合、連結又は結合により生成されたオブジェクトOに対し、連結又は結合オブジェクトの文Sから生成可能なデータを属性として設定した新しいアクションオブジェクト(連結又は結合オブジェクトに対応するアクションオブジェクト)を生成する(ステップS245)。
また、オブジェクト制御部13は、受け付けた編集操作が、分離操作の場合、分離により生成されたオブジェクトOに対し、分離オブジェクトの文Sから生成可能なデータを属性として設定した新しいアクションオブジェクト(分離オブジェクトに対応するアクションオブジェクト)を生成する(ステップS246)。
また、オブジェクト制御部13は、受け付けた編集操作が、消去操作の場合、消去対象のオブジェクトOに対応するアクションオブジェクトを消去する(ステップS247)。このときオブジェクト制御部13は、オブジェクト管理部14から、該当するアクションオブジェクトを、対応するオブジェクトOとともに消去する。また、このとき、表示部12が、画面上の表示を更新してもよい。また、サービスを提供するソフトウェア(アプリケーション)が、アクションオブジェクトの消去に伴う所定の処理を実行してもよい。
<まとめ>
以上のように、本実施形態に係る編集装置100によれば、入力受付部11で受け付けた入力データから、オブジェクト制御部13が、編集時に操作可能な1又は複数のオブジェクトOを生成する。本実施形態に係る編集装置100は、表示部12が、生成されたオブジェクトOを表示し、オブジェクトOの連結、結合、又は分離を指示するジェスチャー操作を受け付ける。本実施形態に係る編集装置100は、オブジェクト制御部13が、受け付けた操作に従って、操作時に指定されたオブジェクトOに対して、連結、結合、又は分離の編集処理を行い、新たなオブジェクトOを生成する。このときオブジェクト制御部13は、連結、結合、又は分離の編集処理を行ったオブジェクトOから生成可能なデータを属性とするアクションオブジェクトと生成する。その結果、本実施形態に係る編集装置100は、表示部12が、生成された新たなオブジェクトOを表示し、編集操作が反映された内容に編集画面を更新する。
これによって、本実施形態に係る編集装置100は、入力データに対して直感的な操作が行える環境を提供するとともに、生成したアクションオブジェクトを、生成元のオブジェクトOの編集操作に同期して処理する。その結果、本実施形態に係る編集装置100では、翻訳などの各種サービスでの編集操作が容易となり、また、言語の文法上、誤った箇所(誤認識)を自動修正するため、誤った箇所を修正するなどの編集作業の負担を軽減できる。これにより、本実施形態に係る編集装置100は、ユーザに対する利便性の向上を図ることができる。
なお、上記実施形態では、入力された音声の認識結果から生成されたテキスト文を編集し翻訳する場面を例に説明を行ったが、この限りでない。本実施形態に係る編集装置100の機能(編集機能)は、例えば、商品の注文履歴を管理するサービスなどの編集場面にも適用できる。
[変形例3]
本変形例3は、上記実施形態に係る編集装置100を、商品の注文履歴を管理するサービス(以下「商品管理サービス」という)に適用した場合について説明する。なお、以下の説明では、上記実施形態と異なる事項について説明を行い、同じ事項については、同一符号を付し、その説明を簡略又は省略する。
<概要>
本変形例3の適用例の場合、オブジェクト制御部13は、例えば、受け付けた注文のオブジェクトOから、注文品名と個数などを属性として有するアクションオブジェクトを生成する。また、商品の注文履歴を管理するため、アクションオブジェクトは、生成時刻を属性として有する。
図28は、商品管理サービスの提供例を示す図である。図28に示すように、例えば、音声入力による商品管理サービスでは、音声入力をテキスト化し、商品の注文の受付結果を生成する。このような商品管理サービスでは、受け付けた注文内容が、画面左側に商品ごとに表示され、注文履歴に相当する受付結果が、入力履歴として画面右側に表示される。
例えば、ユーザが、商品管理サービスを、次のように利用したとする。ユーザは、最初に「商品Aを1個と商品Bを3個」という注文を発声し、音声入力する。その結果、翻訳サービスでは、図28(A)に示すように、「商品Aを1個と商品Bを3個」というオブジェクトOが生成され、属性が「商品A 1個」と「商品B 3個」とを有するアクションオブジェクトが生成され、表示される。
続いて、ユーザは、「商品Bは・・・1個に変更」と注文の変更を発生したとする。このとき、「商品Bは」と「1個に変更」とに区切って発声した場合、図28(B)に示すように、入力音声が誤って認識され、「商品Bは」の「は」が欠落し、2つの文に分かれたとする。この場合、商品管理サービスでは、認識結果の「商品B」から、商品Bを1個注文したと判断し、商品Bの注文を1個追加し、アクションオブジェクトの個数を表す属性が、「商品A 1個」と「商品B 4個」とに更新される。また、商品管理サービスでは、認識結果の「1個に変更」について、商品名が不明であることから、商品名を指定するよう、ユーザに対して、所定のメッセージを通知する。
ここで、ユーザは、図28(C)に示すような編集操作(変更内容の修正)を行う。これを受けて、商品管理サービスは、編集操作に従って、「1個に変更」のオブジェクトOを、「商品B」のオブジェクトOに連結する。その結果、商品管理サービスは、まず、修正した「商品B」と「1個に変更」の2つのオブジェクトを消去し、これらのオブジェクトOに対応するアクションオブジェクトも消去する。さらに、商品管理サービスは、オブジェクト管理部14で管理されるアクションオブジェクトの生成時刻を表す属性を参照し、注文履歴上、最も古い時刻に該当するアクションオブジェクトを特定する。つまり、商品管理サービスでは、最初に入力された「商品A 1個」と「商品B 3個」との注文内容を属性とするアクションオブジェクトを特定する。
その後、商品管理サービスは、連結したオブジェクト「商品Bは1個に変更」に対し、先に特定したアクションオブジェクトの注文内容「商品B 3個」を1個に更新する。次に商品管理サービスは、「商品A 1個」と「商品B 1個」との注文内容を属性とするアクションオブジェクトを生成する。これにより、商品管理サービスでは、「商品Bは1個に変更」のオブジェクトOに対応する新しいアクションオブジェクトが生成される。その結果、商品管理サービスでは、図28(D)に示すように、「商品Bは1個に変更」のオブジェクトOが表示され、画面表示が更新される。
商品管理サービスでは、このような入力と編集処理を繰り返し、ユーザの注文が完了すると、最新の生成時刻を属性とするアクションオブジェクトが、該当商品の注文内容として確定する。
このように、上記実施形態に係る編集装置100は、音声入力を用いた商品管理サービスに適用することができ、ユーザに対する利便性の向上を図ることができる。
<装置>
図29は、上記実施形態に係る編集装置100の構成例を示す図である。図29に示すように、実施形態に係る編集装置100は、CPU(Central Processing Unit)101、及び主記憶装置102などを備える。また、編集装置100は、補助記憶装置103、通信IF(interface)104、外部IF105、ドライブ装置107、及び表示装置109などを備える。編集装置100は、各デバイスがバスBを介して相互に接続される。このように、実施形態に係る編集装置100は、例えば、スマートフォンやタブレットなどの一般的な情報端末(情報処理装置)に相当する。つまり、実施形態に係る編集装置100は、ユーザの操作を受け付けることができ、受け付けた操作に従って、指示された処理が実行可能な機器であればよい。
CPU101は、装置全体の制御や搭載機能を実現するための演算装置である。主記憶装置102は、プログラムやデータなどを所定の記憶領域に保持する記憶装置(メモリ)である。主記憶装置102は、例えば、ROM(Read Only Memory)やRAM(Random Access Memory)などである。また、補助記憶装置103は、主記憶装置102より容量の大きい記憶領域を備える記憶装置である。補助記憶装置103は、例えば、HDD(Hard Disk Drive)やメモリカード(Memory Card)などの不揮発性の記憶装置である。よって、CPU101は、例えば、補助記憶装置103から主記憶装置102上に、プログラムやデータを読み出し、処理を実行することで、装置全体の制御や搭載機能を実現する。
通信IF104は、装置をデータ伝送路Nに接続するインタフェースである。これにより、編集装置100は、データ伝送路Nを介して接続される他の外部機器(他の情報処理装置)とデータ通信が行える。外部IF105は、編集装置100と外部装置106との間でデータを送受信するためのインタフェースである。外部装置106には、例えば、操作入力を受け付ける入力装置(例えば「テンキー」又は「キーボード」)などがある。ドライブ装置107は、記憶媒体108の書き込み又は読み取りを行う制御装置である。記憶媒体108は、例えば、フレキシブルディスク(FD)、CD(Compact Disk)、及びDVD(Digital Versatile Disk)などである。表示装置109は、例えば、液晶ディスプレイなどであり、処理結果などの各種情報を画面に表示する装置である。また、表示装置109は、画面上の接触又は非接触などを検知するセンサ(例えば「タッチセンサ」)などを備える。これにより、編集装置100は、画面を介した各種操作(例えば「ジェスチャー操作」)を受け付ける。
また、上記実施形態に係る編集機能は、例えば、編集装置100において、プログラムを実行することで、上記各機能部が連携動作することで実現される。この場合、プログラムは、実行環境の装置(コンピュータ)が読み取り可能な記憶媒体に、インストール可能な形式又は実行可能な形式のファイルで記録され提供される。例えば、編集装置100の場合には、プログラムは、上記各機能部を含むモジュール構成となっており、CPU101が記憶媒体108からプログラムを読み出し実行することで、主記憶装置102のRAM上に各機能部が生成される。なお、プログラムの提供方法は、この限りでない。例えば、プログラムを、インターネットなどに接続された外部機器に格納し、データ伝送路N経由でダウンロードする方法であってもよい。また、主記憶装置102のROMや補助記憶装置103のHDDなどに予め組み込んで提供する方法であってもよい。なお、ここでは、編集機能をソフトウェアの実装により実現する例を説明したが、この限りでない。例えば、編集機能が有する各機能部の一部又は全部を、ハードウェアの実装により実現してもよい。
また、上記実施形態では、編集装置100が、入力受付部11、表示部12、オブジェクト制御部13、オブジェクト管理部14、言語処理部15、及び翻訳部16などの一部又は全部を有する構成について説明を行ったが、この限りでない。例えば、編集装置100が、これらの機能部の一部の機能(例えば「言語処理部15」や「翻訳部16」)を有する外部機器と、通信IF104を介して接続され、接続された外部機器とデータ通信を行うことで、各機能部が連携動作し、上記編集機能を提供する構成であってもよい。これにより、本実施形態に係る編集装置100は、クラウド環境などにも適用できる。
最後に、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
ここで、オブジェクト制御部13が生成するオブジェクトについて説明する。オブジェクトは、編集時の操作対象に相当し、認識結果の属性と認識結果を表示する表示領域の属性とを有するデータである。例えば、テキストが認識結果として出力される場合に生成されるオブジェクト(以下「オブジェクトO」という)は、文属性と形状属性との2つの属性を有する。この場合、文属性の値(以下「文S」という)は、テキスト(文字又は文字列)で表現される文(認識結果)となる。また、形状属性の値は、テキストが表示される表示領域の形状を表す画面上の座標となる。具体的には、画面左上隅を原点として、水平方向右向きを正の方向とするx軸と、垂直方向下向きを正の向きとするy軸との座標系で表現された2つの座標点P=(x1,y1)及びQ=(x2,y2);(x1<x2,y1<y2)の組[P,Q](以下「形状[P,Q]」という)である。このような形状属性の2つの座標値からは、左上隅(x1,y1)、右上隅(x2,y1)、右下隅(x2,y2)、左下隅(x1,y2)を各頂点とする矩形が一意に定まる。よって、[P,Q]は、オブジェクトOの領域(オブジェクト領域)が矩形に相当することを表している。なお、以下の説明では、文Sと形状[P,Q]との各属性の値を有するオブジェクトOを{S,[P,Q]}と表す。また、座標点PとQとの中点(=(P+Q)/2)を、オブジェクトOの中心点、又は、オブジェクトOの座標という。また、オブジェクトOが、認識結果を文Sとして有する場合には、「オブジェクトOに対応づけられた文S」又は「文Sに対応づけられたオブジェクトO」と表現する。
図18に示すように、本実施形態に係る分離部133は、操作点の集合Q={(q[1],O,O’),...,(q[K],O,O’)}を受け取る。なお、Kは、検出した操作点の総数である。これを受けて、分離部133は、まず、Qの操作点q[k]を、y座標の昇順(q[k]のy座標<q[k+1]のy座標)となるようにソートする。分離部133は、ソート後の配列Q[k]を、あらためて、操作点の集合Q={(q[1],O,O’),...,(q[K],O,O’)}とする(ステップS90)。なお、このとき分離部133は、y座標が同じ場合、x座標について昇順(q[k]のx座標<q[k+1]のx座標)となるようにソートしてもよい。