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

176 lines
5.8 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.services.translation_service import ExcelParser
import openpyxl
def test_fixed_translation():
"""測試修正後的翻譯功能"""
print("=" * 80)
print("測試修正後的Excel翻譯功能")
print("=" * 80)
# 使用現有的測試文件
test_dir = Path(r"C:\Users\EGG\WORK\data\user_scrip\TOOL\Document_translator_V2\uploads\185bb457-b703-4e98-94a2-fde072b895c4")
original_file = test_dir / "original_panjit_185bb457.xlsx"
if not original_file.exists():
print(f"原始文件不存在: {original_file}")
return
# 創建一個新的翻譯文件名稱
new_translated_file = test_dir / "original_panjit_185bb457_ja_translated_fixed.xlsx"
print(f"✅ 使用原始文件: {original_file.name}")
print(f"✅ 生成新翻譯文件: {new_translated_file.name}")
# 1. 驗證提取功能
print(f"\n1. 驗證文字提取功能")
print("-" * 60)
parser = ExcelParser(str(original_file))
segments = parser.extract_text_segments()
print(f"提取到 {len(segments)} 個文字片段")
# 檢查A1是否在其中
a1_content = "製程"
if a1_content in segments:
print(f"✅ A1內容 '{a1_content}' 已被提取")
print(f" 位置: 第{segments.index(a1_content)+1}")
else:
print(f"❌ A1內容 '{a1_content}' 仍未被提取")
return
# 2. 驗證翻譯快取
print(f"\n2. 驗證翻譯快取狀況")
print("-" * 60)
from app import create_app
app = create_app()
with app.app_context():
from sqlalchemy import text as sql_text
from app import db
target_language = 'ja'
translation_map = {}
missing_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:
translation_map[segment] = row[0]
if segment == a1_content:
print(f"'{segment}' -> '{row[0]}'")
else:
missing_count += 1
if segment == a1_content:
print(f"'{segment}' -> 無翻譯記錄")
print(f"翻譯快取命中: {len(translation_map)}/{len(segments)} = {len(translation_map)/len(segments)*100:.1f}%")
print(f"缺失翻譯: {missing_count}")
# 3. 手動生成翻譯文件
print(f"\n3. 手動生成翻譯文件")
print("-" * 60)
try:
# 在app context內使用ExcelParser的generate_translated_document方法
translated_file_path = parser.generate_translated_document(
translations={}, # 空字典,會使用快取查詢
target_language='ja',
output_dir=test_dir
)
# 重新命名為我們的測試檔名
import shutil
if Path(translated_file_path).exists():
shutil.move(translated_file_path, str(new_translated_file))
print(f"✅ 翻譯文件已生成: {new_translated_file.name}")
else:
print(f"❌ 翻譯文件生成失敗")
return
except Exception as e:
print(f"❌ 生成翻譯文件時出錯: {str(e)}")
return
# 4. 驗證翻譯結果
print(f"\n4. 驗證翻譯結果")
print("-" * 60)
wb_orig = openpyxl.load_workbook(str(original_file), data_only=False)
wb_trans = openpyxl.load_workbook(str(new_translated_file), data_only=False)
# 檢查A1儲存格
a1_orig = wb_orig.active['A1'].value
a1_trans = wb_trans.active['A1'].value
print(f"A1儲存格檢查:")
print(f" 原始: {repr(a1_orig)}")
print(f" 翻譯: {repr(a1_trans)}")
if isinstance(a1_trans, str) and '\n' in a1_trans:
lines = a1_trans.split('\n')
if len(lines) >= 2 and lines[0].strip() == a1_content:
print(f" ✅ A1翻譯成功")
print(f" 原文: '{lines[0]}'")
print(f" 譯文: '{lines[1]}'")
success = True
else:
print(f" ⚠️ A1格式異常")
success = False
else:
print(f" ❌ A1未翻譯")
success = False
# 檢查其他重要儲存格
test_cells = ['C1', 'D1', 'B2', 'C2']
translated_count = 0
for cell_name in test_cells:
orig_val = wb_orig.active[cell_name].value
trans_val = wb_trans.active[cell_name].value
if orig_val and isinstance(trans_val, str) and '\n' in trans_val:
translated_count += 1
print(f"\n其他儲存格翻譯狀況: {translated_count}/{len(test_cells)} 個成功翻譯")
wb_orig.close()
wb_trans.close()
# 5. 最終結果
print(f"\n" + "=" * 80)
if success:
print("🎉 測試成功A1儲存格翻譯問題已修復")
print(f" 新翻譯文件: {new_translated_file}")
print(" - ✅ 文字提取修正生效")
print(" - ✅ 翻譯快取記錄已補充")
print(" - ✅ A1儲存格翻譯正常")
else:
print("❌ 測試失敗!需要進一步排查問題。")
print("=" * 80)
if __name__ == "__main__":
test_fixed_translation()