Đặng Minh Tuấn: "'Điều quan trọng là chữ Việt phải hiển thị đúng"

Ông Đặng Minh Tuấn

Itoday - I-today vừa nhận được bài của ông Đặng Minh Tuấn liên quan đến những vấn đề ứng dụng Unicode. Tại bài viết này, ông Tuấn đã đưa ra cái nhìn về Unicode ở góc độ thực tiễn từ những ứng dụng hiện đang có và đang được các cơ quan Việt Nam sử dụng. Mời các bạn tham khảo bài viết.
 
i-today@vasc.com.vn

Trước tiên xin nêu về mặt quan điểm, rất may các ký tự tiếng Việt (Quốc Ngữ) của chúng ta được người Pháp phát triển từ thế kỷ XIX, nên từ đó tiếng Việt được xếp vào họ La-tinh. Nếu chúng ta xem trong bảng mã Unicode sẽ thấy tiếng Việt được nằm ở các vùng Latin-1, Latin-A, Latin-B và Latin-mở rộng. Xử lý ngôn ngữ cho các ngôn ngữ Latin rất đơn giản và trong họ Latin đa phần người ta dùng dựng sẵn, ngay cả Microsoft cũng dùng giải pháp dựng sẵn cho các ngôn ngữ thuộc họ Latin: Pháp, Đức, Rumani... Theo chúng tôi thật là sai lầm khi xếp tiếng Việt vào họ ký tự phức (complex scripts) như chữ Ả rập, Lào, Thái... Với họ complex scripts này thì bắt buộc phải xử lý ngôn ngữ theo kiểu tổ hợp. Và từ đó dẫn đến một loạt các vấn đề phức tạp khi xử lý ở dạng tổ hợp, đặc biệt tính tương thích sẽ kém đi rất nhiều.

Thực tế là phiên bản Windows 95 tiếng Việt của Microsoft đã không được thành công ở Việt Nam (hầu như chẳng có ai dùng nó) do tính tương thích kém của nó, các văn bản soạn ra ở hệ điều hành này thường chỉ đọc được đúng trên hệ điều hành đó, khi chuyển sang môi trường khác thường không thể đọc được.

Thực tế là hiện nay ở Việt Nam các Website lớn như Vnexpress, VASC Orient, ngay cả Website này http://www.i-today.com.cn/ cũng đều dùng Unicode dựng sẵn (các site này hàng ngày có hàng triệu click) trong khi chưa có một website lớn nào dùng tổ hợp. Các sản phẩm của các công ty lớn của Việt Nam như Vnexpress, Search Engine của FPT, (dùng SQL Server),  iLib của CMC (dùng Oracle), eDocument của CMC (Lotus Notes - IBM), Libol của Tinh Vân (Oracle, SQL Server), http://www.xvmart.net/ (siêu thị điện tử của Vietkey Group dùng Oracle+Jrun+Apache) đều dùng Unicode dựng sẵn hoàn toàn chạy trơn chu không hề có chuyện lỗi với Unicode dựng sẵn như một số chuyên gia thuộc hãng MS tuyên bố về sản phẩm của các hãng khác.

Thực tế là hệ điều hành phổ biến nhất ở Việt Nam trong thời điểm này là Windows 98 SE, hệ điều hành này chỉ hỗ trợ tốt cho Unicode dựng sẵn mà thôi, tổ hợp không thể chấp nhận được, xin xem hình minh hoạ dưới bài viết. Theo khuyến cáo của một số chuyên gia thuộc MS thì để dùng Unicode tổ hợp cần phải cài Windows XP, Windows2000, MS Office South Asia (không phải bản tiếng Anh phổ biến trên thị trường), như vậy để thực hiện Quyết định 72 của Thủ tướng Chính phủ và nếu đi theo hướng tổ hợp thì tất cả các máy tính ở Việt Nam phải nâng cấp phần cứng thành máy tính rất mạnh để có thể chạy được Windows XP hoặc Windows 2000, rồi lại phải bỏ hết bộ MS Office đang có để dùng bản MS Office châu Á thì tiếng Việt tổ hợp mới khả dĩ, như thế thì kinh phí sẽ cực kỳ tốn kém và sẽ tốn kém gấp nhiều lần so với Y2K ngày xưa. Nên nhớ cấu hình, tài nguyên của Windows XP lớn gấp 5 lần so với cấu hình cho Windows 98 (ổ cứng cho Win XP là 1G, trong khi Win98 chỉ cần 200M).

