176 lines
5.8 KiB
Python
176 lines
5.8 KiB
Python
#!/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() |