スクリーンリーダーでの数式の読み上げの現状(2023年9月時点)
アクセシビリティ・エンジニア 大塚当Blogでは、2019年にWebにおける数式と数式の読み上げを取り巻く環境についてという記事を公開しています。こちらには、記事公開時点でのMathMLの現状や、スクリーンリーダーでの数式の読み上げ方がまとめられています。では、記事の公開から4年近くたつ現在では状況は変化しているのでしょうか。
Web上で数式を表現する方法として、MathMLというものがあり、現状Chrome、Firefox、Safariなどの主要なデスクトップ / モバイル向けのブラウザが対応しています(MathMLの詳細や対応状況についてはMathML | MDNを参照ください)。このほか、MathMLに対応していない環境で数式を表示させるための方法として、MathJaxというJavaScriptライブラリを利用する方法もあります。では、これらの方法で表された数式は、スクリーンリーダーでどのように読み上げられるのでしょうか。
今回は、NVDAとChrome、PC-TalkerとChrome / NetReaderで、先日公開された当社のコラム「数学的トピックスからみた今のAIができないこと、そしてその未来」に書かれている数式をMathMLで表したもの、MathJaxで表したものとして、それぞれ読み上げさせました。
NVDAとChrome
NVDAとChromeでは、それぞれ数式の読み上げ方に違いがみられました。以下は、MathMLで書かれた数式を読み上げさせた際のスピーチビューアの出力です。なお、NVDAでのMathMLの読み上げにはMathPlayerのインストールが必要です。
マーダヴァ-ライプニッツ級数(Σを使わない表記): 1 minus 1 third plus 1 fifth minus 1 seventh plus 1 ninth minus dot dot dot equals pi over 4
マーダヴァ-ライプニッツ級数(Σを使った表記): the sum from n equals 0 to infinity of the fraction with numerator open paren negative 1 close paren to the n power and denominator 2 n plus 1 equals pi over 4
ラマヌジャンのπの公式: 1 over pi equals the fraction with numerator 2 the square root of 2 and denominator 99 squared the sum from n equals 0 to infinity of the fraction with numerator 4 n factorial times open paren 1103 plus 26390 n close paren and denominator open paren 4 to the n power 99 to the n power n factorial close paren to the fourth power
このようにMathMLで表した数式を読み上げさせると、デフォルトでは数式や記号を英語として読み上げます。また、読み上げ速度の設定にかかわらず、一部分の読み上げ速度が遅くなってしまいます。数式を日本語で読み上げさせる場合、NVDAの設定を変更する必要があり、NVDAの[設定]の中の[日本語設定]から、[数式を英語で読み上げる]をオフにします。以下は設定変更後に数式を読み上げさせた際のスピーチビューアの出力です。
マーダヴァ-ライプニッツ級数(Σを使わない表記): 1 マイナス 3 分の 1 プラス 5 分の 1 マイナス 7 分の 1 プラス 9 分の 1 マイナス math axis ellipsis イコール 4 分の パイ
マーダヴァ-ライプニッツ級数(Σを使った表記): サム エヌ イコール 0 から 無限大 まで 分数 2 エヌ プラス 1 オーバー カッコ マイナス 1 カッコ閉じ の エヌ 乗 分数終了 イコール 4 分の パイ
ラマヌジャンのπの公式: パイ 分の 1 イコール 分数 99 の 2 乗 オーバー 2 square root 2 分数終了 サム エヌ イコール 0 から 無限大 まで 分数 カッコ 4 の エヌ 乗 99 の エヌ 乗 エヌ 感嘆符 カッコ閉じ の 4 乗 オーバー カッコ 4 エヌ カッコ閉じ 感嘆符 times カッコ 1103 プラス 26390 エヌ カッコ閉じ 分数終了
MathJaxについては、デフォルトではMathMLと同じように読み上げました。一方で、MathJaxには、コンテキストメニューから有効にできるアクセシビリティ拡張が標準で含まれており、有効にしたところ、NVDAの設定にかかわらず数式を英語で読み上げました。さらに、無効時の英語読みとは異なった読み上げ方となりました。以下、それぞれの数式を読み上げさせた際のスピーチビューアの出力です。
マーダヴァ-ライプニッツ級数(Σを使わない表記): 1 minus one third plus one fifth minus one seventh plus one ninth minus midline horizontal ellipsis equals StartFraction pi Over 4 EndFraction
マーダヴァ-ライプニッツ級数(Σを使った表記): sigma summation Underscript n equals 0 Overscript normal infinity Endscripts StartFraction left parenthesis negative 1 right parenthesis Superscript n Baseline Over 2 n plus 1 EndFraction equals StartFraction pi Over 4 EndFraction
ラマヌジャンのπの公式: StartFraction 1 Over pi EndFraction equals StartFraction 2 StartRoot 2 EndRoot Over 99 squared EndFraction sigma summation Underscript n equals 0 Overscript normal infinity Endscripts StartFraction left parenthesis 4 n right parenthesis factorial left parenthesis 1103 plus 26390 n right parenthesis Over left parenthesis 4 Superscript n Baseline 99 Superscript n Baseline n factorial right parenthesis Superscript 4 Baseline EndFraction
このように、英語として読み上げていることには変わりないのですが、記号の読み方に違いがみられました。また、いずれの組み合わせについても、数式にフォーカスを移動した状態で[enter]キーを押すことで、部分ごとに読み上げるなど、より詳細に数式を確認することができます。
PC-TalkerとChrome / NetReader
PC-TalkerとChromeの組み合わせでは、MathPlayerのインストールの有無にかかわらずMathMLで表された数式を読み上げました。以下は、PC-Talkerでの読み上げの書き起こしです。
マーダヴァ-ライプニッツ級数(Σを使わない表記): 1 マイナス 1 3 プラス 1 5 マイナス 1 7 プラス 1 9 マイナス テンテンテン イコール 4
マーダヴァ-ライプニッツ級数(Σを使った表記): シグマ イコール 0 ムゲンダイ カッコ - 1 カッコトジ 2 プラス 1 イコール 4
ラマヌジャンのπの公式: 1 イコール 2 2 9 9 2 シグマ イコール 0 ムゲンダイ カッコ 4 カッコトジ カンタンフ カッコ 1103 プラス 26390 カッコトジ カッコ 4 9 9 カンタンフ カッコトジ 4
このように、数式や記号は日本語として読み上げられたものの、一部の記号は読み上げられませんでした。また、数式を一度には読み上げず、一つの数式を確認するために何度も矢印キーを押す必要がありました。
一方、PC-TalkerとNetReaderの組み合わせでは、どちらの数式についてもデフォルトの閲覧モードでは読み飛ばしてしまいました。Chromiumモードへと切り替えることで読み上げさせることはできるものの、読み上げ方はChromeとの組み合わせの時と変わりませんでした。そのため、一部の記号を読み上げなかったり、数式を一度に読み上げなかったりしました。また、いずれの組み合わせについても部分ごとに数式を確認するといったことは行えませんでした。
冒頭に紹介した記事が書かれた2019年と比較すると、MathMLがより多くのブラウザでサポートされるようになり、ブラウザ上で手軽に数式が表示できる環境が整いつつあります。また、数式の読み上げについても、特にNVDAを利用することで詳細に読み上げさせることができました。
ただ、現状数式を読み上げさせるためにはMathPlayerのインストールが必要であり、さらに日本語で数式を読み上げさせるためにはNVDAの設定を変更する必要があることから、若干のハードルを感じたというのが個人的な印象です。さらに、PC-Talkerでの数式の読み上げについてはどのブラウザとの組み合わせについても課題がみられました。
現状、特に複雑な数式を多くのスクリーンリーダーとブラウザの組み合わせで読み上げさせる場合、MathMLとMathJaxそれぞれでの数式の記載を検討すると良いのではないでしょうか。また、それほど複雑ではないものの、より多くの人が必要としているような数式については、確実に読み上げさせることができるプレーンテキストでの記載も検討すると良いでしょう。