数理解析研究所講究録
第 1785 巻 2012 年 32-44

32

線形文字列変換による対話型数式入力方式の効果
福井 哲夫
TETSUO FUKUI

武庫川女子大学
MUKOGAWA WOMEN’S UNIVERSITY

1

はじめに
教育の情報化が推進される中，2011 年 4 月に文部科学省より発行された 2020 年に向けた「教育の情報化ビジョン」 [1] の提言に伴い，双方向授業協働学習個別学習を支援するデジタル教科書の時代が来ようとしてる．特に，電子的個別学習の場面では，生徒学生も数式を扱う必要性がますます高まりつつある [2],[3].

しかし，理数系教育において問題となるのが数式のデジタル入出力である．数式は文と異なり，2 次元的な表記構造をもっており，従来のデジタル端末は数式の表記を十分考慮されておらず，数式の取り扱いを困難にしている．

LaTeX などの線形文字列コンパイル方式 [4],[5], 2) 数式エディ
タ [6] などの GUI テンプレート方式，3) InftyEditor[7] などで使われている手書き入力方式が代表的であ
数式入力のための従来技術として 1)

るが，理数系を専門としない一般ユーザにとっては依然使い易いとは言い難い．
そこで我々は，2011 年 8 月に，数式のデジタル入力を平易にするための新しい数式入力方式を提案した[8]. その後，本方式の数式入力効率が従来方式の数式エディタに比べて約 175 倍良いことを報告した [9].
本研究は，提案した数式入力方式のアルゴリズムの定式化とその効果 (タスクが達成できるか) について議論することが目的である．

第 2 章では，本方式と処理の流れが似ている仮名漢字変換にっいて紹介し，第 3 章では，本方式の数式入力の概要を紹介し，仮名漢字変換との違いを示す．第 4 章で，本方式のアルゴリズムを定式化し，その効果を議論する．最後に，本研究の将来展望をまとめる．

11

用語

本研究を説明するためにまず，いくつかの用語を定義しておく．
「線形文字列形式 (linear string format)」 という言葉は，例えばポーランド式プレフィックス形式 (ポーや逆ポーランド記法，TeX や LaTeX など，線形表記法を用いた数式の線形テキストに基づく表現を指す．LaTeX による線形文字列形式の式の例は，“ frac $\{1\}\{a2+1\}$ “ (a の二乗足す 1 分の 1) でランド記法)$\yen$

ある．
「

2 次元形式」という言葉は，数式が，非線形表記法を用いて表される形式を指す．例えば，分子，分離

文字，分母を上下に，指数部を上付き添え字など 2 次元的に配置する．2 次元形式の例は，$\overline{a}=+11$’fukui@mukogawa-u.ac.jp

である．

33
この 2 次元形式で表された数式は 「数式最小単位記号」 自身である力 「演算子」 およびその演算子が作$\searrow$

用している 1 個または複数のオペランドによって構成されている．オペランドはまたーつの数式である．
「数式最小単位記号」と言う言葉は，数，変数，文字などを指す．

「演算子」と言う言葉は，本論文では，2 次元形式の構造をきめる関数，二項演算子，積分演算子，縮約

演算子，括弧，幕乗，添え字などを指し，演算子記号および/ またはオペランド表記との相対的配置および大きさによってその構造が決まる．

以下では，2 次元形式で表された数式を構成している数式最小単位記号または演算子を数式要素と呼ぶ．

2

従来の技術 (仮名漢字変換)
ここでは，数式入力のアルゴリズムと対比して議論するため，従来からある仮名漢字変換のアルゴリズムについて紹介する．

21

仮名漢字変換の歴史

仮名漢字変換のはじまりは，1967 年に九州大学の栗原俊彦教授らの論文からと言われている [10]. 当時
は，テレックスによる仮名伝聞を漢字かな混じり文へ機械的に自動変換しようとして始まった．1973 年の相沢らの論文では，すでに日本語入力を意識していた．その後，1978 年にはじめてのワープロ (東芝 JW-10)
が発売された．初期の頃のアルゴリズムは単文節ごとのひらがな文を漢字に変換するものであった．近年になって，ひらがなで文をそのまま入力して変換できる連文節変換の方式がとられている．1990 年代頃から，
自然言語処理の分野で統計・機械学習べースのアルゴリズム [11] が開発され，現在の仮名漢字変換のエンジンに導入されるようになった [12].

2.2

仮名漢字変換の方式 [12],[13],[14]仮名漢字変換のユーザモデル操作は次のようになっている．
(1)

所望する文のかな文字列を入力し，(2)デコーダにより漢字かな混じり文へ変換された候補が提示され，(3)

必要に応じて変換結果の訂正・確定指示をおこなう．

このとき，仮名漢字変換器に必要な要素は，1) データ構造 (辞書), 2) デコーダ 3) 学習アルゴリズ(学習器)である．辞書データには，かなキーに属する単語群の情報やそれぞれの単語の出現頻度に応じたスコアが記録されている．学習器は正文からそのスコアを算出する．また，単語どうしの接続の強さにつム

