テキスト整形ツール1号、仕様について
takahrt.icon
まずは、whisper.cppから書き出したテキストのサンプルを掲載します
code:sample.txt
00:02:59.000 --> 00:03:08.000 ワークフローで言うと、ホームの一番下に「デイリー」があって、その兄弟項目にプロジェクトがあるような感じですか?
00:03:08.000 --> 00:03:10.000 そういう感じですね。
ブラケットに囲まれたタイムコードと、それに続いて空白文字があるようです。続いて本文があります。
タイムコードと空白文字は除いた、本文部分の文字数を数えてください。
私の調べでは、1行目が55文字
2行目が10文字になります。
文字量によってこの後の処理が変わります
本文が19文字以上の処理
先頭のタイムコードと、空白文字を削除してください
行頭に、タブ文字を1文字加えてください
本文が18文字以下の処理
先頭のタイムコードと、空白文字を削除してください
行頭に、タブ文字を1文字加えてください
行末に、ブラケットで前後を囲んだ「タイムコードの開始値」を付与してください。ただしコンマ000秒は付与しないものとします。
結果のサンプルです
code:effect.txt
ワークフローで言うと、ホームの一番下に「デイリー」があって、その兄弟項目にプロジェクトがあるような感じですか?
そういう感じですね。00:03:08.
上記の結果サンプルについて
画面では見えませんが、行頭にはタブ文字が付いています
1行目は、本文が19文字以上の処理
2行目、"そういう感じですね。"は10文字なので、「本文が18文字以下の処理」がされて、文末に規定の編集をしたタイムコードが付いています
https://gyazo.com/cf81665e75b7e6cabf7f1d49a6a3366b
タブ、空白などの特殊文字が見える組版ソフトでのサンプルはこちらになります。
可能であればPythonで作っていただければ、変更したくなったとき私の方である程度はリプレース可能ですので、助かります。
こちらが可能になれば、要所要所タイムコードを参照して音声を校正できて、そして組版のほうでもさほどジャマにならないテキストになると思われます。
どうかよろしくお願いします。以上です。
takahrt.icon追伸
書き忘れましたがmacのターミナルから操作できればと思います。guiは作っていただかなくてもだいじょうぶです
rashita.icon
作れるのは今すぐにでも作りはじめられますが、まず完成フォーマットを定めてから(epubなのかpdfなのか)の方が手戻りが少なくなりそうな予感があります。
takahrt.icon あ、そうでしたか? まだプレーンテキスト編集の段階なので手戻りが起こるとは考えてなかったです。
もしかしてepubだとHTMLのコメントアウトのように出したくないものを隠すことができるという事でしょうか?
epubは自分で書いたことがないものですから…
takahrt.icon
それでは「テキスト整形ツール」は、書籍のフォーマットを定めるまで保留ということで、お願いします。
rashita.icon
ちょっと空き時間が空いたので、ぱぱっと書いてしまいました(つい書いてしまった)
テキストファイルが置いてあるフォルダに以下のコードのファイルを置いてPython(たぶん3でないと動かない)で実行くだされば変換されたテキストファイルができるかと思います。
ただし、2行だけのサンプルファイルでしか試していないので、4行以上でちゃんと動くかは未検証です。
code:sample.py
# whisperAdjuster.py
#!/usr/bin/env python3
# coding: utf-8
import sys
import re
args = sys.argv #コマンドライン引数で処理したいファイル名を受け取る
# ex.) python whisperAdjuster.py hoge.txt
if len(args) <2:
print("処理するファイル名を指定してください。以下がサンプルです\n")
print("python whisperAdjuster.py hoge.txt")
print("\nファイル名を指定して実行すると adjust_hoge.txt が作成されます")
exit()
samplePath = args1
with open(samplePath) as f:
l = f.readlines()
tempBody = []
for line in l:
reg = r"(\.*\) (.*)" #正規表現でタイムコードと本文を抽出する
#このとき、間に挟まされている空白文字を指定しないことで削除の代わりにしている
m = re.match(reg,line) #正規表現の実行
if m:
#print(m.group(1)) 結果を確かめたいときはこの行をコメントアウトする
newText = "\t" + m.group(2) #m.group(2)に本文が入っている
if (len(m.group(2)) < 19):
regCam = r"\.(.*)\]"
newText = newText + re.sub(regCam,".]",m.group(1)) #m.group(1)に本文が入っている
else:
newText = line
tempBody.append(newText)
afterfilepath = "adjust_" + samplePath
with open(afterfilepath,mode="w") as f:
f.writelines("\n".join(tempBody))
takahrt.icon お忙しいのにありがとうございます。
takahrt.icon ハイ!動作を確認できました。
ソースにコメントまでつけてくださり大変ありがたいです
おかげさまで、これでだいたいの全体量が把握できると思います(紙でいうところの全XXXページ)