Thực tế là tính tương thích của tổ hợp kém hơn nhiều so với dựng sẵn, ngay đối với hệ điều hành Windows các phiên bản còn chẳng tương thích (không đọc được, không hiển thị đúng) về tổ hợp (Win98 <> Win XP, Office Eng <> Office SA...), huống chi với các hệ điều hành khác như MacOS, Be OS, Unix... Từ đó dẫn đến hệ quả là chúng ta sẽ bị lệ thuộc vào 1 dòng sản phẩm duy nhất mà mất đi tính hội nhập với các hệ khác, mất đi khả năng Multiplatform.

Thực tế là điều quan trọng đầu tiên là chữ Việt phải hiển thị đúng, không bị sai nghĩa, rồi mới nói đến những hỗ trợ khác như sắp xếp, chuyển chữ hoa/thường...Nhưng ngay cả yêu cầu sơ đẳng đó tiếng Việt tổ hợp trong nhiều trường hợp còn không đáp ứng nổi. Không cần nói đến các hệ cũ như Windows 98 (“sắp không được MS hỗ trợ nữa''), chữ hiển thị rất bị sai lệch, thì với hệ điều hành mới nhất bây giờ là Windows XP cùng với bộ soạn thảo văn phòng MS Office 2000 Eng mà ứng dụng khá phổ biến là PowerPoint còn thể hiện tiếng Việt không thể chấp nhận được (còn thua xa các font 8-Bit ngày xưa như VNI hay ABC). Có chuyên gia nói lý do của sự không hiển thị đúng này là do MS ''quên'', xin thưa là không quên, vì trong ứng dụng này cũng có phần chọn ngôn ngữ Vietnamese rồi (và chúng tôi cũng đã làm đúng hướng dẫn: đặt Locale=Vi...), trong khi đó thì Unicode dựng sẵn hiển thị đúng trong mọi trường hợp, đấy là chưa kể đến việc nếu co-kéo chữ là dấu và chữ của tổ hợp sẽ tách xa nhau ngay.

Có thể nào chấp nhận được dấu nặng trong chữ ‘tịnh’, lại nằm dưới chữ ‘t’ được không?, hay các dấu thanh bị lùi về sau 1 ký tự (trong WordArt2000 - 2 dòng dưới) được không?. Nếu Unicode mà như thế này thì thà rằng dùng nguyên Font ABC hay VNI còn khả dĩ hơn! Có thể coi đây là một tiến bộ được chăng? Cũng chuyên gia đó nói: chúng ta hãy chờ các bản chắp vá của MS: Service Pack, Patch..., vấn đề là chờ đến bao giờ? và cần bao nhiêu kinh phí? trong khi Unicode dựng sẵn đã đi vào cuộc sống từ 3 năm qua, chạy được trên nhiều môi trường, không cần phải mua máy mới, lại hiển thị đẹp đẽ hơn nhiều lần, không bị lệ thuộc vào 1 họ sản phẩm duy nhất, và đặc biệt có tính tương thích cao. Xin hãy giữ gìn sự trong sáng, giản dị của tiếng Việt, xin đừng xếp tiếng Việt với tiếng Ả-rập, tiếng Lào, vì đơn giản tiếng Việt của chúng ta là thuộc họ La-tinh.

''Mã dựng sẵn có nhiều ưu điểm nổi trội''

Itoday - Đó là kết luận của ông Đặng Minh Tuấn, Trưởng nhóm Vietkey Group, Trưởng phòng Tích hợp hệ thống và Công nghệ cao thuộc Viện Tự động hóa (Bộ Quốc phòng) khi trao đổi cùng Itoday xung quanh vấn đề sử dụng Unicode dựng sẵn hay tổ hợp.

Ngày 10/6 vừa qua, Thủ tướng Chính phủ đã ký quyết định phê chuẩn việc áp dụng bộ mã Unicode (TCVN 6909:2001) trên phạm vi toàn quốc. Tuy nhiên, việc áp dụng bộ mã Unicode theo chuẩn dựng sẵn hay tổ hợp lại là một đề tài đang được các chuyên gia CNTT Việt Nam bàn luận. Với kinh nghiệm 10 năm nghiên cứu để cho ra đời các công cụ xử lý tiếng Việt theo chuẩn Unicode, ông hãy giải thích cụ thể thế nào là mã tổ hợp và thế nào là mã dựng sẵn?

