Files
Document_Translator/add_korean_translations.py
2025-09-03 15:07:34 +08:00

196 lines
8.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
手動補充韓文翻譯快取並重新生成翻譯檔案
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
# 設定編碼
sys.stdout.reconfigure(encoding='utf-8')
from pathlib import Path
from app import create_app
def add_korean_translations():
"""手動補充韓文翻譯快取"""
print("=" * 80)
print("手動補充韓文翻譯快取")
print("目標語言: 韓文 (ko)")
print("=" * 80)
# 關鍵的中文->韓文翻譯對照 (基於常見技術用語翻譯)
korean_translations = [
{
'source_text': '與 WB inline 串線DB→WB、時效快支援 Sn/Au 晶片\n最小可支援9mil晶粒\n支援EAP管控',
'translated_text': 'WB 인라인 연결(DB→WB), 처리 시간 단축; Sn/Au 칩 지원\n최소 9mil 다이 지원\nEAP 제어 지원'
},
{
'source_text': '空洞表現穩定、尺寸/厚度範圍廣\n最小可支援9mil晶粒\n支援EAP管控',
'translated_text': '공극 표현 안정, 크기/두께 범위 넓음\n최소 9mil 다이 지원\nEAP 제어 지원'
},
{
'source_text': 'DB到焊接爐為串機、時效快減少人員碰觸之風險\n支援Ag/Au晶片\n支援含氧量監控\n支援EAP',
'translated_text': 'DB에서 용접로까지 인라인 연결, 처리 시간 단축, 인적 접촉 위험 감소\nAg/Au 칩 지원\n산소 함량 모니터링 지원\nEAP 지원'
},
{
'source_text': '爐後氣孔少,提升焊接接縫均勻度、強度高、氣密性好\n支援Ag/Au晶片\n支援含氧量監控\n支援EAP',
'translated_text': '로 후 기공 적음, 용접 이음부 균일도 향상, 강도 높음, 기밀성 양호\nAg/Au 칩 지원\n산소 함량 모니터링 지원\nEAP 지원'
},
{
'source_text': 'Wire size: 0.8 mil ~ 2.4 mil量產成熟\n最薄 Al bond pad 1.3 μm最小 bond pad size 55 × 55 μm\n支援EAP管控',
'translated_text': '와이어 크기: 0.8 mil ~ 2.4 mil(양산 성숙)\n최박 Al 본드 패드 1.3 μm; 최소 본드 패드 크기 55 × 55 μm\nEAP 제어 지원'
},
{
'source_text': '1.全自動貼片減少人為作業的風險\n2.機台封閉式設計及有HEPA機構能減少落塵造成的異常風險\n3.自動讀取晶片刻號及貼晶片條碼\n支援EAP管控',
'translated_text': '1.전자동 부착으로 인적 작업 위험 감소\n2.장비 밀폐식 설계 및 HEPA 기구로 낙진 이상 위험 감소\n3.칩 각인 및 칩 바코드 자동 판독\nEAP 제어 지원'
},
{
'source_text': '1.晶片切割後chipping的品質檢驗\n2.晶片上的缺點檢驗',
'translated_text': '1.칩 절단 후 치핑 품질 검사\n2.칩상 결함 검사'
},
# 單字元翻譯
{
'source_text': '',
'translated_text': '높음'
},
{
'source_text': '',
'translated_text': '낮음'
},
{
'source_text': '',
'translated_text': '중간'
},
# 其他重要片段
{
'source_text': '自動串接DB 後直上 WB免批次搬運。\n快速交付:連線作業縮短 Cycle Time。',
'translated_text': '자동 연결: DB 후 직접 WB 연결, 배치 운반 생략.\n빠른 납품: 연결 작업으로 사이클 타임 단축.'
},
{
'source_text': 'Solder\nDB+WB',
'translated_text': '솔더\nDB+WB'
},
{
'source_text': '晶粒尺寸/pad尺寸需配合規格\n高溫製程,需確認晶片承受狀況',
'translated_text': '다이 크기/패드 크기는 사양에 맞춰야 함\n고온 공정, 칩 내성 확인 필요'
}
]
app = create_app()
with app.app_context():
from app.models.cache import TranslationCache
from app import db
source_language = 'zh'
target_language = 'ko'
print(f"準備添加 {len(korean_translations)} 筆韓文翻譯...")
print("-" * 60)
added_count = 0
updated_count = 0
for i, trans in enumerate(korean_translations, 1):
source_text = trans['source_text']
translated_text = trans['translated_text']
print(f"\n{i:2d}. 處理翻譯:")
print(f" 原文: {repr(source_text[:40])}...")
print(f" 韓文: {repr(translated_text[:40])}...")
# 檢查是否已存在
existing = TranslationCache.get_translation(source_text, source_language, target_language)
if existing:
if existing.strip() != translated_text.strip():
print(f" 🔄 更新現有翻譯")
TranslationCache.save_translation(source_text, source_language, target_language, translated_text)
updated_count += 1
else:
print(f" ⚠️ 翻譯已存在且相同")
else:
print(f" ✅ 新增翻譯記錄")
TranslationCache.save_translation(source_text, source_language, target_language, translated_text)
added_count += 1
print(f"\n" + "-" * 60)
print(f"韓文翻譯補充結果:")
print(f" 新增: {added_count}")
print(f" 更新: {updated_count}")
print(f" 總計: {added_count + updated_count}")
# 驗證結果
print(f"\n驗證補充結果:")
print("-" * 60)
success_count = 0
for i, trans in enumerate(korean_translations, 1):
source_text = trans['source_text']
cached_translation = TranslationCache.get_translation(source_text, source_language, target_language)
if cached_translation:
if cached_translation.strip() == trans['translated_text'].strip():
print(f"{i:2d}: 驗證成功")
success_count += 1
else:
print(f"⚠️ {i:2d}: 驗證失敗 - 內容不一致")
else:
print(f"{i:2d}: 驗證失敗 - 快取中沒有")
print(f"\n驗證結果: {success_count}/{len(korean_translations)} 成功")
# 測試整體韓文映射覆蓋率
print(f"\n測試整體韓文映射覆蓋率:")
print("-" * 60)
from app.services.translation_service import ExcelParser
from sqlalchemy import text as sql_text
original_file = Path(r"C:\Users\EGG\WORK\data\user_scrip\TOOL\Document_translator_V2\uploads\98158984-f335-44f5-a0b4-88fb8ccd5d78") / "original_panjit_98158984.xlsx"
if original_file.exists():
parser = ExcelParser(str(original_file))
segments = parser.extract_text_segments()
mapping_count = 0
for segment in segments:
result = db.session.execute(sql_text("""
SELECT translated_text
FROM dt_translation_cache
WHERE source_text = :text AND target_language = :lang
ORDER BY created_at DESC
LIMIT 1
"""), {'text': segment, 'lang': target_language})
row = result.fetchone()
if row:
mapping_count += 1
mapping_rate = mapping_count / len(segments) * 100 if segments else 0
print(f"韓文映射覆蓋率: {mapping_count}/{len(segments)} = {mapping_rate:.1f}%")
if mapping_rate >= 95:
print("🎉 韓文映射覆蓋率優秀!翻譯功能應該完美工作")
elif mapping_rate >= 90:
print("✅ 韓文映射覆蓋率良好,翻譯功能基本正常")
elif mapping_rate >= 80:
print("⚠️ 韓文映射覆蓋率普通,大部分內容可以翻譯")
else:
print("❌ 韓文映射覆蓋率不足,需要更多翻譯")
print(f"\n" + "=" * 80)
print("韓文翻譯快取補充完成!")
print("建議: 重新上傳Excel檔案測試韓文翻譯功能")
print("或者手動重新生成韓文翻譯檔案")
print("=" * 80)
if __name__ == "__main__":
add_korean_translations()