いてもスコアが付けられ，辞書データ構造に記録される仕組みになっている．
2 のデコーダによる仮名漢字変換の処理の流れは $KKT-1$ ) $\sim KKT-6)$ のようになる．
$)$[仮名漢字変換の処理]
KKT-I) 入力
KKT-2) キー文字列分解

KKT-3) キー文字列の辞書検索
KKT-4) グラフの構築

34
KKT-5) 最短経路探索
KKT-6) 訂正確定操作

例えば「かがくとがくしゅう」がデコーダによって「科学と学習」へ変換される過程を解説する．(この例は，徳永拓之氏の文献 [12] に大変分かり易く解説されていたので借用させていただく．) 入力された文字列は処理 KKT-2) で {力 かが，かがく，かがくと} のように先頭文字から 文字までの部分文字列に分解$n$$\searrow$

され，処理 KKT-3) で各部分文字列をキーとする変換文字 (単語)ば，” .,, {火，蚊}, “かがく”$\delta$$arrow$$arrow$

全てを辞書から検索し取り出す．例え{科学} となる．処理 KKT-4) で単語をノ $-$ ト’ とし，入力仮名の順に単語どうしをエッジで結ぶグラフを構築する．開始ノード (BOS) から最初の単語候補全てを結び，それらに続く単語を可能なつながり全てに対してエッジで接続する．そうして終了ノード (EOS) までのグラフを構築する．図 1 は構築されたグラフの一例である．このとき，辞書にはそれぞれの単語および単語間の接続関係に対してそれぞれ出現のしやすさおよび前後の接続のしやすさに応じたスコアが付けられており，グラフ内のノード (単語) のコストおよびエッジ (接続関係) のコストが計算できるようになっている．したがって，処理 KKT-5) の漢字かな混じり文の候補を算出するアルゴリズムは，開始ノードから終了ノードまでの可能な経路の内，経路内のノードおよびエッジのスコアを合計したコストを距離と解釈した場合の最短経路探索問題に他ならない．処理 KKT-6) の訂正・確定操作では，ユーザの所望する文でなかった
場合，ユーザ指示により確定したノードを制限条件とした制限付き経路探索問題に切り替えて処理が進行
し，変換が完了する．

図 1: 仮名漢字変換のグラフ構築

3(文献 [12] より)

線形文字列変換による対話型数式入力方式
ここでは，新数式入力方式の概要を述べ，数式変換アルゴリズムを解説すると共に，仮名漢字変換との違いを示し，最後に，本方式のユーザビリティ効果について議論する．

31

新数式入力方式の概要

本研究では，初期入力を平易にするため，線形文字列形式で表された次のような表記法を定める．

表記法所望する数式を，ユーザが読む順番にその数式要素に対応するキー文字 (列) によって区切りなく線形に並べる．

本表記法で定めた数式要素に対応するキー文字 (列) は ASCII コードからなり，数式要素を連想しやすい
頭文字や TeX,LaTeX などに準じた文字列を採用してもよい．

例えば，変数$a$や$\alpha$などはいずれもキー，，a” で表す．また，演算子の場合は $+$ 記号や積分記号のように同じ記号であっても単項演算子や二項演算子など，構造の異なるものが存在する．

35
例えば，次の 2 次元形式の数式 $(A)\sim(D)$ 左辺の本表記法に従った線形文字列形式は，それぞれ右辺のように表される．
$rightarrow$

$a=2$

( )

$2a\beta$$rightarrow$

$2ab$

( )

$\int_{a}^{b}c=2\overline{a}+=11$$rightarrowrightarrow$$intabc=2l/a2+1$$(D)(C)$$\alpha=2$

$A$

$B$

特に，他の表記法と大きく異なる点は，暗黙積や幕乗演算子のように表記されない記号は，線形文字列に含めないところである．例えば，式 (C) に含まれる は，“ と表記する．この複数の数式要素キーが連$a^{2}$$a2$ ”

続して並ぶキーとキーとの間を” 区切りポイント” と呼ぶことにする．

このように，本発明で使用する線形文字列形式表記法は，単純・簡潔になっている．その代わり，所望する数式を構成している数式記号のスタイルや要素間の区切りや各演算子に対するオペランドの範囲などが省略されており，入力された線形文字列形式の情報だけでは 2 次元形式が一意的に定まらず，完全にフオーマットすることはできない．そのため，本システムは線形文字列形式を解釈して構成要素を代表するキーの列に分解し，2 次元形式の候補を算出するために，表 1 のようなキー辞書データを保持しており，各キーに関連付けられたさまざまな数式要素が登録された候補領域 (対応する要素の集合) からデータの優先順位に基づいて候補を算出できるようになっている．そこで，本システムはそのキー辞書データを用いて，数式構成要素ごとに不足情報を補った候補を提示し，ユーザに候補を選択するための簡単な指示を要求する．
そのような数式の構築過程を図 2 に示す．ユーザは数式構成要素ごとに判断すればよいので，複雑な式であっても迷うことはない．すべての構成要素が確定すれば 2 次元形式の構築が完了する．

