import sys
import re

def extract_myanmar_text(filepath):
    with open(filepath, 'r', encoding='utf-8') as f:
        text = f.read()
    # Filter only Myanmar characters
    myanmar_chars = re.findall(r'[\u1000-\u109F]', text)
    return ''.join(myanmar_chars)

def levenshtein_distance(s1, s2):
    if len(s1) < len(s2):
        return levenshtein_distance(s2, s1)

    # len(s1) >= len(s2)
    if len(s2) == 0:
        return len(s1)

    previous_row = range(len(s2) + 1)
    for i, c1 in enumerate(s1):
        current_row = [i + 1]
        for j, c2 in enumerate(s2):
            insertions = previous_row[j + 1] + 1
            deletions = current_row[j] + 1
            substitutions = previous_row[j] + (c1 != c2)
            current_row.append(min(insertions, deletions, substitutions))
        previous_row = current_row
    
    return previous_row[-1]

def evaluate(standard_file, target_file):
    standard_text = extract_myanmar_text(standard_file)
    target_text = extract_myanmar_text(target_file)
    
    if not standard_text:
        print("Lỗi: Không tìm thấy ký tự tiếng Myanmar trong file chuẩn.")
        return
        
    distance = levenshtein_distance(standard_text, target_text)
    
    max_len = max(len(standard_text), len(target_text))
    accuracy = ((max_len - distance) / max_len) * 100
    
    print(f"TỔNG QUAN:")
    print(f"- Số ký tự Myanmar file chuẩn: {len(standard_text)}")
    print(f"- Số ký tự Myanmar file trích xuất: {len(target_text)}")
    print(f"- Khoảng cách Levenshtein (số thao tác lỗi tối thiểu): {distance}")
    print(f"- Độ chính xác (Character Error Rate ngược): {accuracy:.2f}%")

if __name__ == "__main__":
    standard = "An Duc Tam Bao/tam_bao_071_080_standard.txt"
    target = "An Duc Tam Bao/tam_bao_071_080.md"
    evaluate(standard, target)