Chủ đề này nghe chừng vẫn còn nguyên độ nóng đây!
Một thời gian trước tôi đã thử bắt đầu viết một chương trình sửa lỗi chính tả nhúng trong VBA để làm công cụ giúp chức năng đoán mã được tốt hơn thay vì sử dụng thuộc tính Phông chữ của đổi tượng nhưng do bận rộn và bế tắc về ngôn ngữ nên tôi tạm thời bỏ dở và dự kiến sẽ làm trong thời gian khác phù hợp.
Xin lạm bàn một chút về phương pháp đoán mã để nếu các bạn quan tâm, biết đâu chúng ta có thể xây dựng được một ứng dụng có khả năng này.
Cách thức đoán mã tiếng Việt là một trong những điểm khó nhất đối với lập trình viên mà đôi khi khó đến mức gần như không thể xây dựng được giải thuật trí tuệ nhân tạo tối ưu; nguyên nhân chính là do sự đa dạng của các bảng mã và sự tùy ý trong việc sử dụng các phông chữ hiển thị (làm cho các thuật toán sử dụng phông chữ để đoán mã trở nên vô hiệu đối với những bảng mã không có nguyên tắc cơ sở).
Chẳng hạn đa phần với TCVN - ABC người ta dùng bộ phông .Vn*** để hiển thị vì thế có thể khai thác thuộc tính này để đoán mã TCVN-ABC. Nhóm các bảng mã này cũng có kha khá và tương đối phổ biến với các bảng mã chính (VNI Windows, TCVN-ABC).
Nhưng khi gặp VNI-DOS thì người ta lại dùng các phông chữ mang đặc điểm địa danh như Can Tho, Thanh Hoa .... để hiển thị (Vậy thì dùng cái gì?)
Nếu không kể thêm sự "tùy ý" của người dùng khi gõ theo thói quen (ví dụ trong 1 ô, đang dùng Unicode, họ gõ thêm 1 chữ nào đó bằng phần mềm và bảng mã quen dùng, nếu không hiện chữ đúng họ chọn mấy chữ đó trong ô và đổi phông chữ để hiện tiếng Việt).
Mặc dù Excel cho ta cơ hội để làm việc với thuộc tính phông chữ của từng ký tự trong Ô nhưng nếu vẫn chỉ dựa vào phông chữ để đoán mã thì vẫn thua vì ta chỉ làm được với những bảng mã phổ biến. Không kể là tốc độ sẽ cực thấp.
Ngoài ra, còn cách khác có thể giúp đoán mã tiếng VIệt nhờ việc quan sát những gì hiển thị ra ngoài màn hình nhờ các công cụ phân tích sử dụng nhận dạng ảnh, nếu máy tính của ta có thể hiển thị được tiếng Việt thì khả năng đoán trúng của công cụ là xấp xỉ 99,99% và nó không cần biết bạn sử dụng phông nguồn, bảng mã nào, chỉ cần đặc tả bạn cần chuyển sang mã đích gì. Tuy nhiên, tốc độ thì hơn rùa bò một chút.
Bản thân tôi cũng đã thử một biện pháp nữa là, thực hiện chuyển mã thử sang các bảng mã khác nhau và so sánh với từ điển hoặc bảng danh mục từ được xây dựng theo nguyên lý kết hợp của tiếng Việt, bảng test nào có ít lỗi nhất thì đưa lại kết quả đoán là bảng mã đó. Nhưng cách này có nhiều yếu điểm về tốc độ và danh sách bảng mã được nhúng vào chương trình, chưa kể trường hợp không giải quyết được việc có nhiều bảng mã trong cùng 1 ô.
Như vậy, tùy theo yêu cầu của người dùng, cần nhanh hay cần chính xác mà họ có thể chọn cách kiểm tra từng ký tự hay thuộc tính tổng thể của Ô.
Tóm lại là trong môi trường trăm hoa đua nở kết hợp với sự tuỳ tiện, sẽ không bao giờ có được công cụ giúp ta ngồi chơi xơi nước và nó tự động chuyển tất cả về 1 bảng mã.
Nói khác hơn, để có lý do làm khó tác giả thì không thiếu ví dụ thực tế mà siêu lập trình viên cũng bó tay. Nhưng xét về tổng quát, ta có thể làm được nhiều việc nhờ kết
hợp các cách giải quyết khác nhau để người dùng có thể mất càng ít thời gian biên tập lại càng tốt.
Tôi thiết nghĩ, các bạn cùng tham gia thảo luận về phương án này thì chắc sẽ đỡ hơn. VÍ dụ:
1. Cùng hỗ trợ thiết kế thuật toán chuyển mã sao cho tối ưu về tốc độ.
2. Cùng thiết kế thuật toán đoán mã sao cho tốc độ và độ chính xác cao nhất.
...
Như vậy, ta sẽ bớt tranh luận và cũng không cần phải thỉnh thoảng lại giới thiệu tôi có cái này, anh có cái kia làm cho người dùng loạn nhịp.
THiết nghĩ như thế có được không ạ? Nếu tôi có vô tình làm ai buồn, thì thành thật xin lỗi, nếu bài viết có vi phạm nội quy thì mong MOD xóa giùm.
Rất chân thành!