はじめに
ここ数年,絶対にやらなくちゃいけないわけではないけれども,できたらいいなと思っていて,でもめんどくさくて挫折していたのがタイトルの作業です(実際にはもとはPDFで,それをWordファイルにして扱いやすいフォーマットにしてから…という話なんですが)。PDFで持っている文法の練習問題があって,それをLMSで教材にすると,PDFを1枚貼り付けて,それを別画面で開いてそれを見ながら回答の入力はLMS上で行う,という運用になるわけです。ただ,学生側からすると問題入力する画面で問題も見せてくれよとなりますよね。それをどうにかしないとなぁとずっと思っていたのですが,めんどくさくて放置していて,生成AI(ChatGPT 4o or Claude 3.5)に助けを求めたりもしたのですがうまくいかず,今日「はっ!もしかして!」と今までと違うアプローチを試みたらうまくいったので,その嬉しさのあまりこの記事を書いています。人によっては,そんなこと最初から思いつけよと思うかもしれません。
なぜめんどくさいのか
普通の空欄補充問題とかなら,たぶん生成AIに渡して問題ごとにWordで出力してとか,あるいは選択肢もカラムで整理してcsv形式にしてLMSにそのまま流せるようにとか多分できるんですよ。でも,その文法問題は,空欄補充以外にも下線部のエラー特定問題も含まれています。下記画像のような感じです。

こういうのは,下線の下のアルファベット記号のレイアウトが肝なのでテキスト処理的にはうまく扱えないんですよね。それで,生成AIに頼んでもうまくいかないと。
私がどういうことをやりたいと生成AIに伝えていたかというと,PDFを見せて,これを問題ごとに分割して別のファイルにしたいんだということでした。どうしても下線部問題のレイアウトが崩れてしまったんですよね。それから,画像ファイルとしてLMSに上げることも考えました。画面のスクショを撮るなら正直1問数秒で終わりますから,数十問あってもそこまで時間はかかりませんし,ファイル名を連番に変えるというような作業は機械的にできるので。しかしながら,画像として問題をLMSにあげると,画質が悪くて問題が見づらいという問題にぶちあたってしまいました。これに悩んでいたときはo1のような推論モデルもなく,推論モデルにPDFファイルやWordファイルを見せることもできませんでした。もしかすると,その方法なら(私が思いついたのとは違う)良い解決策を提案できたかもしれません。
解決の糸口
ふと,Claude 3.7 sonnetにWordあるいはPDFでどっちならどうにかできるかと今日相談してみました。すると,WordでVBAを使えばできると言ってきました。なるほどその手があったか!と思いました。私は,Adobe AcrobatでPDFからWordに変換し(レイアウト崩れはゼロに近いクオリティ),VBAは使えないので,提案されたコードをただ貼り付けて,スクリプトを実行しました。すると,数十個のWordファイルが生成されました!あとは,Adobe Acrobatでこれを一括で読み込んでPDFにすればいいだけです(WordのままLMSに読み込ませるとレイアウト崩れがあるため)。ところが,出力されたファイルはやっぱり下線部問題でレイアウト崩れがありました。問題部分を抽出して,コピペするというやり方でしたが,新しいファイルを開いてコピペする際に,元のレイアウトを保持してコピペするというのがなかなか難しいようでした。
そのとき,私はひらめいたのです。
これもしかして,問題を分割することとファイルを分けることを一緒にやろうとしていたから難儀な作業になっていただけで,空行をページ区切りに置換して1ページ1問のWordファイルにすれば,あとはそのままPDF化してそのPDFを1ページごとに別個のPDFファイルに出力するだけいいのでは?
と!いやむしろなんで最初からそういう発想になってなかったのよメチャクチャ簡単やん!となりました。そこで,ClaudeにWordで空行をページ区切りに変換する方法を尋ねると…
- 検索と置換機能(Ctrl+H)を使用
- 検索欄で「^p^p」(2つの段落記号)を入力
- 置換欄で「^m」(手動改ページ記号)を入力
- 「すべて置換」をクリック
というサジェストがありました。あとはこの通りに置換して,1問が1ページになっていることを確認したらPDF化して,Adobe Acrobatの”organize pages”で1pageずつにsplitすれば,1問1PDFファイルの完成です。あとはLMSの仕様に従ってzipファイルにまとめてアップロードすれば,各問題ページにPDFの問題が配置された設問ができるというわけです。
余談
実は途中で,HTMLで下線部問題できないのか?と思って生成AIに聞いてみたこともありましたが,結果としてはやはりABCDをうまく表示させることができなくて失敗に終わりました。
おわりに
正直,この作業自体は絶対にやらないといけないわけではないし,むしろ何年もやらないままできたのできっとやらなくてもよかったのかもしれません。ただ,私としてはどうしてもいつもなんか引っかかるものがあって,なんとかしたいと思っていたので,今回解決できてよかったです。まだまだもっとこうしたいというのがあるので,そこにもしっかり手が回りますように…。
なにをゆう たむらゆう。
おしまい。
