Xem ví dụ tại stats\08-telexified_sample.txt
Thử nghiệm với gần 1Gb text trộn từ facebook comments, news titles, viet opensub, wikipedia, sách, truyện .. Trong vòng 45 giây phân tách được:
73% tokens âm tiết tiếng Việt 148_280_481 "của và có không là được cho các"
6% tokens thuộc bảng chữ cái 11_953_258 "đ đc NĐ ĐH TP USD inbox shop"
21% tokens ngoài bảng chữ cái 43_576_527 ". , - : ? ; '' " 1 ! 2 / ... 2020 🤣 19000019"
(18% ngoài bảng chữ cái 1 ký tự 37_108_988) ". , - : ? ;"
- - - - - - - - - - - - - - - - - - - - - -
100% tổng tokens 203_810_266
=> TRUNG BÌNH MỘT GIÂY PHÂN TÁCH VÀ PHÂN LOẠI 5 TRIỆU TOKENS, ĐỊNH DANH 3.65 TRIỆU ÂM TIẾT TV Trên máy macbook 2015, 8Gb ram, 1.1Ghz Duo-core Intel M
Bảng chữ cái tiếng Việt gồm các ký trơn a-z
và các ký tự có dấu hoặc có thanh điệuđáàảãạâấầẩẫậ...
dấu (mark)
: là phần mở rộng của ascii như đ,ư,â ...
gắn liền với ký tự được mở rộng, không thể sai khác.
thanh điệu (tone)
: là phần trải dài trên vần (âm tiết = âm đầu + vần), và thường được bỏ trên nguyên âm chính. Ví dụ của vs cuả
là 2 cách bỏ thanh điệu của cùng một âm tiết.
Phân tách dữ liệu text thành dòng các token thuộc bảng chữ cái và token không thuộc bảng chữ cái.
Phân tách alphabet
tokens thành loại có dấu hoặc có thanh điệu (gọi tắt là alphmark
) và loại trơn (gọi tắt là alph0m0t
; 0m0t: zero-mark, zero-tone).
-
alphmark
có thể chứa các âm tiết sai chính tả, viết dính, từ địa phương, từ viết tắt -
alph0m0t
thường là từ nước ngoài
-
syllmark
âm tiết tiếng Việt gần như 100% -
alph0m0t
có thể đa nghĩa vừa là âm tiết TV vừa là từ nước ngoài (can
trong TV vscan
trong tiếng Anh)
5/ Lọc syllow0t
từ syllable
bằng cách covert thành viết thường, giữ lại dấu và loại bỏ thanh điệu. syllow0t
: có nghĩa là âm tiết (syll), viết thường (lower), và không thanh điệu (0t: zero-tone).
./bin/telexifiy input.txt output.xyz
./bin/telexifiy input.txt output.xyz keep
* Nước => ^nuoc|ws
* VIỆT => ^^viet|zj
* đầy => dday|zf
Note: bỏ qua trường hợp viết cả thường lẫn hoa như MóNg
-
w
cho cách bỏ dấuă,ư,ơ,ươ,ưa
-
z
cho cách bỏ dấuâ,ê,ô,uô,iê,yê
s|f|r|x|j
cho các thanh sắc, huyền, hỏi, ngã, nặng
Cách trình bày lại này linh động ở chỗ giữ nguyên dạng cách viết không dấu không thanh, bóc tách thuộc tính viết hoa thành tiền tố ^
, bóc tách phần dấu và thanh điệu, là bổ xung cho cách viết không dấu, thành hậu tố |[wz][sfrxj]
.
Nói về ưu điểm dưới góc nhìn của việc xử lý và lưu trữ dữ liệu (a.k.a góc nhìn máy tính)
-
Cách trình bày này bao hàm luôn cách gõ không dấu không thanh vì âm tiết không dấu không thanh luôn là sub-string của âm tiết đầy đủ. Giúp dễ tìm kiếm, đối chiếu hơn.
-
Gõ sao (cố gắng) lưu vậy (key-strokes -> chars). Cách lưu trữ cũng là cách gõ telex khác để làm luật chặt chẽ hơn:
-
Viết không dấu trước
-
Chỉ bỏ dấu và thanh ở cuối từ
-
Dùng
z
để bỏ dấuâ,ô,ê
(nhưw
với dấuơ,ă,ư
) thay vì cách gõaa,oo,ee
Ví dụ: Gõ
motzj
=>một
,nguoiwf
=>người
..Cách gõ Telex có ưu điểm lớn nhất là chỉ sử dụng key-stroke cơ bản
a-z
nên tốc độ gõ nhanh và hỗ trợ tốt trong nhiều hoàn cảnh (ví dụ trên bàn phím smartphone, dãy chữ số thường bị ẩn đi ...)Đó là một ví dụ của việc đặt ra "luật" rõ-ràng, có-mục-đích từ đầu sẽ hỗ trợ cho toàn bộ quá trình về sau. Triển khai luật này, công thêm định hướng làm sao cho gõ nhanh, không phải nhìn bàn phím, không bị lẫn phím dấu, thanh với phím phụ âm, nguyên âm ta có cách gõ Telex đơn giản và dễ nhớ như sau:
dd=đ; aw,uw,ow=ă,ư,ơ; aa,oo,ee=â,ô,ê
,sfrxj
cho thanh điệu sắc, huyền, hỏi, ngã nặng. Cách triển khai này tuân thủ luật gốc và cố gắng tối ưu cho việc gõ nhanh nhất có thể. Các cách gõ bổ trợ khác như gõ nhanhcc=ch,gg=gi,nn=ng,qq=qu,pp=ph,th=th
, gõ tắt phụ âm đầuf=ph,j=gi,w=qu
, gõ tắt phụ âm cuốig=ng,h=nh,k=ch
là mở rộng thêm theo hướng tối ưu cho tốc độ đó.Việc làm luật gõ chặt chẽ hơn như chỉ bỏ dấu và thanh ở cuối âm tiết tối ưu cho mục đích khác là giúp bộ gõ dự đoán tình huống tốt hơn, phân biệt tiếng Việt với tiếng nước ngoài dễ hơn. Ví dụ khi máy nhận được nguyên âm
ie,ye
chắc chắn phần dấu chỉ làz
->iê,yê
, tương tựuan
chỉ có thể làz
->uân
(máy có thể dự đoán được vì người dùng đã gõ tới phụ âm cuối vầnn
). Chỉ dùng 1 ký tựz
thay vìaa,ee,oo
sẽ làm luật nhất quán hơn vì cũng giống như dùngw
choaw,ow,uw
, dễ phân biệt tới từ tiếng anh nhưteen, toon ...
và cả với tiếng Việt như âmboong
chẳng hạn ... Tuy ít gặp nhưng cũng là một âm tiết tiếng Việt có ý nghĩa rõ ràng.Nhìn từ góc độ này thì việc làm lỏng luật hơn để việc gõ tiếng Việt nhanh hơn chút ít như gõ nhanh
cc=ch,gg=gi,nn=ng,qq=qu,pp=ph,th=th
, gõ tắt phụ âm đầuf=ph,j=gi,w=qu
, gõ tắt phụ âm cuốig=ng,h=nh,k=ch
, cùng với cách gõ bỏ dấu tự do (ở bất kỳ đâu sau nguyên âm) mặc dù tiện hơn đấy nhưng làm khó cho máy tính trong việc đoán người dùng đang gõ từ tiếng Việt hay đang gõ từ nước ngoài (tiếng Anh chẳng hạn).Mình đi ngược lại trào lưu này vì cho rằng nhiều luật làm cho khó nhớ, dễ lẫn và làm khó cho người lập trình cũng như máy tính. Mình gõ tiếng Việt pha lẫn tiếng Anh nhiều nên sau một thời gian thử đã tắt hết các luật mở rộng để hạn chế nhầm lẫn.
-
Phần hậu tố này có thể làm nhãn (tag) để huấn luyện máy học cách tự động bỏ dấu ...
-
Khi tách âm tiết bất kỳ thành
tiền tố + âm tiết không dấu viết thường + hậu tố
:^^ + viet + |zj
(gửi thông tin vào ngữ cảnh) sẽ làm giảm bộ từ vựng (vocab) chỉ còn còn khoảng < 3000 (xem fileaz_syll0m0ts.txt
). Lợi cho việc huấn luyện với tập dữ liệu nhỏ hoặc tài nguyên hạn chế. -
Việc sắp xếp cũng đơn giản hơn, ko có chuyện a, ă, â đứng cách xa nhau hàng km.
-
Tính toán độ giống nhau (similarity) để chữa lỗi chính tả do gõ bàn phím cũng dễ hơn vì lỗi dễ nắm bắt nhất là ở ngay lúc gõ phím chứ không phải ở bản thân ký tự (ascii hay utf-8). Đây là một lợi điểm nữa của
2. Gõ sao (cố gắng) lưu vậy
bằng việc dùng ascii để trình bày thay vì utf-8 vì ascii gần bàn phím (key-stroke) hơn utf-8.
Với người dùng: đó là khó đọc hơn utf-8, tuy đã dễ đọc hơn một chút so với kiểu ascii-telex muoi|wf vs muwowif
Tóm lại là 1 cách trình bày chuẩn và đúng đắn sẽ phát huy được ưu điểm trong phần lớn các tác vụ, giúp người lập trình và máy tính tối ưu trong việc xử lý và hỗ trợ người dùng. Cách trình bày này hướng tới điều đó.