正規表現って? – 字幕翻訳に挑戦 番外編 –

翻訳・ことば

みなさん正規表現はご存じですか?使ったことはありますか?

PTCでは最近字幕翻訳の練習をするにあたって、準備などに使ったツールや準備の過程をご紹介してきました。

今回は、知っていたらすごく便利な「正規表現」について説明してみようと思います。

私は字幕を作成するにあたって、Subtitle Editというツールで不便なく作業を終わらせられたので(別記事を参照)、今回に限っては正規表現をあまり使いませんでしたが、これは字幕ファイルを扱うときに限らず、知っていると色々なところで業務の効率化が図れると思います。私はZoomのチャット履歴をテキストファイルでダウンロードして、発言した時間や人の情報をエクセルで整理するのに使ったりしていました。

一時は「なんで情報リテラシーの授業でエクセルと一緒に正規表現教えてくれんかってん!」と怒っていました😂

―本記事を役に立ててもらえそうな方―

  • 字幕翻訳案件を扱う機会がある
  • 数字と文字が繰り返される大きなデータ(Zoomミーティング参加者リスト、チャット履歴など)を扱う機会がある
  • エクセルファイル、テキストファイル、srtファイル、VTTファイルなどを効率よく使いこなしたい

今回は字幕ファイルからエクセルファイルへの変換を例に、正規表現を説明してみたいと思います。

正規表現とは

正規表現とは指定した条件に一致する複数の文字列を、一つのパターンで表現する方法です。

例えば後にご紹介する字幕ファイルには時間情報とフレーム情報が「00:01:25.001」のように示されます。WordやExcelの置換機能であればほとんどの人が使ったことがあると思いますが、決まった形式で数字と記号がずらっと並んでいるだけなのに、数字が一つ違っただけで他の文字列には当てはまらなくなる、つまり「マッチ」しなくなってしまいますよね。

00:01:25.002」や「00:01:25.003」も一緒に置換したいのに…なんてこともあるかと思います。

この数字と記号の文字列を一気に置換したいとき、正規表現を使えば「数字、コロン、数字、コロン、数字、ピリオド、数字」の文字列すべてにマッチさせることができます。

字幕ファイルの種類と内容

字幕ファイルの種類はsrt、VTTなどがあります。今回はsrtファイルに着目してご紹介します。

srtファイル例

srtファイルはテキストエディタで開くことができます。私はサクラエディタを使っています。

一番最初の3行を例にとると、以下のような構造になります。

1字幕の通し番号
00:00:03,396 –> 00:00:05,648表示開始時間 –> 表示終了時間
(hh:mm:ss, fff/時:分:秒, フレーム数)
ルーシーおばさんへ字幕

srt → Excelの変換に使える正規表現

では早速本題の、正規表現の使い方をご紹介していこうと思いますが…その前に一点だけお伝えさせてください。

これからご紹介するプロセスは、私があれやこれやと考えながら行っただけで、もっと効率の良い表現やプロセスがあるかもしれません。あくまで正規表現を使えばこんなこともできるんだ、という例としてご参考にしていただき、ここから色々と応用していただければ幸いです☺

そして、もし他にも良い方法があるよ!と気づいた方がいらっしゃればぜひその英知をお聞かせください!

~目的~

srtファイルの各情報がエクセルファイルの各セルに入るよう整理したい

今のsrtファイルの状態だと、エクセルで開いたときに左の画像のようになってしまいます。

先に目標のファイルをお見せしてしまうと、次のような感じです。一つ(一枚)の字幕の情報を一列にまとめたいわけです。

では情報を横並びにして各セルに入れられるよう、正規表現を使って整理してみましょう。

0. エディタの正規表現を有効☑に

最初にエディタの正規表現の設定にチェックを入れておきます。

Ctrl + r で置換ウィンドウを表示し、正規表現にチェック✅

1. 「–>」を「;」に変える

手始めに、全字幕に共通している矢印「–>」を消してみましょう。ファイル内の全ての「–>」を「;」に置換します。

なぜ今回セミコロンに置換しているのかは最後に説明します。他の文字でも良い場合もあります。

2. 数字の直後の改行を「;」に置換

正規表現を使っていくにあたって、定義をもう一度振り返ってみましょう。

正規表現とは…指定した条件に一致する複数の文字列を、一つのパターンで表現する方法

例えば正規表現では、数字を「\d」で表すことができます。つまり「\d」を検索するとファイル内の数字すべてにマッチするわけです。という原理で、数字の直後の改行にマッチさせにいきます。

