• Đăng ký
  • Đăng nhập

Source Code Kiểm tra chính tả dựa theo cấu trúc âm tiết trên C#

📅 — 👀 1593 — 👦

Trang này có hữu ích không?

👍 Có (13)        👎 Không (22)


Như tiêu đề thì bài viết này sẽ diễn tả THUẬT TOÁN KIỂM TRA ÂM TIẾT TIẾNG VIỆT DỰA TRÊN LUẬT CẤU TẠO ÂM TIẾT trên ngôn ngữ C#.


Sau đây mình sẽ chia sẻ code của THUẬT TOÁN KIỂM TRA ÂM TIẾT TIẾNG VIỆT DỰA TRÊN LUẬT CẤU TẠO ÂM TIẾT. Mình sẽ không nói nhiều về thuật toán này, các bạn có thể thêm xem chi tiết thuật toán này tại đây.

Sau khi mình xây dựng thuật toán thì mình thấy cách này kiểm tra chính tả rất nhanh, nhưng có 1 nhược điểm mà thuật toán này mang lại là kết quả sẽ không chính xác đối với các từ ghép. Ví dụ: từ trong cây khi kiểm tra chính tả từng từ thì sẽ đúng, nhưng chính xác thì phải là trồng cây. Lý do là thuật toán này chỉ kiểm tra từng âm tiết một nên khi ghép từ lại thì sẽ sai, vì vậy thuật toán này sẽ không tối ưu so với thuật toán kiểm tra tiếng việt với từ điển dựng sẵn với các bộ từ đơn, từ đôi, từ ba,...

Giới thiệu sơ về code:

- Định nghĩa các mảng Âm đầu, Âm Giữa, Âm cuối:

public string[] am_dau = new string[] { "b", "c", "ch", "d", "đ", "g", "gh", "h", "k", "kh", "l", "m", "n", "ng", "ngh", "nh", "p", "ph", "q", "r", "s", "t", "th", "tr", "v", "x", "none" };
        public string[] am_cuoi = new string[] { "c", "ch", "m", "n", "ng", "nh", "p", "t", "none" };
        public string[] am_giua = new string[] { "a", "á", "ai", "au", "ay", "e", "eo", "i", "ia", "iai", "iày", "iá", "iáo", "uyễ" };

Ở đây, mảng am_giua chưa đầy đủ, các bạn có thể bổ sung thêm trong quá trình học từ mới.

- Hàm tìm chuỗi trong mộng mảng chuỗi bằng phương pháp tìm kiếm nhị phân:

public int SearchString1(string key, List<string> arr)
        {
            int first = 0;
            int last = arr.Count;

            while (first < last)
            {
                int mid = (first + last) / 2;
                if (key.CompareTo(arr[mid]) < 0)
                {
                    last = mid;
                }
                else if (key.CompareTo(arr[mid]) > 0)
                {
                    first = mid + 1;
                }
                else
                {
                    return mid;
                }
            }
            return -(first + 1);
        }

Sau đây mời bạn download source code về cùng tham khảo. Nếu có gì cần đặt câu hỏi, vui lòng để lại nhận xét bên dưới. Thanks !

Link download : Kiem Tra Chinh Ta

Trả lời


📁 Code Demo