図 2: 新方式の数式構築過程

36
表 2: 代表的な演算子構造に応じた数式要素キーを並べる順番

32

数式変換アルゴリズムと仮名漢字変換との違い

ここで，システムが線形文字列形式からいかにして 2 次元形式を構築し得るかについて解説する．
上述のように，2 次元形式の数式は，数式最小単位記号自身でなければ，1 個の演算子とその演算子が作用する 1 個または複数のオペランドによって構成される．すなわち，一般の 2 次元形式の数式は数式最小単位記号自身である力 演算子を上位としてそのオペランドを下位にもつような階層構造をもち，オペラ$\searrow$

ンドもまた同様の階層構造をもった数式となっている．

このことから，階層構造をもつ場合の線形文字列形式は，その最上位にあたる 1 個の演算子を代表する
キーとオペランドに相当する線形文字列の部分が表 2 の演算子タイプに応じた順番で並んでいると解釈できる．すなわち，この解釈が数式の階層構造を把握し，2 次元形式を構築することに他ならない．本論文では，線形文字列形式に対する上記の解釈を「構造解釈」と呼ぶ．このとき，オペランドに相当する線形文字
列の部分はまた独立した線形文字列形式を成し，同様に構造解釈される．
例えば，式 (C) は分数演算子キー，，/” に対して，2 個の線形文字列 “ 1” および” $a2+1$ ” がオペランドに対応していると解釈できる．ただし，線形文字列 (C) だけでは，キー，，/” が最上位の演算子であるかどうかは判断できない．

したがって，一般に，本表記法で定めた線形文字列形式はユーザが所望する 2 次元形式に対して，次のような情報が不足している．

不足情報 1) 各構成要素キーの分離点はどこか ?

不足情報 2) 各構成要素キーの所望する構成要素は候補領域のどの要素か ?
不足情報 3)

もし確定した要素が演算子の場合，そのオペランドは線形文字列のどの部分に相当するか ?

37
上記の不足情報は，自動的に決定することはできないため，本システムは，与えられた線形文字列に含まれる各キー文字 (列) に対して，ユーザにその不足情報を要求し，その指示を受諾することによって確定する．
デコーダ (数式変換エンジン) による数式変換および不足情報 )のユーザ指示受諾処理の流れは$1$$\sim 3)$

$EXT-1)\sim EXT-6)$ のようになる．

[数式変換構築の処理]
EXT-I) 入力 (線形文字列)

EXT-2) キー文字列分解

EXT-3) キー文字列の辞書検索
EXT-4) 優先順位による数式要素候補の算出

EXT-5) 演算子とオペランドの構造解釈による数式木の構築

EXT-6) 訂正確定
例え}2 ’ $1/a2+1$ ” がデコーダによって$\grave$$\frac{1}{a+1}$へ変換される過程を解説する．入力された線形文字列はキー文

字列分解処理 EXT-2) で，式 (1) のように数式要素キー辞書と照らし合わせて部分文字列に分解される．

(1)$\{1, /, a, SP, 2, +, 1\}$

このとき線形文字列形式の区切りポイントでは仮の暗黙積演算子 $SP$ が挿入される．キー文字列の辞書検索処理 EXT-3) で各部分文字列をキーとする数式要素の候補群を辞書から検索し取り出す．優先順位による数式要素候補の算出処理 EXT-4) ではキーが演算子でなければ，仮名漢字変換と同様に最小単位記号辞
書 (例えば，表 1) から各要素のスコアに基づいた優先順位によって取り出すことができるが，演算子の場
合はデータ構造が複雑で，演算子記号群だけでなく演算子が作用するオペランドへの接続関係の情報 (例えば，表 2) も含み，ちょうど仮名漢字変換辞書の単語と接続関係の両方の情報を併せ持っている．数式木の構築処理 EXT-5) では演算子とオペランドの構造解釈が行われ，数式木 (例えば図 3)を構築する．このように，構築結果がグラフの道ではなく複雑な木構造となるため，仮名漢字変換とは全く異なり，最短経路探索問題で定式化することはできない．最後の処理 EXT-6) が不足情報 )$1$$\sim 3)$の必要な指示をユーザから受諾し訂正確定処理を行う段階である．数式要素の表記記号がユーザの所望する記号でなかった場合，仮名漢字変換と同様の訂正・確定指示を行うが，所望する数式構造が異なる場合は，オペランド範囲の選択指示が必要となる．詳細については次節で解説する．
以上により，すべての構成要素キーが確定したとき数式の構築が完了する．

図 3: 数式木候補構築例

38
表 3:7 つの基本演算子構造

33

