テキストエディタで字幕ファイル(.srt)を編集していて、ひとつ学んだのでメモ。
whisperで音声認識をした際、疑問形の最後に「?」を結構きちんと入れてくれる。
(まぁランダムではあるのだが)
ただこの「?」、半角なのである。
字幕的には少しでも横に伸びない方がいいから
「?」が半角であること自体には問題はないのだが
これは1文目?それが2文目?じゃああれは?
このように複数の短い文が1行で表示された場合、私は気になるんである。
「?」の後にスペースが入っていないことが。
私としては、こうあってほしい。
これは1文目? それが2文目? じゃああれは?
こういう細かい体裁にこだわってしまうのは私の悪い癖である。
でも気になるものはしょうがない。
すぐに思い付いた。
テキストエディタで「?」を「? 」に置き換えればいいじゃん。と。
そう、それが一番カンタンだ。
だがその方法にもひとつ問題がある。
改行の前の「?」の後には半角スペースを入れてほしくないのだ。
(上の例文で言うと、「じゃああれは?」の後。ここに半角スペースを入れてほしくない。)
半角「?」を全部全角の「?」にする方法も考えたが、
やはり少しでも文字数は少ない方がいいので半角で統一することにした。
まとめると、
- ?の後に半角スペースを入れたい
- ただし、改行直前の?はそのままにしたい
ということになる。
これは正規表現の出番だろう、と色々な正規表現解説ページを見て最初にやってみたのがこれ。
置換前:\?\S
置換後:\? \S
細かい説明は省くが、「\?」は「半角?」、「\S」は「すべての非空白文字」をあらわす。
シロウト目にはこれで私の思い通りの置き換えができるだろう、と思えた。
だがしかしこれで置き換えを行うと、こうなる。
これは1文目? Sれが2文目? Sゃああれは?
一文字目が「S」に。
私としては半角スペースを「挿入」して欲しかったのだが、「置換」されてしまったのだ。
(なんでこれで1文字目がSになってしまうのか、未だによく分からない。)
そこから色々なページを参照し試行錯誤を繰り返し、
いっときは諦めて全ての半角?のあとに半角スペースを挿入してから
改行前の半角スペースを削除したりしていたのだが
(こっちの方は楽にできた)
そんな二度手間ではなく、一回の置き換えで挿入可能な魔法の正規表現を見つけた。
置換前:(\?)(\S)
置換後:\1 \2
うわーめっちゃシンプル。
半角()でグループ化できる、ということだ。
\1 はひとつ目のグループ、\2 はふたつ目のグループ、を指す。
ひとつ目のグループと、ふたつ目のグループの間に半角スペースを入れる、ということである。
ちなみに参考にさせていただいたのは以下
試したら以下でもいけた。
置換前:\?(\S)
置換後:\? \1
正規表現、奥深い世界である。
追記:2023年3月2日
さらにバージョンアップしたものを記事にした。
whisper、字幕ファイルに関する記事はこちら
whisperの ちょうどいい 精度
最終更新:2023年3月2日
投稿日:2022年11月29日
初出:2022年11月17日
0 件のコメント:
コメントを投稿