私は仕事において、第三者が作成したWord文書が指定されたフォーマットに従っているかどうかをチェックすることをしています。たとえば文章中のコンマ「,」やピリオド「.」は全角にするとか、数字を列挙するときは「1, 2, 3, 4」のように半角の数字を半角のコンマとスペースで連結するといった独自のフォーマットルールです。ですが、コンマやピリオド、スペースはそれが半角なのか全角なのかは、Wordファイルを見ただけではすぐに分かりません。しかもWordの検索機能はあまり使いやすくなく、半角と全角をうまく区別してくれません。以前は一つ一つカーソルの動きを見て半角かどうかをチェックしていたのですが、とても苦痛な作業でした。

プログラムで色付けして、全角なのか半角なのかをハイライトすれば一目で区別できるのではないかと思って作成したのが、今日紹介するPythonのプログラムです。全角と半角で色分けをしてくれるので、仕事がかなりラクになりました。同じような業務をしている人のお役に立てればと思います。

準備(ライブラリのインストール)

前回同様、Python-Docxライブラリを使いますので、事前にインストールしておく必要があります。

コマンドプロンプトで以下のコマンドを入力して、Python-Docxライブラリをインストールしてください。

プログラムの動作

下のようなWord文章があるとします。この文章には半角のスペースやコンマ、ピリオド、数字が混ざっているのですが、それらを全て全角にしたいとします。

あとで紹介するプログラムを実行するとファイルを選択するダイアログが開くので、チェックしたいWordファイルを選択します。

選択後、少し待つと処理が終わり、ハイライトされた文章を保存するためのダイアログが表示されます。元のファイル名の末尾に「(ハイライト)」という文字列が自動的に入るので、そのまま保存しても元のファイルとは別ファイルで保存されます。たとえば「Wordファイル.docx」は「Wordファイル(ハイライト).docx」となります。

保存されたファイルを開いてみると以下のようにハイライトされています。半角のコンマは明るい緑、全角のコンマは濃い緑、半角の数字は赤、全角の数字はピンクに、半角のスペースは青、全角のスペースは水色にハイライトされているので、一目で半角と全角の区別がつきます。

プログラムのソースコード

以下がPythonのコードになります。

こちらからソースコードをダウンロードできます。

プログラムの解説

簡単にプログラムの解説をしていきます。

まずは必要なライブラリをインポートします。

find_occurances_in_paragraph関数でWord文章(paragraph)から正規表現(pattern)に一致する部位を見つけます。

get_target_runs関数は、find_occurances_in_paragraph関数が見つけた正規表現に対応するWordの文章部分を取り出します。

split_run_in_two関数とsplit_run_in_three関数はget_target_runs関数から呼ばれる関数です。またcopy_format_manual関数はsplit_run_in_two関数から呼ばれる関数です。

こちらで検索する正規表現と、対応させるハイライトの色を指定しています。

詳しい正規表現の説明はこちらを参照してください。

https://murashun.jp/article/programming/regular-expression.html

またPython-DocxライブラリのWD_COLOR_INDEXでハイライトできる色は以下のようになります。

指定した正規表現の数だけforループで回し(このサンプルプログラムでは6つ)、文章全体から該当する部分を見つけ、見つかった部分をハイライトしています。

ハイライトが終わったらファイルを保存します。

以上が簡単な説明です。Wordファイルから正規表現に一致する部分を見つけてくるロジックはこちらを参考にさせていただきました(多少改変してあります)。

https://github.com/Sriram2001/Document-Highlighter/blob/master/source.py

もし参考になるようでしたら幸いです(動作に責任は持てませんので、お試しになる場合は必ず元のファイルをバックアップしておいてください)。