File size: 1,132 Bytes
e9015b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
"""Chinese text normalization before translation."""

from __future__ import annotations

from functools import lru_cache

NORMALIZE_AUTO = "auto"
NORMALIZE_T2S = "t2s"
NORMALIZE_NONE = "none"
NORMALIZE_MODES = {NORMALIZE_AUTO, NORMALIZE_T2S, NORMALIZE_NONE}


@lru_cache(maxsize=1)
def _t2s_converter():
    from opencc import OpenCC

    return OpenCC("t2s")


def normalize_mode(mode: str | None) -> str:
    mode = (mode or NORMALIZE_AUTO).strip().lower()
    return mode if mode in NORMALIZE_MODES else NORMALIZE_AUTO


def normalize_chinese_text(text: str, mode: str | None = NORMALIZE_AUTO) -> str:
    mode = normalize_mode(mode)
    if mode == NORMALIZE_NONE or not text:
        return text
    return _t2s_converter().convert(text)


def normalization_message(original: str, normalized: str, mode: str | None) -> str:
    mode = normalize_mode(mode)
    if mode == NORMALIZE_NONE:
        return "Giữ nguyên chữ Hán gốc."
    if original == normalized:
        return "Đã kiểm tra chữ Hán: không cần chuyển phồn thể."
    return "Đã chuyển phồn thể sang giản thể trước khi dịch."