作ったもの
使い方などツール自体の詳細は技術的な内容ではないので,Qiitaには載せずこちらに書いています.
動機
DeepLは教師あり学習で学習を行っていますが,LaTeXコードを含んだ学習データがないのか,
数式を含んでいると上手く翻訳してくれないことが多々あります.
また,LaTeXコードを含んでいる英文を上手く翻訳できても,翻訳結果をコンパイルせずに読み取るのは時間がかかります.
そこで,数式を含んでいても上手く翻訳してくれて,かつコードから数式にコンパイルしてくれるツールが欲しかったので作りました.
実装内容
- 入力されたテキストから数式の部分(
$
または$$
で囲まれた部分)を検索 - 検索された数式に対して,以下の処理を行う
- 数式に
\left
と\right
,{
と}
のように,二つあって初めて機能する塊を"SWxx"で置換 - 数式に
,
または.
が含まれる場合は,それを区切りとして2つの数式に分割 - 数式の部分を"EQxx"で置換
- 数式に
- 置換後のテキストをDeepLで翻訳
- 翻訳後のテキストの"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の翻訳
- バグの修正
その他,アドバイス・不具合などあればコメントいただけると,非常に嬉しいです.