File size: 2,117 Bytes
ead033d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#pragma once

#include <string>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <cstdint>

namespace matcha {

struct PauseConfig {
    float para = 0.65f;
    float ellipsis = 0.35f;
    float period = 0.25f;
    float comma = 0.12f;
    float question = 0.30f;
    float exclaim = 0.25f;
    float colon = 0.18f;
    float semicolon = 0.20f;
    float default_pause = 0.20f;
};

class TextNormalizer {
public:
    // 1. Đọc số nguyên Tiếng Việt chuẩn ngôn ngữ học (hàng đơn vị, chục, trăm, ngàn, triệu, tỷ)
    static std::string read_integer(int64_t n);

    // 2. Đọc từng chữ số rời rạc (Mã OTP, CCCD, số điện thoại, STK ngân hàng)
    static std::string read_digits_one_by_one(const std::string& digit_str);

    // 3. Quy đổi các ký hiệu, đơn vị đo lường, từ viết tắt công nghệ nước ngoài sang âm Tiếng Việt
    static std::string translate_foreign_symbols_and_words(const std::string& text);

    // 4. Quy đổi chữ cái Latin đơn độc lập (V, A, a, d, g...) thành âm chữ thường
    static std::string replace_isolated_latin_letters(const std::string& text);

    // 5. Bộ chuẩn hóa tổng hợp toàn diện (Số, ngày tháng, giờ, điện thoại, phần trăm, tiền tệ, thập phân)
    static std::string normalize_vietnamese_text(const std::string& text);

    // 6. Làm sạch văn bản hoàn chỉnh trước khi nạp vào TTS Engine (Bao gồm chuẩn hóa + lọc ký hiệu ngoài từ điển)
    static std::string clean_and_normalize(
        const std::string& raw_text,
        const std::unordered_set<std::string>& allowed_symbols = {}
    );

    // 7. Nạp cấu hình ngắt nghỉ thông minh từ pause_config.json
    static PauseConfig load_pause_config(const std::string& filepath = "pause_config.json");

    // 8. Tính toán độ dài khoảng nghỉ (giây) dựa trên dấu câu kết thúc của câu văn
    static float get_pause_duration(const std::string& sentence, const PauseConfig& config);
};

} // namespace matcha