演算子とオペランドの訂正確定方法(1)7 つの基本演算子構造
数式変換を複雑にしている要因は，演算子が演算子記号で表されるばかりでなく，複数のオペランドへの接続関係構造を持つことにある．本研究では，演算子が最大 3 つのオペランドに作用し，全ての演算子を表3 に示すような 7 つの構造に分類して処理を行う実施例で議論する．
本実施例が提案した数式入力方式の基本原理を限定するものではないが，この 7 つの構造によって LaTeXで表現できる数式をほとんど網羅することができる．例えば，本線形文字列形式におけるプラス演算子「 」
は内挿二項演算子の場合 例 $:x+y)$ , 前置単項演算子の場合 例 $:+x)$ , 後置単項演算子の場合 (例 :などが考えられる．ユーザはいずれの場合であっても単に 「と表現すればよいが，システム側はプラス演算子の構造解釈がいずれかに一意的に定まらなければ，構造の訂正確定を要求するように設計し
$+$

$($

$($

$x^{+})$$+_{\lrcorner}$

なければならない．

後の議論のために，表 3 のような演算子とオペランドの階層関係をあらわす数式木構造を数式処理シス
テムの内部表現で多く使用されているような次のリスト表現で表すことにする．式 (2) は表 3 における 3 つの単項演算子，式 (3) は 2 つの二項演算子，式 (4) は 2 つの三項演算子を表す．

{前単，$\{\square _{1}\}$

$\{$

$\{$

ここで，

前三

$\{\square _{1}\},\{\coprod_{2}\},\{\coprod_{3}\}$},$\{\{\square _{1}\},$

後 ,
$\}$

前二，

$\{\coprod_{1}\},$ $\{\square _{2}\}\},$$, \{\coprod_{1}\}, \{\coprod_{2}\}, \{\square _{3}\}\},${左括弧，$\{\coprod_{1}\}$$\{\{\coprod_{1}\}$, 右括弧}

(2)

, 内二，

(3)

内三

(4)

$\{\{\coprod_{1}\},$$\{\coprod_{2}\}\}$$, \{\coprod_{2}\}, \{\coprod_{3}\}\}$

は第 1, 第 2, 第 3 オペランドの数式木リストを表しており，
「前単」，
「内二」，

「左括弧」などはそれぞれ，ある前置単項演算子記号，内挿二項演算子記号，左括弧記号などを表している．
の要素が 1 つだけの場合は
ただし，リストを省く．例えば図 3 の数式木構造は，このリスト表現
によって式 (5) で表される．
$\{1, /, \{\{a, -, 2\}, +, 1\}\}$(5)$\{\square \}$$\{\}$

39(2) キー文字列分解
キー文字列分解処理 EXT-2) の結果において，もし不足情報 1) のように，分解されたーつのキー文字列

が所望するキーと異なっている場合はユーザによる再分解指示を受け付ける．例えば，入力文字列”int” は$\{\int\}$

ではなく $\{i, n, t\}$ としたい場合があるかもしれない．

次に，キー文字列の辞書検索処理 EXT-3) において 個に分解されたキー列は，キー辞書データと照ら$n$

し合わせて，キーのそれぞれに対応する数式要素候補ベクトルを取り出した列(6)$\{e_{1},e_{2}, e_{n}\}$$(i=1, , n)$ は表 1 のようなキー辞書データの対応するキーに属する候補領域を表しており，各成分は数式要素の候補，すなわち数式
最小単位記号であるか演算子を表す．例えば，キー，，a” や” ” や $SP$ の候補ベクトルは次のように便宜的にを生成する．このベクトル列を数式要素候補列と呼ぶ．ここで，ベクトル$e_{i}$$+$

表すことにする．

$e_{a’},$$=(\begin{array}{l}aa\alphaa\end{array}),$$e_{+}=(\begin{array}{l}\coprod_{1}+\coprod_{2}+\square _{1}\square _{1}\square _{2}\square _{1}^{+}\coprod_{1}\oplus\coprod_{2}\end{array})$$e_{SP}=(\begin{array}{l}\square _{1}\square _{2}\square _{2}\square _{1}\coprod_{1\square _{2}}\square _{1\square _{2}}\square _{1}\square 2\end{array})$(7)

またこのとき，候補ベクトルの成分の順番が優先順位を表しており，候補算出処理 EXT-4) の段階で第 1
成分を候補として算出する．
(3) 数式要素の訂正確定

上述のように，演算子とオペランドの構造解釈による数式木の構築処理 EXT-5) によって算出された数式候補が，所望の数式でない場合は訂正・確定処理 EXT-6) によって正しい式に修正する．
ユーザに訂正確定させるとは，式 (7) のような候補ベクトルの成分の一つを選択させることに他ならない．例えば，プラス演算子「 」 の $a+b$ を aに変換する場合がそれに当たる．この処理を次のように
$+$

$b$

表す．
$\underline{e_{i}}=$

Select(8)$(e_{i})$

