流亡黯道(Path of Exile)許多流派(Build)資料都是英文,若直接交由 NotebookLM 分析後,常會出現翻譯出來的技能、物品或天賦名稱,讓你完全不知道POE繁體中文版中對應的名稱是什麼。因此,我利用 AI 寫了一個 Python 程式,將 POECharm 中的繁體中文翻譯 CSV 檔轉換為 Markdown (.md) 格式,並加入有利於AI檢索增強生成(RAG)的結構描述。只要將此三個檔案.md檔拉入你的NotebookLM,就能有效改善AI自行亂翻一通的問題了!
下載: POE繁體中文與英文對照表 for NotebookLM (請解壓縮後,再上傳至NotebookLM或其他AI)
※ 翻譯轉換來源於「Chuanhsing/POECharm2」/Data/Translate/zh-rTW 目錄中的csv檔
如果您想要自行進行合併及轉換,原始碼如下,存成.py檔,在PoeCharm2的/Data/Translate/zh-rTW目錄下執行即可!
import os
import glob
import csv
current_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(current_dir)
FILE_DESCRIPTIONS = {
"Flask_tag.csv": "藥劑 (Flask) 詞條標籤與分類翻譯",
"Gems_data.txt.csv": "技能寶石 (Gem) 核心數值與機制資料翻譯",
"Gems_tag.csv": "技能寶石 (Gem) 標籤分類翻譯",
"GUI.csv": "使用者介面 (GUI) 與系統操作文字翻譯",
"Items_Accessories.txt.csv": "飾品 (Accessories) 詞條 - 包含戒指、護身符、腰帶",
"Items_Armour.txt.csv": "防具 (Armour) 詞條 - 包含頭盔、胸甲、手套、鞋子、盾牌",
"Items_Gems.txt.csv": "技能寶石 (Gems) 作為物品掉落或顯示時的名稱翻譯",
"Items_Jewels.txt.csv": "珠寶 (Jewels) 與星團珠寶 (Cluster Jewels) 詞條翻譯",
"Items_Oils.csv": "聖油 (Oils) 類物品與塗油 (Anoint) 系統翻譯",
"Items_Weapons.txt.csv": "武器 (Weapons) 詞條 - 包含單雙手近戰武器、弓、法杖",
"Monsters.csv": "怪物 (Monsters) 名稱、特殊詞綴與能力翻譯",
"passiveTree.csv": "天賦樹 (Passive Tree) 節點名稱與整體結構翻譯",
"statDescriptions.csv": "屬性詞綴詳細說明 (Stat Descriptions) 翻譯",
"stats_words_prefix.csv": "物品詞綴之前綴 (Prefix) 單字與規則翻譯",
"stats_words_suffix.csv": "物品詞綴之後綴 (Suffix) 單字與規則翻譯",
"tree_dn.csv": "天賦樹節點顯示名稱 (Tree Display Names) 翻譯",
"tree_sd.csv": "天賦樹節點屬性描述 (Tree Stat Descriptions) 翻譯",
"Uniques.txt.csv": "傳奇物品 (Unique Items) 專屬名稱與特殊詞綴翻譯",
"Z.csv": "其他未分類或系統底層的雜項 (Miscellaneous) 文字翻譯",
}
MAX_LINES_PER_FILE = 30000
file_part = 1
current_lines = 0
def open_new_file(part_num):
filename = f"POE繁體中文與英文對照表_Part{part_num}.md"
f = open(filename, "w", encoding="utf-8")
f.write(f"# Path of Exile (POE) 繁體中文與英文對照表 (Part {part_num})\n\n")
return f, filename
csv_files = sorted(glob.glob("*.csv"))
if not csv_files:
print("當前目錄找不到任何 .csv 檔案。")
exit(1)
out, out_name = open_new_file(file_part)
print(f"建立檔案: {out_name}")
for fname in csv_files:
desc = FILE_DESCRIPTIONS.get(fname, "未分類翻譯資料")
out.write(f"## {fname}:{desc}\n\n")
current_lines += 2
try:
with open(fname, "r", encoding="utf-8-sig") as f:
reader = csv.reader(f)
headers = next(reader, None)
if headers:
clean_headers = [str(h).replace('\n', ' ') for h in headers]
header_md = "| " + " | ".join(clean_headers) + " |\n|" + "|".join(["---"] * len(headers)) + "|\n"
out.write(header_md)
current_lines += 2
for row in reader:
if any(cell.strip() for cell in row):
clean_row = [str(cell).replace('\n', '<br>').replace('|', '\|') for cell in row]
out.write("| " + " | ".join(clean_row) + " |\n")
current_lines += 1
# 達到行數上限,進行切檔
if current_lines >= MAX_LINES_PER_FILE:
out.close()
file_part += 1
out, out_name = open_new_file(file_part)
print(f"建立檔案: {out_name}")
current_lines = 0
# 換檔後重新寫入次標題與表頭,防止表格結構斷裂
out.write(f"## {fname}:{desc} (接續)\n\n")
if headers:
out.write(header_md)
current_lines += 4
print(f"✓ 成功轉換: {fname}")
except Exception as e:
out.write(f"> 讀取錯誤: {e}\n\n")
print(f"✗ 轉換失敗: {fname} 錯誤: {e}")
if not out.closed:
out.close()
print(f"\n✅ 轉換完成!共生成 {file_part} 個檔案。請將這些 Part 檔案全數上傳至 NotebookLM。")