6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ZOZOテクノロジーズ #5Advent Calendar 2019

Day 2

英語論文をフォーマットして翻訳する方法

Last updated at Posted at 2019-12-01

自己紹介

こんにちは,ZOZOテクノロジーズの内定者さっとです.
普段は,インフラやサーバサイドを主に勉強していますが,最近はReactを触ったりしています.

※本記事はZOZOテクノロジーズ#5の2日目です.

概要(4行)

  • 電子媒体の英語論文をGoogle翻訳を使って翻訳したい
  • そのままコピペすると変な改行が入ってくるため上手く翻訳できない
  • 簡単に翻訳できる形にフォーマットしてくれるツールを作る!
  • フォーマットした英文を一気に翻訳してみる

やりたいこと

ツーカラムのよくある英語論文

1. Introduction
hogehoge. hogehogehoge. hogehogehogehoge.hoge-
hoge.hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehogehoge.

2. Related Works
hogehoge. hogehogehoge. hogehogehogehoge.hoge.
hoge.hogehogehoge.hogehogehogehogehogehoge-
hogehogehogehogehogehogehogehogehogehoge.

これでは,行末に改行が入っているため,
Google翻訳にそのままコピペすると文章の変な位置で区切れてしまい上手く翻訳してくれません.

フォーマットした後の文章

1. Introduction
 hogehoge. hogehogehoge. hogehogehogehoge.hogehoge.hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehogehoge.

2. Related Works
 hogehoge. hogehogehoge. hogehogehogehoge.hoge. hoge.hogehogehoge.hogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehoge.

これをGoogle翻訳に貼り付ければきっと上手く翻訳してくれるはず

Rubyを使ったフォーマットプログラム

プログラムはGitHubに上げています.
環境構築方法や使い方も詳しく書いているのでやってみたい方はアクセスしてください.

事前準備

  • フォーマットしたい論文の文章を事前にreport.txtに保存しておきます.
report.txt
  
1. Introduction
hogehoge. hogehogehoge. hogehogehogehoge.hoge-
hoge.hogehogehogehogehogehogehogehogehoge,
hogehogehogehogehogehogehogehogehogehoge.

2. Related Works
hogehoge. hogehogehoge. hogehogehogehoge.hoge.
hoge.hogehogehoge.hogehogehogehogehogehoge-
hogehogehogehogehogehogehogehogehogehoge.

メインプログラム

  • プログラムはreport.txtを一行一行読み込んでいます.
  • 読み込んだ行はlineに代入されます.
  • その行はセクション又は,サブセクションなのか?文章なのかを判定し,フォーマットを行います.
  • フォーマットした行はreportに結合し文章を構築していきます.
main.rb
begin
  report = ""
  # ファイル読み込み
  File.open('report.txt') do |file|
    file.each_line do |line|
      # 読み込んだ行がsectionやsubsectionだったら
      if line.match(/^[0-9]+.*$/)
        report += line
        next
      # 空行があった場合
      elsif line.match(/^\s*$/)
        report += "\n" + line
        next
      end
      # 文字列の最後が-なら-を消して行を結合
      if report[-1] == "-"
        report = report.chomp("-") + line.chomp
        next
      end
      report += " " + line.chomp
    end
    puts report
  end
  # ファイル書き込み
  File.open("format-report.txt", "w") do |f|
    f.puts(report)
  end
# 例外
rescue SystemCallError => e
  puts %Q(class=[#{e.class}] message=[#{e.message}])
rescue IOError => e
  puts %Q(class=[#{e.class}] message=[#{e.message}])
end

セクション又はサブセクションを判定する

セクション又はサブセクションは以下のように表現されることが多いと思います.

1. hogehoge
1.2. fugafuga 

正規表現を使って行頭が数字とピリオドで構成されているかをチェックして判断します.

# 読み込んだ行がsectionやsubsectionだったら
if line.match(/^[0-9]+.*$/)
  report += line
  next

この条件に引っかかった場合,行の末尾の改行を除去せずそのままreportに結合します.

空行があった場合

正規表現でタブを含む空白全般は\sで表します.

# 空行があった場合
elsif line.match(/^\s*$/)
  report += "\n" + line
  next
end

行が空白だった場合は,改行してから空白を入れます.
また,空白の末尾にも改行があるので,つまり

hogehogehoge改行
空白空白空白改行
← 次の行からここに結合

といったようになります.

行末が-だった場合

英語の論文ではよく以下のような行を見ることがあるかと思います.

hogehoge hogehoge hogehoge ho-
gehoge.

そのまま改行すると単語が崩れてしまうので,ハイフンをいれて次の行に続くことを表しています.

これを考慮するためにプログラムでは行末に"-"があるかないか判断しています.

# 文字列の最後が-なら-を消して行を結合
if report[-1] == "-"
  report = report.chomp("-") + line.chomp
  next
end

ハイフンがある場合は,ハイフンを消して,さらに,行の末尾の改行を消して結合します.

それ以外の行

普通の文章であれば,先頭に空白を入れて,行末の改行を消して結合します.

report += " " + line.chomp

実行

プログラムを実行してみます.
文章量によって多少時間がかかるかもしれません.

$ ruby main.rb

フォーマットされた文章がformat-report.txt出力されます.

format-report.txt
  
1. Introduction
 hogehoge. hogehogehoge. hogehogehogehoge.hogehoge.hogehogehogehogehogehogehogehogehoge, hogehogehogehogehogehogehogehogehogehoge.

2. Related Works
 hogehoge. hogehogehoge. hogehogehogehoge.hoge. hoge.hogehogehoge.hogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehoge.

こちらをGoogle翻訳に貼り付ければ上手く翻訳してくれそうですね.

ちなみに,以前にGoogle翻訳APIを無料で作る方法という記事を書いているので,
これと連携すればシームレスに翻訳できるかもしれません.

Google翻訳でまとめて翻訳 (追記)

論文フォーマットを友人に教えたところ,
Googleドキュメント翻訳を使って便利そうに翻訳していたので,その方法を紹介したいと思います.

Googleドキュメント翻訳

様々な言語で書かれたドキュメントを翻訳してくれるサービスです.
字数制限の上限が一般的なGoogle翻訳に比べ大きいので,一気にたくさん翻訳できると思います.

Googleドキュメント翻訳

フォーマットしたファイルを翻訳

スクリーンショット 2019-12-11 16.50.30.png
  • ドキュメントページに飛び,format-report.txtを貼り付ける
スクリーンショット 2019-12-11 16.51.08.png
  • 最後に翻訳ボタンを押すと,翻訳してくれます.

途中で,翻訳されず,英語が返ってくる場合は,文字数制限に引っかかっているので
切り取るなどして調節してください.

おわりに

今回は,Rubyを使って英語論文をGoogle翻訳へ貼り付けるためにフォーマットするツールを紹介しました.

本来はこんなツール使わずに読めることが大事ですが...

こちらのツールはGitHubで公開しているので,興味ある方はぜひ使ってみてくださいね!
https://github.com/sattosan/report-formattaro

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?