ここで，選択を受諾する処理を Select とし，選択確定された要素を とした．
さて，ユーザに所望する要素を選択させる実施例としては，優先順位に基づいた候補ベクトルの成分順に$\underline{e_{i}}$

要素候補を，例えば，仮名漢字変換のように，キーボードに割り当てられた指示キー (例えば，スペースキー) を押すことによって 1 個ずつ切り替えて提示し，所望する要素が表示されたときに採択させる方法と候補ベクトルのすべての要素を同時に提示し，ポインティングデバイスなどを用いて選択させる方法のいずれかまたはその両方によって実施することが考えられる．
(4) 演算子構造の変換

上述の，プラス演算子「 」 の例でも説明したように，数式変換では演算子構造を別の構造へ訂正しなけ
ればならない場合が多々ある．演算子構造の変換公式を数式要素列で表すと次のようになる．
$+$

内挿二項演算子の場合:$\{\{\square _{1}\}$, 内二，$rightarrow${$\{\{\square _{1}\}$, 内二，$rightarrow$$\{\{\{\square _{1}\},$$\{\square _{2}\}\}$$\{\square _{2}\}\}$$\{\square _{1}\},$, {前単，{口 2}}}

$SP$

後

$\}, SP, \square _{2}\}$

(9)

(10)

式 (9) の右辺は内挿演算子が前置演算子に変わり {口 2} のみに作用するようになり，{口 1} とは $SP$ 演$SP$ 演算子が区切りとして挿入される．同様に，式 (10) は後置演算子に変換される場合である．ここで，算子は式 (7) のように演算子記号を持たない内挿二項演算子であることに注意せよ．

40
括弧演算子を左右片括弧へ分離する場合:{左括弧，$\{\coprod_{1}$, ロ 2}, 右括弧}

式 (11) の左辺にある括弧演算子のオペランド$rightarrow${{ 左片括弧，$\{\coprod_{1}\}\},$$\{\coprod_{1}, \coprod_{2}\}$$\coprod_{2}$が右辺では口 1 と, 右片括弧}$\coprod_{2}$(11)の間で分離されている．分

離ポイントにっいては次項で説明する．
前置演算子の場合:}$rightarrow$

ロ $1, SP, \coprod_{2}, SP, \coprod_{3}\}\}$$rightarrow${前単，{口 1, $SP,$
$\{$

前単
$\{$

$, \{$

前二，{口 1},$\{\coprod_{2},$$SP,$$\coprod_{2}\}$$\square _{3}\}\}$$rightarrow$

{前二，
{前三，
{前三，

(12)

$\{\coprod_{1}\}$, {ロ 2}}$\{\coprod_{1}\}$, {口 2},}(13)$\{\square _{1}\}$, {ロ 2}, {口 3}}(14)$\{\square _{3}\}$$SP$ 演算子は削除される．逆に 2 つのオペ
オペランドどうしの区切りは，必ず区切り演算子 $SP$ で起こり，ランドが 1 つに結合される場合は $SP$ 演算子が挿入される．ただし，内挿二項演算子の場合も変換公式 (9)$SP$ 演算子を含むことになるので，
あるいは (10) のように前置あるいは後置演算子に変換され得る場合は，オペランドの区切り候補となり得ることに注意する必要がある．

ところで，内挿三項演算子についても上述のように別構造の演算子に変更可能な設計にすることもできるが，本論文では簡単のため，内挿三項演算子は他の構造へは変換しない設計として議論する．このような設計はキー辞書の設計次第によって可能である．
(5) 演算子右オペランドの終端
訂正確定処理 EXT-6) において，不足情報 3) のオペランドに相当する線形文字列の部分 (オペランド
範囲) を確定する方法は，次に示すオペランド範囲の終点候補をユーザに選択させることによって実施する．ある演算子の右に位置するオペランド (例えば，前置演算子の第 1, 第 2, 第 3 オペランドや内挿二
項演算子の第 2 オペランド) のオペランド範囲の開始点となるキーは，与えられた線形文字列の内，必ず(a) 先端キー，(b) 演算子直後のキー，(c) 直前オペランドの終点直後のキーのいずれかとして自動的に決まる．一方，オペランド範囲の終点となり得るキーは，一意的には決まらず，開始点以降の (d) 区切りポイン
ト $SP$ 直前のキー，(e) 演算子直前のキー，(f) 終端キーのいずれかである．システムは，確定した演算子タイプから表 2 のようなオペランドの個数と演算子およびオペランドが並ぶ順番の情報を用いて，与えられた線形文字列形式を構造解釈し，終点候補となるキー $(d)\sim(f)$ を機械的に算出できる．例えば，線形文字
列 (C) の演算子キー “/” が分数の場合に，分母にあたるオペランド範囲の終点は式 (1) から”a”,

2”,“ $b$ ”の 3 通りあり，それぞれ (d), (e), (f) の場合に該当する．
終点候補 $((d)\sim(f))$ は線形に並んでいるため，これをユーザに選択させることは容易であろう．例えば，
次のような公式 (15) を使えばオペランドの終端を変更，すなわち，オペランド範囲を変更することができる．
右オペランド範囲変更公式:$\{\{$

演$, \{\coprod_{1}\}\}, \text{演_{}2}^{\backslash }, \square _{2}, \}rightarrow\{\{ \text{演^{}\backslash }, \{\coprod_{1},\text{演_{}2}, \coprod_{2}\}\}, \}$ここで，対象の演算子記号を 「演」，そのオペランドをとし，続く演算子記号を 「演 2」 で表した．
$\ulcorner$$\{\coprod_{1}\}$

演 2」 は上述のオペランド終端 (d) または (e) を決める演算子である．(15) 式: 右矢印
ランド範囲が$\{\coprod_{1},$演$2, \coprod_{2}\}$(15)$arrow$の変換によってオペのように拡大しており，左矢印 の変換によって縮小する．したがって，ユー$arrow$

ザは (15) 式の拡大または縮小の 2 つの指示 (例えば，キーボードの右または左矢印キーを押下) を繰り返

すだけで所望するオペランド範囲へ修正することができる．
また，演算子が複数オペランドに作用する場合は，まず，第 1 オペランド範囲が確定すれば第 2 オペラン
ドの先頭要素が決まり，第 2 オペランドの終端は公式 (15) の方式で決めることができる．第 3 オペランド

も同様である．この実施方法例としては，オペランド範囲変更対象を第 1$\sim$

3 のいずれか 1 つにし，対象を

41
切替ながら範囲変更手続きを行えばよい．変更対象の切替は，前後のオペランドへ移す 2 つの指示ができれば可能であろう．

34

本方式の効果 (タスク達成)

以上から数式変換の訂正・確定処理 EXT-6) は，以下の 「文字列順確定アルゴリズム」 によって実施できる．ここでは，簡単のために入力・操作ミスが無いものとする．以下では，アンダーラインの数式要素は確定済みを表し，式 (6) の数式要素候補列をこのアルゴリズムで処理した結果を Procl$(\{e_{1}, , e_{n}\})$

