LoginSignup
12
6

More than 1 year has passed since last update.

数式を含む英文を翻訳するツールを作った話

Last updated at Posted at 2022-06-26

作ったもの

DeEqL --- 数式を含む英文を翻訳するツール

使い方などツール自体の詳細は技術的な内容ではないので,Qiitaには載せずこちらに書いています.

動機

DeepLは教師あり学習で学習を行っていますが,LaTeXコードを含んだ学習データがないのか,
数式を含んでいると上手く翻訳してくれないことが多々あります.
また,LaTeXコードを含んでいる英文を上手く翻訳できても,翻訳結果をコンパイルせずに読み取るのは時間がかかります.
そこで,数式を含んでいても上手く翻訳してくれて,かつコードから数式にコンパイルしてくれるツールが欲しかったので作りました.

実装内容

  1. 入力されたテキストから数式の部分($または$$で囲まれた部分)を検索
  2. 検索された数式に対して,以下の処理を行う
    1. 数式に\left\right{}のように,二つあって初めて機能する塊を"SWxx"で置換
    2. 数式に,または.が含まれる場合は,それを区切りとして2つの数式に分割
    3. 数式の部分を"EQxx"で置換
  3. 置換後のテキストをDeepLで翻訳
  4. 翻訳後のテキストの"SWxx"と"EQxx"の部分を元に戻す

「2.3 EQxxへの置換」について

冒頭で述べたように,DeepLは数式を含んでいると上手く翻訳してくれません.
そこで,数式を一度"EQxx"のように記号で置き換えることで,避けるようにします.
DeepLは大文字だけの単語を固有名詞と捉えるのか,英語のまま訳してくれます.

「2.2 ,または.の前後で分割」について

数式内に,または.がある状態で,その数式を記号として置き換えてしまうと,
文章の区切りである,または.が消えてしまい,誤訳に繋がりかねません.
例えば,以下の文です.

$a, b$ denote $A$ and $B$, respectively.

この文の数式を"EQxx"によって置換すると

EQ00 denote EQ01 and EQ02, respectively.

と置き換えられるので,文法の間違いが発生してしまいます.場合によっては,この文法間違いが誤訳に繋がってしまいます.そこで,,または.の前後で分割すると,

EQ00, EQ01 denote EQ02 and EQ03, respectively.

となり,正しく翻訳できます.

「2.1 SWxxへの置換」について

\left\right{}の間に,があると,それぞれが別々の数式として分割されてしまいます.例えば,

$a_{i,j} denotes an element of matrix $A$.

の場合,

$a_{i$, $j}$ denotes an element of matrix $A$.

と分割されます.ここで,{}は数式内にペアとして存在する必要があるため,エラーが生じてしまいます.
そこで,それらをSWxxの形で置き換えると,

$a_SW00 denotes an element of matrix $A$.

となり,この置換の後であれば「2.2 ,または.の前後で分割」を行ってもエラーを生じることはありません.

今後の課題

  • 数式を含むPDFの翻訳
  • バグの修正

その他,アドバイス・不具合などあればコメントいただけると,非常に嬉しいです.

参考にしたサイト

関連記事・ツール

ツール

ツール作成記録

ツール集・組み合わせ

12
6
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
12
6