レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

雑誌のプログラムリストのOCR読み取りについて検証してみた(その3)

2023年03月29日 | 自作プログラム

つづきです。

DumpFormater.exeについて説明します。

ProgramListOCRやGoogleドライブのOCR機能でテキストに落としたBASICリストは、一行の文が右端で折り返されて複数行になっていたり、文字の間に不必要な空白が挿入されていたり、BASICでは使われない全角文字に変換されてしまったりしているので修正する必要があります。

DumpFormater.exeはこれらを(可能な部分だけ)修正するツールです。また、OCRの誤変換により発生した文法上間違っていそうな個所も出力します。さらに変数リストも作成するので、それにより誤変換された変数名や予約語を見つけることが容易になっています。

テキストに変換されたBASICリストは、最終的にDumpListEditorに持っていって雑誌のプログラムと1行ずつ見比べてチェックすることになると思いますが、その前にこのツールでおかしなところを見つけて修正しておけばチェックの際に手作業で修正する部分が減り、スピーディーなチェック作業を行うことができると思います。

それでは使い方です。プログラムを起動するとつぎのようなウィンドウが表示されます。

右上のリストから読み込むテキストの種類を指定します。項目"I/O"から"ASCII"まではマシン語ダンプリスト用なので今回は使用しません。
その下の"N/N80-BASIC"から"MSX BASIC Ver2.0"で読み込みたいテキストのBASICの種類を選択します。これは変数リストを作成するときにBASICの予約語を除くためで、このリストにないBASICでもマイクロソフト系のBASICならどれを選んでも大部分の予約語を取り除いてくれるでしょう。ただし、機種固有の予約語は変数として表示されてしまいます。それ以外のMZのS-BASICなどはどれを選択してもかまいませんが、マイクロソフトBASICと異なる予約語は変数名として出力されてしまいます。

「OCRエンジン選択」の項目では、ProgramListOCRで読み取ったテキストを修正する場合は"Tesseract"を、GoogleドライブのOCRなら"Google"を選択します。

「OPEN」ボタンを押すとファイル選択ダイアログが表示されますので、ここでOCRで読み取ったテキストファイルを選択します。するとテキストボックスに修正されたテキストが表示されます。

上図の50行のようにGoogleのOCRでは複数行を1行として読み取ってしまうことも多いのですが、これを自動的に分割するには多少のBASIC構文解析が必要になります。誤変換が含まれているこの段階では正しくない位置で分割してしまうこともあります。そうなるとかえって手作業での修正が増えてしまうので、自動的に修正するのは見送りました。申し訳ありませんが元の原稿などと見比べながら手作業で分割してください。

「SAVE」ボタンを押すとセーブダイアログが表示されますので、ファイル名を付けて修正済みのリストを保存します。
このときファイル名に"_Err"と"_Var"が追加されたファイルが一緒に保存されます。

"_Err"のついたファイルは誤変換された可能性がある部分の行番号とその内容が出力されています。かならずしも間違いとは限りませんが、念のためチェックすることをお勧めします。怪しい部分が見つけられなかったときは、このファイルは出力されません。

"_Var"のついたファイルは変数リストです。リストには変数名と使用されている行番号の一覧が出力されています。
リスト中、不自然な変数名(例えばA$とASという変数があった場合、$→Sに誤変換されている可能性があるとか、GOT0のようにOオーが0ゼロになっているなど)や使用されている場所か1か所しかない変数(ただしループやキー入力などで使う一時的な変数の可能性もある)など、怪しい個所をこれでチェックしていきます。

ここでチェック&修正が終わったらもう一度DumpFormater.exeに読み込んで"_Err"や"_Var"を出力し直してもかまいませんし、そのままDumpListEditorに持っていって修正&バイナリ化してもかまいません。

以前使ったWindowsOCRエンジンを利用するBasicOcrReader.exeも、使用方法はこのDumpFormater.exeと一緒です。

最終的に修正したテキストはDumpListEditorに持っていきますが、テキストにカタカナが含まれていると文字化けするので「編集」→「変換」のメニューから「SJIS」→「マシンコード変換」か「UTF8」→「マシンコード変換」でカタカナを1バイトのカナ文字に変換する必要があります。
また、グラフィック文字の入力はOCRエンジンでは出来ないのでDumpListEditorで手入力するしかありません。
グラフィック文字を入力したときはUTF-8やSJISのファイルに再保存しても文字化けするので、DumpListEditorの「ファイル書き出し」→「BASICファイル書き出し」(またはDISKやテープ形式)でBASICの中間言語に変換して保存する必要があります。
このときBASICプログラムのエラーで保存できない場合は、「チェックを厳しく」のチェックを外しておくと保存できるようになります。

BASICリスト読み取りに関しては以上で終了です。次回はマシン語ダンプリストの読み取りについて検証してみます。


最新の画像もっと見る

コメントを投稿