で表す．
[文字列順確定アルゴリズム]

Procedure name: Procl
Input:
Output:–式 (6) の数式要素候補列 $\{e_{1}, e_{2}, , e_{n}\}$確定された数式木 $O$

Start of Procl–

Stepl) $(i=1)$ 第 1 要素

最小単位記号，2) 前置単項演算子，3) 前置二項演算子，4) 前置三項

$e_{1}\ovalbox{\tt\small REJECT} X1)$

演算子，5) 括弧演算子のいずれかである． の確定は 33 節の式 (8) の候補選択の手続きによって$e_{1}$

行う． が演算子の場合，オペランド範囲の変更指示は公式 (15) で述べた手続きによって確定でき
る．構造が異なる変換や括弧の分離のある場合も公式 (11)によって確定できる．したがって，のように処確定した演算子皇とオペランド範囲をリスト表現で表し，残りの要素は次の case: )$\underline{e_{1}}$$\sim(14)$$1$$\sim 5)$

理する．

case: 1 ) 最小単位記号$\mathcal{A}=\{\underline{e_{1}}, e_{2}, , e_{n}\},$$i=2$ , Step2) へcase: 2) 前置単項演算子
公式 (15) によってオペランド範囲が $\{e_{2}, , e_{j}\}(i>1)$ に決まったとして，$\mathcal{A}=${$\{\underline{e_{1}}$, Procl ($\{e_{2}$,,$e_{j}\}$

)

$\},$

$e_{j+1}$,,$e_{n}$}, $i=j+1$ , Step2)

へ

case: 3) 前置二項演算子
公式 (15) によってオペランド範囲が $\{e_{2}, , ej\},$ $\{e_{j+1}, , e_{k}\}(k>j>1)$ に決まったとして，{, Procl (,$i=k+1$ , Step2) へ$\mathcal{A}=$$\{\underline{e_{1}}$$\{e_{2}$, $ej\}$ ), Procl $(\{ej+1$ ,,$e_{k}\})\},$ $e_{k+1}$,,$e_{n}$},

case: 4) 前置三項演算子
公式 (15) によってオペランド範囲が $\{e_{2}, , ej\},$ $\{ej+1, ,e_{k}\},$ $\{e_{k+1}, , e_{l}\}(l>k>j>1)$に決まったとして，{ , Procl ( , , $ej\}$ ), Procl $(\{ej+1$ ,,$i=l+1$ , Step2) ヘ$\mathcal{A}=\{$$\{e_{2}$$\underline{e_{1}}$,$e_{k}\})$, Procl $(\{e_{k+1}$ ,,$e_{l}\})$},$e_{n}\},$$e_{l+1}$

