Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

使用chatGPT進行電子書翻譯(Docker版本教學)

內容目錄

使用chatGPT進行電子書翻譯(Docker版本教學)

偶然間看到一個很有用的專案,作者使用chatGPT來翻譯電子書。原理是解析電子書(epub),將文字丟給GPT進行翻譯再回傳,這作法對於有在使用電子書的使用者真的滿方便,不用再硬啃原文資料囉(?)。
專案位置 作者為:yihong0618

使用方式

首先準備好openAI的key,原作者提供的使用法以下:

# 如果你想快速测一下
python3 make_book.py --book_name test_books/animal_farm.epub --openai_key ${openai_key} --no_limit --test --language "Simplified Chinese"
# or do it
python3 make_book.py --book_name test_books/animal_farm.epub --openai_key ${openai_key} --language "Simplified Chinese"
# or 用 gpt3 模型
export OPENAI_API_KEY=${your_api_key}
python3 make_book.py --book_name test_books/animal_farm.epub --model gpt3 --no_limit --language "Simplified Chinese"

快速使用的話就直接輸入,預設會使用gpt-3.5-turbo模型

python3 make_book.py --book_name test_books/animal_farm.epub --openai_key ${openai_key} --no_limit --test --language "Simplified Chinese"

如果想降低版本使用gpt3,參數就換成--model gpt3

# or 用 gpt3 模型
export OPENAI_API_KEY=${your_api_key}
python3 make_book.py --book_name test_books/animal_farm.epub --model gpt3 --no_limit --language "Simplified Chinese"

裡面提到一些重點

  • 記得先安裝套件: pip install -r requirements.txt
  • OpenAI API key,允許多個key,減少api卡住的狀況,寫法為(xxx,xxx,xxx)
  • animal_farm.epub 是預設的範例電子書,大概5分鐘可以跑完
  • 如果是非付費會員可以使用 --test 參數 (雖然我不確定差異為何)
  • 可以設定目標語言,參數為--language "Language"如果目標為繁體中文,就是 --language "Traditional Chinese" ,支援的語言可以參考utils.py.
  • 加了 --proxy 參數,例如在本機端測試時可以使用代理,像是--proxy http://127.0.0.1:7890
  • --resume 參數,可以手動中斷後,加入命令繼續執行(這我還沒測試)

Docker化

因為我很怕python環境污染XDDD,已經很久沒裝python了,於是將整格專案使用Docker來跑
DockerFile如下

FROM python:3.8

WORKDIR /app

COPY requirements.txt requirements.txt

RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ENV OPENAI_API_KEY=${open_ai_key}

COPY . .

CMD ["python3", "make_book.py", "--book_name", "test_books/name.epub", "--test", "--language" , "Traditional Chinese"]

因為習慣使用docker-compose,所以順道加上了這設定,並且新增一個輸出資料夾export

version: "3"

services:
  book:
    build: .
    container_name: book
    volumes:
      - ./export:/app/export

輸出

因為輸出位置有點調整,我將程式碼稍做修改,讓翻譯後的檔案可以輸出到export資料夾中

def make_bilingual_book(self):
....
...
..
name = self.epub_name.split(".")[0]
            name = self.epub_name.split("/")[1] #將檔名分離出來
            print(name)
            epub.write_epub(f"export/{name}_bilingual.epub", new_book, {})

使用心得

直接看log吧,實際上他會輸出成檔案,將每個段落原文並排。以結果來說堪用,但用在小說還真是不確定翻譯得好不好(炸),而且已經叫他輸出為繁體中文,但還是會有些簡中出現,但這是一個很有潛力的專案,期待啊!

book  | またそこの家の美しいのは夜だった。寺町通はいったいに賑
book  | 
book  |  かな通りで――と言って感じは東京や大阪よりはずっと澄んでいるが――飾窓の光がお
book  | びただしく街路へ流れ出ている。それがどうしたわけかその店頭の周囲だけが妙に暗いの
book  | だ。もともと片方は暗い二条通に接している街角になっているので、暗いのは当然であっ
book  | が、その隣家が寺町通にある家にもかかわらず暗かったのが瞭然
book  | 
book  |  しない。しかしその家が暗くなかったら、あんなにも私を誘惑するには至らなかったと
book  | 思う。もう一つはその家の打ち出した廂
book  | 
book  |  なのだが、その廂が眼深
book  | 
book  |  に冠った帽子の廂のように――これは形容というよりも、「おや、あそこの店は帽子の
book  | 廂をやけに下げているぞ」と思わせるほどなので、廂の上はこれも真暗なのだ。そう周囲
book  | 真暗なため、店頭に点
book  | 
book  |  けられた幾つもの電燈が驟雨
book  | 
book  |  のように浴びせかける絢爛
book  | 
book  |  は、周囲の何者にも奪われることなく、ほしいままにも美しい眺めが照らし出されてい
book  | るのだ。裸の電燈が細長い螺旋棒
book  | 
book  |  をきりきり眼の中へ刺し込んでくる往来に立って、また近所にある鎰屋
book  | 
book  |  の二階の硝子
book  | 
book  |  窓をすかして眺めたこの果物店の眺めほど、その時どきの私を興がらせたものは寺町の
book  | 中でも稀
book  | 
book  |  だった。
book  | 
book  | 
book  | 
book  | 再次看那房屋的美,真正的美在夜晚。寺町通是一条非常繁华的街道,虽然感觉上没有东京
book  | 或大阪那么喧闹,但橱窗的灯光仍然不断地流向街道。但不知道为什么,店铺周围却显得异
book  | 常黑暗。虽然原本就是位于连接到暗淡的二条通的街角,所以显得很暗很正常,但即使隔壁
book  | 邻居与寺町通的房屋相连,它也很暗。然而,如果那个房屋不这么暗,我不认为它会诱惑我
book  | 到这个程度。还有一个是该房屋的突口,它像深度深的帽檐一样,不仅仅是方便而已,它的
book  | 顶部也是漆黑一片。因为周围都很黑暗,店铺的许多电灯就像暴雨一样洒向周围,绚丽夺目
book  | 的景象没有被任何东西所掠夺,自由自在地照亮了美景。站在露天的电灯下,长长的螺旋杆
book  | 直刺眼睛,俯视着这家水果店,就像从离这里很近的旅馆二楼的窗户里看到的那样,这些景
book  | 象在寺町中是罕见的,总能让我兴奋不已。

限制

注意他使用的檔案是電子書(epub)非PDF,如果想將手上的資料翻譯,建議要進行標準化的epub轉換,一般轉檔很容易轉成有問題的epub唷。

注意

GPT的翻譯準確度見仁見智,我自己用chrome查資料也很常用機翻的擴充套件,機翻的確有其限制,用詞或上下文語意不一定很完美,建議翻譯後的電子書自己參考就好,若有其他對外用途要考量版權以及翻譯品質唷。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *