En-Vi-Translator / tests /test_direction.py
TVQuyet05
init
923f623
Raw
History Blame Contribute Delete
4.94 kB
"""
Quick test to verify translation direction: EN → VI or VI → EN
"""
import sys
import os
from pathlib import Path
# Add parent to path
PROJECT_ROOT = Path(__file__).resolve().parent
sys.path.insert(0, str(PROJECT_ROOT))
from utils.data_processing import DataProcessor
from config import Config
def main():
print("=" * 70)
print("Verifying Translation Direction")
print("=" * 70)
# Initialize processor
processor = DataProcessor(Config)
# Load tokenizer
tokenizer_dir = PROJECT_ROOT / "SentencePiece-from-scratch" / "tokenizer_models"
print(f"\nLoading tokenizer from: {tokenizer_dir}")
processor.load_tokenizer(str(tokenizer_dir))
# Load datasets
print("\nLoading datasets...")
datasets = processor.prepare_datasets()
# Check first few examples from train set
print("\n" + "-" * 70)
print("Sample Examples from Training Set:")
print("-" * 70)
num_samples = 5
for i in range(min(num_samples, len(datasets['train']))):
example = datasets['train'][i]
src_tokens = example['src'].tolist()
tgt_tokens = example['tgt'].tolist()
src_text = processor.decode_sentence(src_tokens)
tgt_text = processor.decode_sentence(tgt_tokens)
print(f"\nExample {i+1}:")
print(f" Source: {src_text[:100]}...")
print(f" Target: {tgt_text[:100]}...")
# Analyze language
print("\n" + "=" * 70)
print("Language Detection (Simple Heuristic):")
print("=" * 70)
# Sample 100 examples
sample_size = min(100, len(datasets['train']))
src_has_vietnamese = 0
src_has_english = 0
tgt_has_vietnamese = 0
tgt_has_english = 0
# Vietnamese characters
vi_chars = set('àáảãạăắằẳẵặâấầẩẫậèéẻẽẹêếềểễệìíỉĩịòóỏõọôốồổỗộơớờởỡợùúủũụưứừửữựỳýỷỹỵđ')
for i in range(sample_size):
example = datasets['train'][i]
src_text = processor.decode_sentence(example['src'].tolist()).lower()
tgt_text = processor.decode_sentence(example['tgt'].tolist()).lower()
# Check Vietnamese characters
if any(c in vi_chars for c in src_text):
src_has_vietnamese += 1
if any(c in vi_chars for c in tgt_text):
tgt_has_vietnamese += 1
# Check common English words
en_words = {'the', 'is', 'are', 'and', 'or', 'to', 'of', 'in', 'for', 'on'}
if any(word in src_text.split() for word in en_words):
src_has_english += 1
if any(word in tgt_text.split() for word in en_words):
tgt_has_english += 1
print(f"\nAnalyzed {sample_size} examples:")
print(f"\nSource:")
print(f" Contains Vietnamese chars: {src_has_vietnamese}/{sample_size} ({src_has_vietnamese/sample_size*100:.1f}%)")
print(f" Contains English words: {src_has_english}/{sample_size} ({src_has_english/sample_size*100:.1f}%)")
print(f"\nTarget:")
print(f" Contains Vietnamese chars: {tgt_has_vietnamese}/{sample_size} ({tgt_has_vietnamese/sample_size*100:.1f}%)")
print(f" Contains English words: {tgt_has_english}/{sample_size} ({tgt_has_english/sample_size*100:.1f}%)")
# Determine direction
print("\n" + "=" * 70)
print("CONCLUSION:")
print("=" * 70)
if src_has_english > src_has_vietnamese and tgt_has_vietnamese > tgt_has_english:
print("\n✅ Translation Direction: ENGLISH → VIETNAMESE")
print(" Source: English")
print(" Target: Vietnamese")
elif src_has_vietnamese > src_has_english and tgt_has_english > tgt_has_vietnamese:
print("\n✅ Translation Direction: VIETNAMESE → ENGLISH")
print(" Source: Vietnamese")
print(" Target: English")
else:
print("\n⚠️ Cannot determine direction clearly!")
print(" Please check data manually")
print("\n" + "=" * 70)
# Check data files directly
print("\nVerifying raw data files:")
print("-" * 70)
data_dir = PROJECT_ROOT / "data" / "processed"
# Read first line from each file
files_to_check = [
("train.en", "English Training"),
("train.vi", "Vietnamese Training"),
("validation.en", "English Validation"),
("validation.vi", "Vietnamese Validation"),
]
for filename, label in files_to_check:
filepath = data_dir / filename
if filepath.exists():
with open(filepath, 'r', encoding='utf-8') as f:
first_line = f.readline().strip()
print(f"\n{label} ({filename}):")
print(f" {first_line[:100]}...")
else:
print(f"\n{label} ({filename}): NOT FOUND")
print("\n" + "=" * 70)
if __name__ == "__main__":
main()