case: 5) 括弧演算子
公式 (11) のようにオペランド範囲 {$e_{2}$, ej-l} $(j>1)$ が分離指示されなければ，,,$eJ+1$ ,,, Procl (,, $eJ-1\}$ ),$i=j+1$ , Step2) へ
ここで， がそれぞれ左括弧，右括弧を表す．(注) 分離された場合は case:2).

$\mathcal{A}=\{\{\underline{e_{1}}$$\underline{e_{1}},\underline{e_{j}}$$\{e_{2}$$\underline{ej}\},$$e_{n}\}$

42
Step2) case:

)

$2$

的仮定)

$\sim 5)$の演算子$\underline{e_{1}}$が作用するオペランドの再帰呼び出し Procl が確定したと仮定 (帰納する．このとき，$\{\underline{e_{1}}, , e_{i-l}\}$$i>n$ ならば
もし，

$O=\mathcal{A}$は確定済みである．

を出力して終了．そうでなければ Step3) へ

Step3) 公式 (15) の議論より，第 要素 $e_{i}(i>1)$ は 6) 内挿二項演算子，7) 後置単項演算子，8) 内挿
三項演算子のいずれかである．さらに，6) は 61) 内挿二項演算子に確定される場合と公式 (9),(10)によって 62) 前置演算子または 63) 後置演算子に構造変換される場合がある．
$F$

$i$

case:6.1) 内挿二項演算子

内挿二項演算子$\underline{e_{i}}$の第 1 オペランド {$\underline{e_{1}}$, ei-l} は既に確定しているから，第 2 オペランド,, ej} $(j>i)$ に決まっ,の範囲を確定すればよい．公式 (15) によってオペランド範囲が {$e_{i+1}$

たとして，, Procl (,,$i=j+1$ , Step2) へ$e_{i-1}\},\underline{e_{i}}$$\mathcal{A}=\{\{\{\underline{e_{1}}$case:6.2) 内挿$arrow$$\{e_{i+1}$,, $eJ\}$ ) $\},ej+1$ ,,$e_{n}\}$

,

前置演算子

この場合，もともと内挿演算子

が前置演算子に変わり，その前に $SP$ 演算子が第 要素として挿$i$$e_{\partial}$

入されたため， とそのオペランド $\{e_{i+1}, , e_{j}\}(j>i)$ が確定した後，Procl $(\{e_{i+1}, , ej\})$$\underline{e_{i}}$$SP$ 演算子も確定できる．
が確定できると仮定 (帰納的仮定) して，$A=\{\{\{\underline{e_{1}}$,,$\underline{e_{i-1}}\},\underline{SP},$$i=j+1$ , Step2)
case:6.3) 内挿$arrow$$\{\underline{e_{i}}$, Procl (,, $ej\}$ )$\}\},$$eJ+1$,,$e_{n}\}$

,

後置演算子

この場合，もともと内挿演算子

して挿入される．後置演算子,,$\mathcal{A}=\{\{\{\underline{e_{1}}$$\infty se:7)$$\{e_{i+1}$ヘ$e_{i-l}\},$$\underline{e_{i}}\},$$\underline{e_{i}}$$e_{i}$

が後置演算子に変わり，その後に $SP$ 演算子が第 $i+1$ 要素とは $\{\underline{e_{1}}, , e_{i-1}\}$ を第一オペランドとして確定できる．

,$SP,$ $e_{i+1}$ ,$e_{n}\},$$i=i+1$ , Step2

$)$

へ

後置演算子

後置演算子

$\underline{e_{i}}$は $\{\underline{e_{1}}, , e_{i-1}\}$ を第一オペランドとして確定できる．

$\mathcal{A}=\{\{\{\underline{e_{1}}, e_{i-1}\},\underline{e_{i}}\},e_{i+1}, e_{n}\}$,$i=i+1$ , Step2) へcase:8) 内挿三項演算子

は既に確定しているから，第 2, 第 3 オペラン
内挿三項演算子一 ei の第 1 オペランド
ドの範囲を確定すればよい．公式 (15) によってオペランド範囲が $\{e_{i+1}, , ej\},$ $\{e_{j+1}, ,e_{k}\}(k>$$\{\underline{e_{1}}, , e_{i-1}\}$$i>1)$ に決まったとして，$\mathcal{A}=\{$$e_{k+1}${$\{\underline{e_{1}}$,–End of Procl,,$e_{n}\},$,$e_{t-1}\},\underline{e_{i}}$, Procl ($\{e_{i+1}$,, $ej\}$ ), Procl $(\{eJ+1$ ,,$e_{k}\})$},$i=k+1$ , Step2) へ–

さて最後に，入力された数式候補ベクトル列において，手続き Procl $(\{e_{1}, e_{2}, , e_{n}\})$ が完了できることを示しておく．

(I) $n=1$ の場合は，が数式最小単位記号のみの場合であるから，手続き Procl は 33 節で述べた式 (8) の手続きによって明らかに確定できる．
$\mathcal{A}=\{e_{1}\}$

