金を払わず、自分の環境を汚さずに、大量の文書を翻訳する

:::note
## Too Long; Don'wanna Read
これ使ってください:
https://github.com/konbraphat51/MassiveTranslator
:::

## はじめに
NLPの者なら100度は夢見る大量ドキュメント翻訳、したいですよね。無料Google translation APIから拒絶されるぐらいの。

しかし、払う金もないし、ローカル環境も汚したくないし、そもそもスペックがない。

活路は`Google Colaboratory`にあります。

## 作戦
単純に、Google様から無料で授かりしGPU環境を、`argos-translate`をベースに翻訳機に改造させ、翻訳させます。

### Google Colaboratoryとは？
Google社が提供している、Pythonプログラミングがネットで簡単にできるサイトです、簡単に言うと。

>[Colaboratory（略称: Colab）は、Google Research が提供するサービスです。Colab では、誰でもブラウザ上で Python を記述、実行できるため、機械学習、データ分析、教育に特に適しています。具体的には、GPU などのコンピューティング リソースに料金なしでアクセスしながら、特別な設定なしでご利用いただけるホスト型の Jupyter Notebook サービスです。](https://research.google.com/colaboratory/faq.html?hl=ja)

現状、どこの大学も、初心者学生にプログラミングを教えるときに利用しているかと思います。
最近の高校の情報1も。

### Argos Translateとは？
`Argos Open Tech`社が提供している、ローカルで機械翻訳ができる`Python`ライブラリです。

2023/12/9現在の対応言語は
>アラビア語、アゼルバイジャン語、カタロニア語、中国語、チェコ語、デンマーク語、オランダ語、英語、エスペラント語、フィンランド語、フランス語、ドイツ語、ギリシャ語、ヘブライ語、ヒンディー語、ハンガリー語、インドネシア語、アイルランド語、イタリア語、日本語、韓国語、ペルシア語、ポーランド語、ポルトガル語、ロシア語、 スロバキア語、スペイン語、スウェーデン語、トルコ語、ウクライナ語

だそうです。（https://pypi.org/project/argostranslate/ より翻訳引用）

## 実装
実装しました
https://github.com/konbraphat51/MassiveTranslator

特に特殊な技術はなかったので特筆するまでもないですが、

GPUを使わせるように命令し
```python
import os
os.environ["ARGOS_DEVICE_TYPE"]="cuda"
```

翻訳先の言語を指定できるようにし
```python
lang_to = "en" #@param {type:"string"}
```

:::note
`#@param`でなんか良い感じのUIをつけることができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/01838ec5-7377-1501-4726-22245ad904bf.png)
[ColabにUIをつける小技集](https://qiita.com/john-rocky/items/e5802cdd15dc2e34cb84
:::

翻訳の`argostranslate`と言語検出の`langdetect`ライブラリをインストール
```python
!pip install argostranslate
!pip install langdetect
```

何も考えず全言語分のモデルをダウンロード
```python
import argostranslate.package
from tqdm import tqdm

argostranslate.package.update_package_index()
available_packages = argostranslate.package.get_available_packages()

for package in tqdm(list(available_packages)):
	argostranslate.package.install_from_path(package.download())
```

`content` フォルダにある全ての`.txt`ファイルを取得
```python
files = glob("/content/*.txt")

contents = []

for file in files:
  with open(file, "r", encoding="utf-8") as f:
    content = f.read()

  contents.append((file, content))
```

翻訳
```python
translated = []

for content in tqdm(contents):
    t = translate(content[1], from_code = detect(content[1]), to_code = lang_to)

    translated.append((content[0], t))
```

翻訳済みファイルを`content/translated`フォルダに入れ、zip化してダウンロード。
```python
for t in translated:
  file_name = t[0].split("/")[-1]
  with open("/content/translated/"+file_name, "w", encoding="utf-8") as f:
    f.write(t[1])

!zip -r /content/download.zip /content/translated

from google.colab import files
files.download("/content/download.zip")
```

## 使い方
* [このnotebook](https://github.com/konbraphat51/MassiveTranslator/blob/main/Translator.ipynb)をダウンロードし、Google Colabで開きます。
* デフォルトで開かれている`content`フォルダーに翻訳したい`.txt`ファイルを全て入れます
* `lang_to`に翻訳先の[言語コード](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)を記入
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/01838ec5-7377-1501-4726-22245ad904bf.png)

* 全てのセルを実行
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602537/38ba0816-a705-8066-f6d5-777674367052.png)

* `download.zip`がダウンロードされるまで待つ

だけです。