前回の続きです。
ダウンロードしてきた、英語の字幕データは下のような感じです。
00:00:16,727 --> 00:00:19,230
He just looks
like another
ball player to me.
これをDeepLで訳すと
00:00:16,727 --> 00:00:19,230
彼はただ見ているだけ
別のように
私にとってのボールプレーヤー。
こんな感じになってしまいます。
これでは意味が分かりません
しかし、元の英語を下のようにすると
00:00:16,727 --> 00:00:19,230
He just looks like another ball player to me.
00:00:16,727 --> 00:00:19,230
彼は私には別の球児にしか見えない。
と翻訳してきます。
見てわかるようにこちらのほうが、意味が分かりやすいと思います。
つまり
英語の字幕は途中で改行しているため
翻訳ツールを使うと1行ずつ翻訳するので
意味が分かりにくくなるということです。
この複数行になっている部分を1行にして翻訳すると
わかりやすい日本語になりやすいということです。
ただし、文が長くなると日本語の字幕も長くなってしまい
画面上ではみ出してしまうことがあるので
長い分は適当なところで改行する必要が出てきます。
この日本語の長い分を開業する作業は1話の中に
それほどないので手作業でいいのですが
英文を1行にする作業はかなりの手間がかかります。
この超人ハルクの場合1話当たりセリフ以外のデータも含め約3000行の
データがあります。
これをひとつづつ手でするには根気がいるので
下のようなエクセルのマクロを作ってみました。
なお、表示幅が小さいので改行がおかしくなっています。
コピーしてメモ帳などに張り付けていただくと
見やすくなると思います。
Sub Sample1()
'=======================================================================================
'
' 途中で改行しているデータを1行にして出力する
'
'=======================================================================================
'===============================
' 使用変数の設定
'===============================
Dim buf As String ' 入力ファイル用のワークエリア
Dim buf2 As String ' 出力ファイル用のワークエリア
Dim filename_w As String ' 出力ファイル名用のワークエリア
'===============================
' 入力ファイルを開きます
'===============================
Open Cells(2, 2) For Input As #1 ' 入力ファイル名をcells(2,2)に入れます。つまりB2のセルに
'===============================
' 出力ファイル名を編集します
'===============================
filename_w = Mid(Cells(2, 2), 1, Len(Cells(2, 2)) - 4) & "_out" & Right(Cells(2, 2), 4) ' 入力したファイル名の後ろに_outを付加する
'===============================
' 出力ファイルを開きます
'===============================
Open filename_w For Output As #2
'===============================
' メイン処理出力
'===============================
buf2 = "" ' 出力用ワークエリアの初期化
Do Until EOF(1) ' データがなくなるまで処理を繰り返す
Line Input #1, buf ' 入力データを読み込みます
If IsNumeric(Mid(buf, 1, 1)) = True And Len(buf) = 1 Then ' 文字長が1で数字の時
If Len(buf2) > 0 Then ' 出力ワークエリアに値が入っていたら出力します。
Print #2, buf2
buf2 = ""
End If
Print #2, buf ' 読み込んだデータをそのまま出力します。
Else
If IsNumeric(Mid(buf, 1, 2)) = True And Len(buf) = 2 Then ' 文字長が2で数字の時
If Len(buf2) > 0 Then ' 出力ワークエリアに値が入っていたら出力します。
Print #2, buf2
buf2 = ""
End If
Print #2, buf ' 読み込んだデータをそのまま出力します。
Else
If IsNumeric(Mid(buf, 1, 3)) = True And Len(buf) = 3 Then ' 文字長が3で数字の時
If Len(buf2) > 0 Then ' 出力ワークエリアに値が入っていたら出力します。
Print #2, buf2
buf2 = ""
End If
Print #2, buf ' 読み込んだデータをそのまま出力します。
Else
If IsNumeric(Mid(buf, 1, 4)) = True And Len(buf) = 4 Then ' 文字長が4で数字の時
If Len(buf2) > 0 Then ' 出力ワークエリアに値が入っていたら出力します。
Print #2, buf2
buf2 = ""
End If
Print #2, buf ' 読み込んだデータをそのまま出力します。
Else
If Len(buf) = 0 Then ' 読み込んだデータがNULLの時
If Len(buf2) > 0 Then ' 出力ワークエリアに値が入っていたら出力します。
Print #2, buf2
buf2 = ""
End If
Print #2, buf ' 読み込んだデータをそのまま出力します。
Else
If InStr(1, buf, "-->") = 0 Then ' 読み込んだデータに"-->"が含まれないとき
buf2 = buf2 & " " & buf ' 出力用ワークエリアにあるデータの後ろに空白を入れた後、入力ワークエリアのデータを加えます
If Right(buf, 1) = "." Or Right(buf, 1) = "?" Or Right(buf, 1) = ")" Then ' 読み込んだデータの最後の文字が「.」「?」「)」なら出力用ワークエリアを出力します。
Print #2, buf2
buf2 = ""
End If
Else ' 読み込んだデータに"-->"が含まれていたとき
Print #2, buf ' 読み込んだデータをそのまま出力します。
End If
End If
End If
End If
End If
End If
Loop
Close #1
Close #2
End Sub