ここで使う正規表現は以下です。

正規表現意味マッチする文字の例
\dすべての数字0, 1, 2, 3, 4, 5, …
\r\n改行 

この二つを利用して、「直前に数字がある改行」を指定します。

「直前に〇〇がある△△」は以下のパターンで表現されます。

(?<=〇〇)△△

例:(?<=Mine)craft…直前に「Mine」がある「craft」
 ⇒ Minecraft(黄色下線部にマッチ)

※使用するエディタや環境によって正規表現が異なる場合があります。上記で検索がうまくいかない場合は使用環境に適した正規表現を調べてみてください。


ということで、直前に数字がある改行をまたセミコロンに一括置換します。


理想の形に一歩近づき、通し番号;表示開始時間:表示終了時間;字幕と一行に表示されるようになりました。あとは二行にまたがる字幕について、ここからは二行目だよっていう情報を残したまま同じ行におさめたいです。

3. 行頭の改行をセミコロン×2に置換

行頭は正規表現ではハット「^」で表されます。

行頭の改行「^\r\n」セミコロン2つ「;;」に置換します。

セミコロン2つはこの後エディタ上で置換するので、他の正規表現にあたってしまわない文字であれば何でも構いません。

最終的に改行したい場所に目印としてセミコロン2つを入れているイメージです。

4. すべての改行を「BR」に置換

次に、改行「\r\n」を任意の文字に置換します。

今回はBreakの意味で「BR」としました。

正規表現が有効になっている状態で普通の文字列にマッチさせたいときには、「\」を使ってエスケープする(これは正規表現ではなく文字だとエディタに伝える)必要があります。例えば先ほど使ったハット「^」の文字を置換したくて「^」とそのまま打ってしまうと、ハットの文字そのものでなくすべての行頭にマッチしてしまいます。
参考:【保存版】正規表現でエスケープが必要な文字一覧表

すべての改行をなくしたので、ズラァっと文字が並んでいる状態になりました。


ここで先ほどのセミコロン×2「;;」部分を改行「\r\n」します。

5. 行末の「BR」を削除(空白に置換)

行末は「$」で表します。

現時点で行末についているBR「BR$」は要らないのでここで消しておきます(空白に置換します)。

これで、通し番号;表示開始時間:表示終了時間;字幕(二行目がある場合は続けてBR二行目の字幕)という羅列が完成しました!

正規表現を使うのはここまでです。

6. テキストファイルで保存してエクセルで開く

srtファイルをこちゃこちゃといじってきました。ここでテキストファイル(.txt)の形式で保存します。


エクセルの[ファイル]→[開く]→[参照]から先ほどテキストファイルを保存した場所を開き、「すべてのファイル」を選択します。できたてほやほやのテキストファイルを開きます。


「コンマやタブなどの区切り文字によってフィールドごとに区切られたデータ」を選択肢、[次へ]進みます。


ここで、「区切り文字」にポチポチと仕込んできたセミコロンを使います。

画像にあるように、他にも区切り文字として使える文字はあるのですが、srtの特性上コンマやスペースは他の部分にマッチしてしまうため、セミコロンを使ったのでした。


[完了]をクリックすると、セミコロンで区切られた以下のファイルを開くことができます。これをエクセルファイル(.xlsx)で保存しておきます。


二行にまたがる字幕にたいして、改行は「BR」で表していました。これをエクセルファイル上でも改行してみましょう。

置換ウィンドウを開いて、検索する文字列には「BR」を、置換後の文字列には「Ctrl + j」を入力します(表示はされませんがエクセルではこれらのキーがが改行を示すそうです)。


これで、字幕ファイルがエクセルできれいに可視化されました♪

この形になっていることで、エクセル上で字幕の表示秒数を計算したり、文字数と照らし合わせて文字数制限を超過しているかどうかを計算したりすることができます。

最後に

コードが書けなくても、「確かこういう機能あったな…」っていう知識があるだけで、必要になったときに改めて調べて作業の効率を上げられる、ということを何度も経験しました。

今回は字幕ファイルに限って正規表現の使い方をご紹介してきましたが、冒頭でも書いたように字幕に限らず大きなデータを扱う機会のある人にとっては業務効率化に欠かせない知識なんじゃないかなと思います。

次回はがっつり訳すことに関する記事を用意していますので、ぜひまた一緒に考えていただきたいです♪

今日のおすすめ記事(*‘∀‘)

トゥゲザーしようぜ!

Comments

タイトルとURLをコピーしました