Hiện tại, có hai dòng giải pháp chính để xử lý tiếng Việt là mã dựng sẵn và mã tổ hợp. Nhưng trước tiên tôi xin giải thích về ký tự dựng sẵn và ký tự tổ hợp. Ký tự dựng sẵn là ký tự duy nhất không được tổ hợp từ những ký tự khác. Ký tự tổ hợp là ký tự được tổ hợp từ những ký tự cơ bản, ví dụ ký tự ừ là tổ hợp của ký tự cơ bản ư và ký tự dấu thanh huyền ` . Trong Unicode, ký tự tổ hợp còn có thể được tổ hợp từ những thành phần nhỏ hơn như ký tự ASCII, ký tự dấu nguyên âm và ký tự dấu thanh - khi đó ta có dạng biểu diễn chính tắc. Ví dụ chữ ừ trong các dạng biểu diễn nói trên sẽ là chuỗi ký tự sau:

  Chuỗi mã Hex
Dựng sẵn 1EAB
Tổ hợp 01B0,0300
Chính tắc 0075,031B,0300

Mã dựng sẵn và mã tổ hợp là quá trình mã hoá các ký tự thành các ký tự dựng sẵn hay thành các ký tự tổ hợp. Có thể coi chính tắc là một dạng của mã hoá tổ hợp.

Vậy thì ưu điểm của mã tổ hợp là gì?

Thứ nhất, mã tổ hợp có phần gọn nhẹ và chiếm ít mã hơn trong bảng mã, chỉ cần 20 mã cho ký tự thuần Việt (ă, â, ê, ô, ơ, ­, Ă, Â, Ê, Ô, Ơ, Ư, các dấu thanh: huyền, hỏi, ngã, sắc, nặng và dấu tổ hợp nguyên âm: nón, mũ, râu cho dạng chính tắc) trong khi đó mã dựng sẵn phải cần đến 134 mã cho ký tự thuần Việt.

Thứ hai, mã tổ hợp có phần gần với ngôn ngữ tự nhiên hơn trong quá trình ghép chữ, ghép vần. Mã tổ hợp sẽ dễ dàng hơn trong việc chuyển đổi chữ hoa/chữ thường, trong một số ứng dụng có thể dùng luôn tính năng Change Case có sẵn để chuyển đổi chữ hoa/chữ thường.

Thứ ba, mã tổ hợp có vẻ như dễ dàng hơn trong việc sắp xếp tiếng Việt, nhưng thực ra không phải như vậy, lý do là các dấu thanh huyền, sắc, ngã, hỏi, nặng - thứ tự trong bảng mã Unicode - lại nằm không đúng theo thứ tự sắp xếp tiếng Việt là huyền, hỏi, ngã, sắc, nặng, do đó vẫn phải thiết kế thuật toán riêng để sắp xếp mà không dùng ngay các hàm sắp xếp có sẵn trong tiếng Anh (đa phần các ứng dụng chỉ hỗ trợ sắp xếp theo luật tiếng Anh). Khi đã phải dùng thuật toán riêng thì việc sắp xếp cho mã dựng sẵn cũng không khó hơn, không phức tạp nhiều hơn so với việc sắp xếp cho mã tổ hợp.

Thứ tư, mã tổ hợp có phần dễ dàng hơn trong việc tìm kiếm tiếng Việt gần đúng, ví dụ tìm những chữ tiếng Việt gần với âm tha chẳng hạn thì các hàm tìm kiếm phổ thông sẽ tìm ra được các chữ thà, thá, thả, thã, thạ... Nhưng nếu tìm những từ gần với âm than thì lúc ấy lại phải thiết kế thuật toán riêng, mà khi đã phải dùng thuật toán riêng thì giữa tổ hợp và dựng sẵn thuật toán không khó hơn nhau nhiều.

Trong thực tế, mã tổ hợp được hỗ trợ tốt hơn trong môi trường Windows 2000, và bộ MS Office 2000, ý tốt hơn ở đây là chuyển đổi chữ hoa/thường, sắp xếp tiếng Việt được thiết kế ngay trong hệ điều hành và trong một số ứng dụng. Mã tổ hợp do các mã vẫn nằm trong miền W4L nên có thể hiện thị tốt hơn trong một số control có sẵn của Windows 2000, XP. Tuy nhiên lên môi trường Windows XP, Microsoft đã hỗ trợ luôn cả mã dựng sẵn với tính năng sắp xếp tiếng Việt cũng được tích hợp vào trong hệ điều hành, do đó trong môi trường Windows XP, Office XP thì sự khác biệt về sự hỗ trợ tổ hợp và dựng sẵn cũng đã gần như nhau. Chúng tôi đã phối hợp với Microsoft Hà Nội tiến hành một loạt thí nghiệm trên các môi trường Windows và rút ra kết luận như vậy. Các kết luận này không đúng cho các môi trường cũ hơn như Windows 95 và Windows 98.

Mã tổ hợp có nhược điểm nào không khi so sánh với mã dựng sẵn?

Cài đặt mã tổ hợp khá phức tạp, số lượng môi trường cài đặt được hạn chế hơn nhiều so với mã dựng sẵn, thông thường chỉ cài đặt được với font vector và bộ font cho phép định nghĩa các ký tự có độ rộng âm, khi đó 2 ký tự có độ rộng âm và dương tổ hợp lại sẽ cho ra ký tự cần hiển thị.

Một khó khăn khá lớn nữa là đa phần các công nghệ font phổ biến ngày nay như TrueType, OpenType, Type1... không cho phép thay đổi động vị trí các nét trong hình chữ, mà điều này lại rất cần thiết. Ví dụ chữ À, và à, thì vị trí của dấu huyền phải nằm ở 2 cao độ khác nhau tuỳ theo chữ cái cơ sở là chữ thường hay chữ hoa, việc thay đổi động cao độ của dấu thanh theo ngữ cảnh là chưa thực hiện được bằng kỹ thuật Font chữ hiện hành.

Để khắc phục vấn đề này, VNI đã phải đề xuất 2 mã riêng cho từng dấu thanh: 2 dấu huyền, một mã cho chữ hoa và một mã cho chữ thường. Trong CP 1258 và Unicode để đảm bảo tính đơn trị (tính một-một) các dấu thanh chỉ có một mã vì thế sẽ rất khó khăn trong việc hiển thị.

Phương án thứ 2 mà Microsoft đưa ra để giải quyết vấn đề tăng giảm độ cao dấu thanh là dùng kỹ thuật Hook API thay đổi các hàm Display qua đó ánh xạ (Map) chuỗi ký tự tổ hợp về chuỗi ký tự dựng sẵn để hiển thị và in ấn. Cơ chế này chỉ có trong Windows 95 tiếng Việt, Windows 2000, Windows XP mà không có trong Windows 95, Windows 98. Thêm nữa cơ chế này không phải bao giờ cũng thực hiện tốt, ngay cả trên Windows XP (mới nhất), hiện tượng xa rời dấu vẫn xảy ra với MS Office 2000.

Từ việc cài đặt mã tổ hợp phức tạp như vậy dẫn đến một nhược điểm thứ hai khá nghiêm trọng đó là tính tương thích của mã tổ hợp kém hơn. Có nghĩa là một văn bản gõ bằng mã tổ hợp ở môi trường này thì có thể sẽ không đọc được trong môi trường khác. Nhất là trong các môi trường dùng font ma trận (bitmap) thường dùng để làm font hệ thống thì hầu như không thể cài đặt được mã tổ hợp. Các môi trường như DOS, text console trong nhiều môi trường Unix, Linux cũng không thể cài được mã tổ hợp. Mã tổ hợp cài đặt trên các hệ điều hành phổ biến hiện nay là Windows 98 thì chữ rất xấu, không thể chấp nhận được (thua xa VNI và ABC), sẽ là một vấn đề lớn khi dùng mã tổ hợp phải nâng cấp phần cứng máy tính lên để cài đặt các hệ Windows 2000, XP (theo khuyến cáo của Microsoft để chạy mã tổ hợp tốt hơn), như vậy sẽ cần một kinh phí rất lớn để nâng cấp máy tính, cài đặt lại hệ điều hành, rồi đào tạo lại...

Độ mỹ thuật của mã tổ hợp thường kém hơn nhiều so với mã dựng sẵn, lý do là một ký tự dấu thanh (có vị trí và cao độ xác định trong font chữ) thường được dùng chung cho nhiều nguyên âm khác nhau và chúng được tổ hợp tự động sau khi nhập đoạn text. Vị trí của dấu thanh có thể hợp và đẹp với nguyên âm này nhưng lại có thể không phù hợp với nguyên âm khác. Ví dụ độ rộng của nguyên âm A thì khác với độ rộng của nguyên âm I (độ rộng rất hẹp) vì thế nếu đẹp cho chữ A thì xấu cho chữ I và ngược lại. Để khắc phục tình trạng này VNI phải định nghĩa riêng các mã cho các chữ ì, í, ỉ, ĩ, ị. Vì vậy chúng ta thường coi VNI là giải pháp khắc phục tình thế hơn là một bộ mã, vì nó không đảm bảo tính đơn trị, và nhất quán (có nhiều mã cho một dấu – với chữ i lại có xử lý khác so với xử lý các nguyên âm khác). Trong khi đó mã dựng sẵn được thiết kế từ trước (dựng sẵn)  nên có thể bố trí vị trí dấu thanh ở vào vị trí thích hợp nhất cho từng nguyên âm, nên bao giờ cũng có khả năng đẹp hơn nhiều so với mã dựng sẵn.

Xử lý hiệu ứng với đoạn mã tổ hợp có nhiều vấn đề khó khăn hơn so với mã dựng sẵn. Trong nhiều trường hợp, một con chữ tiếng Việt trong lưu trữ và hiển thị với mã dựng sẵn lại không phải là một thể thống nhất (tổ hợp từ những ký tự rời rạc) cho nên khi thực hiện các hiệu ứng với đoạn văn bản như co dãn text, xoay, dồn chữ, canh đều hai bên...thì các dấu và chữ thường bị tách rời nhau, chữ đi một nơi và dấu đi một nơi, ảnh hưởng đến mỹ thuật và độ chính xác. Có thể thường thấy trên các tít báo dùng font chữ VNI hay xuất hiện các hiện tượng xa rời dấu thanh.

Xử lý với các ký tự mã tổ hợp phức tạp hơn so với mã dựng sẵn, do mỗi chữ cái trong mã tổ hợp có độ rộng thay đổi, lúc có thể là một ký tự, lúc khác lại được tổ hợp từ nhiều byte khác nhau. Khi tách từ, tách ký tự (theo ngôn ngữ tự nhiên), thường dùng để phân tích cú pháp hay đánh chỉ số phải xây dựng thuật toán riêng khá phức tạp, trong khi mã dựng sẵn có độ rộng cố định nên việc rút ký tự từ đoạn text ra rất đơn giản, không cần xây dựng thuật toán riêng. Ngoài ra việc các xử lý ký tự khác như xóa ký tự, di chuyển cho trỏ đi theo đơn vị ký tự thì thực hiện với mã tổ hợp khó khăn và phức tạp hơn nhiều: thường phải xóa 2 lần cho một chữ, di chuyển 2 lần con trỏ mới đi ra khỏi một chữ, những điều này là xa lạ với ngôn ngữ tự nhiên.

Kích thước các tệp dữ liệu lưu ở dạng tổ hợp thường lớn hơn so với mã dựng sẵn khoảng 25-30%, do đó nó chiếm nhiều không gian trong đĩa cứng, bộ nhớ hơn, và trên đường truyền mạng (internet/intranet) ngốn nhiều băng thông hơn.

Trong lĩnh vực cơ sở dữ liệu, thiết kế cấu trúc CSDL với mã tổ hợp thường phức tạp hơn, vì mặc dù biết trước số chữ cái max nhưng lại khó đoán nhận chính xác độ dài chuỗi byte tương ứng lớn nhất, nếu thiết kế không khéo sẽ bị tràn bộ nhớ. Và khó khăn trong việc phân tách ký tự, phân tách từ cũng làm khó khăn thêm trong việc xử lý text trong lĩnh vực cơ sở dữ liệu.

Trong lĩnh vực đánh chỉ số (index), và tìm kiếm toàn văn (Full Text Search), mã tổ hợp cũng gây nhiều khó khăn hơn (phân tách từ, phân tách ký tự) và các ký tự dấu thanh trong mã tổ hợp thường bị coi là dấu phân cách từ, dẫn đến việc đánh index bị sai và tìm kiếm toàn văn cũng không đúng. Hiện tượng này thường gặp với đa số các bộ search engine, các công cụ tìm kiếm toàn văn trong Oracle và Lotus Notes 5.0 đều bị lỗi đánh chỉ số sai. Tuy rằng Oracle và Lotus Notes đều hỗ trợ Unicode trong phần Encoding, nhưng đáng tiếc phần Full Text Search mua lại của hãng thứ 3 INSO (do Oracle sử dụng) và Verity (do Lotus Notes sử dụng) đều thực hiện các phân cách từ sai đối với mã tổ hợp. Các lỗi này lại không xuất hiện với mã dựng sẵn.

Tính thực tế của mã tổ hợp kém hơn mã dựng sẵn: ngày nay đa số ở Việt Nam cũng như ở nước ngoài, Unicode dựng sẵn được dùng rất phổ biến, các website của Việt Nam như VASC Orient và VnExpress hàng ngày có gần 2 triệu lượt truy nhập chứng tỏ số lượng người dùng mã dựng sẵn rất lớn, trong khi các website dùng mã tổ hợp rất ít. Cho nên nếu chuyển sang tổ hợp sẽ phải chuyển một khối lượng không nhỏ các mã dựng sẵn sang tổ hợp.

Đặng Minh Tuấn - Vietkey group
dangtuan@vietkey.net

http://www.vietkey.com 


PcLeHoan 1996 - 2002
Mirror : http://www.pclehoan.com
Mirror : http://www.lehoanpc.net

Mirror : http://www.ktlehoan.com