43(II) 一般に $n>1$ の場合は，手続き Procl の Stepl) 1 こよって，第 1 要素

$e_{1}$

できることが示され，Step2) および Step3) によって処理すべき要素は$n$は，演算子であっても確定
1 個以下であり，処理を繰り返すたびに，処理すべき要素の個数は確実に減少している．したがって，手続き Procl の中で再帰的に呼び出される手続き Procl の入力数式候補ベクトル列の要素数も1 個以下であり， が
$n$

$n$

有限であることと，帰納法により処理は完結する．//

以上により，本数式入力方式のユーザビリティ効果が示された．すなわち，本方式により数式入力のタスクが確実に達成できる．

4

まとめ
数式のデジタル入力を容易にするユーザインターフェースを開発するため 2O11 年 8 月に提案した新しい

数式入力方式 [8] は，数式の線形文字列形式で入力された文字列を数式辞書データを使って変換し，算出された数式候補をユーザとの対話形式で訂正・確定操作することによって数式を構築できるものである．
本提案方式の独創性は，数式に対する入力文字列をユーザの読む順番に対応させた点にある．したがって，従来技術に比べ，(1) 数式構築のための入力文字列が平易，(2) 候補を選択すればよいので，数式構築操作が単純，(3) 数式辞書の機械学習機能により入力効率が向上するといった優位性がある．
ユーザビリティの評価は効果効率満足度の高さで測られる [15]. 本研究では，そのユーザビリティを評価するため，本方式を実装した数式入カシステムを試作し，本方式の効率についてその実装システムによる評価テストを実施した結果，分数係数の 2 次多項式の入力に関しては従来方式の数式エディタに比べて約 175 倍効率が良いことを 2O11 年 9 月の研究 [9] において報告した．
今回の研究では，提案した数式入力方式におけるその効果について検証するため，線形文字列変換による対話型数式入力方式による手続きをアルゴリズム表現によって定式化した．その結果、 次のことを示した．
1. 本方式は，仮名漢字変換と類似の操作性をもつが，数式のデータ構造は全く異なるため，仮名漢字変換のアルゴリズムは適用できない．

2. 本数式入力方式によって，ユーザによる入力・操作ミスがなければ，次の 4 つのユーザ指示 (1) 数
式要素選択，(2) オペランド範囲変更，(3) 変更対象オペランドの切替，(4) キー再分解による手

続きから確実に所望する数式を構築できる．
したがって，本方式のユーザビリティ効果が示された．

最後に，満足度の高い評価を得るためには，方式が優れているだけではだめで，ユーザの入力・操作ミスにも対処できなければらならい．そのためには，ミスしても修正できるような数式編集機能を設計する必要がある．これについては，現在取組中で，今後の課題である．

参考文献[1] 文部科学省: 教育の情報化ビジョン，
http: $//www$ . mext. go.$jp/b\lrcorner nenu/$ houdou/23/04/1305484. htm, 2011.
[2] 中村泰之:STACK と Moodle による数学$e$

ラーニング，数理解析研究所講究録 1735 「数式処理と教育」

2011,9-15.
[3] 白井詩沙香，福井哲夫:数式処理を用いた教育を想定したタイピング能力の調査，数理解析研究所講究録
1735 「数式処理と教育」 2011,73-84.

44[4] Donald Ervin Knuth: The TeXbook,Addison-Wesley, 1984.
[5] http: $//www.w3.$ org/TR/2001/REC-MathML2-20010221/[6] Microsoft co.: Microsoft(R) 数式エディターユーザヘルプ，
http: $//0ffice$ . microsoft. com/ja-jp/word/.

[7] M.Fujimoto, T.Kanahori and M.Suzuki: Infty Editor-A Mathematics Typesetting Tool with a Handwriting Interface and a Graphical Fkont-End to OpenXM Servers, Computer Algebra- Algorithms,
Implementations and Applications, RIMS Kokyuroku Vol.1335, 2003, 217-226.
[8] 福井哲夫:数式のインテリジェントな線形入力方式，数理解析研究所講究録「数式ソフトウェアと教育」,2012, 掲載予定．
[9] 福井哲夫:数式のインテリジェントな線形入力方式と評価，数理処理，日本数式処理学会，2012, 掲載予定．

[10] 森健一，八木橋利昭: 日本語ワープロの誕生，丸善，1989.

[11] 奥村学，高村大也:言語処理のための機械学習入門，コロナ社，2010.
[12] 徳永拓之:作って学ぶ日本語入力，Web DB press,Vol.64, 2011, 94-121.
$+$[13] 坂倉省吾:JISX4064 仮名漢字変換システムの基本機能，財団法人日本規格協会，2002.

[14] 吉村賢治:Information Science &Engineering-T4 自然言語処理の基礎，サイエンス社，2000.
[15] ヤコブニールセン:ユーザビリティエンジニアリング原論，東京電機大学出版局，1999.