Skip to content

Amazon Translateを使って日本語版のMarkdownファイルを作ってみる

既存のMarkdownファイル(英語)をAmazon Translateを用いて日本語版のMarkdownファイルを生成するスクリプト(調整中)

AWSドキュメント、OSSなどの公式ドキュメントが英語なので、サクッと翻訳ドキュメントを作れたらいいな、という目論見で作ってみたスクリプト。

ただし、翻訳をかけると、Markdown記法で必要なスペーシング等も消え去ってしまう(例えば、olタグに相当する「1. 」が「1。」と翻訳されてしまう、など)ので、現状は思いつく限りに後処理を入れているが、正直、まだまだ足りない。

前提条件として、すでに英語版のMarkdownファイルは存在しているものとする。 HTMLページからのMarkdown化は、特にシステム化せず、Typoraを利用して、

  1. HTMLページで対象範囲を選択
  2. HTMLページで対象範囲をコピー
  3. Typoraの新規文書へ貼り付け
  4. Typoraで保存してHTMLのスタイルごとMarkdown化

という流れを踏んでいることが多い。

前提(環境)

OS

1
2
3
4
% sw_vers
ProductName:    macOS
ProductVersion: 12.1
BuildVersion:   21C52

シェル

1
2
3
% bash --version
GNU bash, version 3.2.57(1)-release (arm64-apple-darwin21)
Copyright (C) 2007 Free Software Foundation, Inc.

処理の実行

処理の実行時は、以下のように実行する。

1
sh trans.sh ${FILENAME_TO_BE_TRANSLATED}

処理の概要

引数に渡されたMarkdownファイルをAmazon Translateで翻訳を実行し、Markdown記法が崩れた箇所をそれなりに直して、${元のファイル名}_ja.md のファイル名で、元ファイルと同一ディレクトリに保存する。

スクリプト

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash
# Split ${FILENAME} every 4,000 bytes
split -b 4000 $1 tmp

# define output filename
ORIGINAL_FILE_NAME=$(echo $1 | awk -F '.' '{print $1}')
ORIGINAL_EXTENSION=$(echo $1 | awk -F '.' '{print $2}')
OUTPUT=${ORIGINAL_FILE_NAME}_ja.${ORIGINAL_EXTENSION}

# Read the divided files in order
for filepath in tmp*; do
  TEXT=$(cat $filepath)

  # Execute 'aws translate' subcommand with property read from split file content
  aws translate translate-text --text "${TEXT}" \
    --source-language-code en \
    --target-language-code ja \
    | jq -r '.TranslatedText' >> ${OUTPUT}
done

# Post process 1 : Normalize link representation in Markdown
sed -i.bak 's/\[ /\[/g' ${OUTPUT}

# Post process 2 : Normalize link representation in Markdown
sed -i.bak 's/\] /\]/g' ${OUTPUT}

# Post process 3,4 : Normalize bulleted with Markdown
sed -i.bak 's/-/- /g' ${OUTPUT}
sed -i.bak 's/\* /\*/g' ${OUTPUT}

# Post process 5 : Normalize an ordered list with Markdown
sed -i.bak 's/\([0-9]\)。/\1. /g' ${OUTPUT}

# Post process 6,7 : Delete temporary files
rm -rf *.bak
rm -rf tmp*

課題

  • 翻訳で崩れるMarkdown記法の修正(特にTableなどは未修正)
  • Amazon Translateの1APIコールあたりの文字数制限(5,000byte)に収めるため、盲目的にsplitコマンドで、引数で与えられたファイルを4000バイトで分割している点(サブタイトルや段落、リンクなどの要素の途中でちぎれてしまう可能性を完全に無視している)
  • 翻訳元が英語、翻訳先が日本語と、決め打ちなところ

Comments