|
from singleton_decorator import singleton
|
|
import re
|
|
|
|
@singleton
|
|
class DigitVietnamese:
|
|
"""
|
|
Các bước:
|
|
- 1 Lọc bỏ tất cả các ký tự không phải số
|
|
- 2 Kiểm tra trường hợp đặc biệt
|
|
- 3 Chuyển đổi mỗi chữ số thành văn bản tiếng Việt
|
|
- 4 Thêm khoảng trắng giữa các từ
|
|
Trường hợp đặc biệt:
|
|
007 -> không không bảy
|
|
trong khi 003 -> không không ba
|
|
"""
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
self.filter_regex = re.compile("[^0-9]")
|
|
|
|
self.trans_dict = {
|
|
"0": "không",
|
|
"1": "một",
|
|
"2": "hai",
|
|
"3": "ba",
|
|
"4": "bốn",
|
|
"5": "năm",
|
|
"6": "sáu",
|
|
"7": "bảy",
|
|
"8": "tám",
|
|
"9": "chín"
|
|
}
|
|
|
|
def convert(self, token: str) -> str:
|
|
|
|
token = self.filter_regex.sub("", token)
|
|
|
|
if token == "007":
|
|
return "không không bảy"
|
|
|
|
token = " ".join([self.trans_dict[c] for c in token])
|
|
return token
|
|
if __name__ == "__main__":
|
|
|
|
digit_converter = DigitVietnamese()
|
|
|
|
|
|
phone_number = "0912345678"
|
|
print(f"Số điện thoại: {phone_number}")
|
|
print(f"Chuyển đổi: {digit_converter.convert(phone_number)}")
|
|
print()
|
|
|
|
|
|
student_id = "SV20210001"
|
|
print(f"Mã số sinh viên: {student_id}")
|
|
print(f"Chuyển đổi: {digit_converter.convert(student_id)}")
|
|
print()
|
|
|
|
|
|
special_case = "007"
|
|
print(f"Số đặc biệt: {special_case}")
|
|
print(f"Chuyển đổi: {digit_converter.convert(special_case)}")
|
|
|