Về lí thuyết, tiếng Việt có bao nhiêu âm tiết ở dạng chữ viết? Câu hỏi vớ vẩn này thỉnh thoảng lại làm lắm kẻ động lòng… Bây giờ kết hợp tất cả các “âm vị” ở dạng chữ viết, cho vào một danh sách. Sau đó tách danh sách to đó ra thành các danh sách nhỏ theo 4 mô hình vần. Từ đó ngồi nghĩ ra các luật để “trừ khử” dần các âm tiết không thể tồn tại.
Lâu không dùng Perl, dùng tạm PHP để nặn một con lợn xề có tên là make_raw_list.php
<?php $cons = array( '', 'b', 'c', 'ch', 'd', 'đ', 'g', 'gh', 'gi', 'h', 'k', 'kh', 'l', 'm', 'n', 'ng', 'ngh', 'nh', 'p', 'ph', 'q', 'r', 's', 't', 'th', 'tr', 'v', 'x'); $buff = array('', 'u', 'o'); $vowels = array( 'a', 'à', 'ả', 'ã', 'á', 'ạ', 'ă', 'ằ', 'ẳ', 'ẵ', 'ắ', 'ặ', 'â', 'ầ', 'ẩ', 'ẫ', 'ấ', 'ậ', 'e', 'è', 'ẻ', 'ẽ', 'é', 'ẹ', 'ê', 'ề', 'ể', 'ễ', 'ế', 'ệ', 'i', 'ì', 'ỉ', 'ĩ', 'í', 'ị', 'o', 'ò', 'ỏ', 'õ', 'ó', 'ọ', 'ô', 'ồ', 'ổ', 'ỗ', 'ố', 'ộ', 'ơ', 'ờ', 'ở', 'ỡ', 'ớ', 'ợ', 'u', 'ù', 'ủ', 'ũ', 'ú', 'ụ', 'ư', 'ừ', 'ử', 'ữ', 'ứ', 'ự', 'y', 'ỳ', 'ỷ', 'ỹ', 'ý', 'ỵ', 'ia', 'ìa', 'ỉa', 'ĩa', 'ía', 'ịa', 'iê', 'iề', 'iể', 'iễ', 'iế', 'iệ', 'ua', 'uà', 'uả', 'uã', 'uá', 'uạ', 'uô', 'uồ', 'uổ', 'uỗ', 'uố', 'uộ', 'ưa', 'ừa', 'ửa', 'ữa', 'ứa', 'ựa', 'ươ', 'ườ', 'ưở', 'ưỡ', 'ướ', 'ượ', 'ya', 'yà', 'yả', 'yã', 'yá', 'yạ', 'yê', 'yề', 'yể', 'yễ', 'yế', 'yệ'); $tails = array( '', 'c', 'ch', 'i', 'm', 'n', 'ng', 'nh', 'o', 'p', 't', 'u', 'y'); for ($i = 0; $i < count($cons); $i++) { $C = $cons[$i]; for ($j = 0; $j < count($buff); $j++) { $B = $buff[$j]; for ($k = 0; $k < count($vowels); $k++) { $V = $vowels[$k]; for ($l = 0; $l < count($tails); $l++) { $T = $tails[$l]; echo "$C$B$V$T\n"; } } } } ?>
Giờ thì tra tấn CPU.
$ php -f make_raw_list.php | sort > raw_list.txt
Công nhận con lợn xề này mắn tợn. Có chục giây mà đã xong một lô một lốc. Chỉ tội một nỗi là, theo ước đoán, sẽ có khoảng 90% là dị tật bẩm sinh. OK, biết thế. Bây giờ thả trâu bò ra để xem cái máy tính có đáng đồng tiền bát gạo hay không.
#!/bin/sh ################################################# # Xây dựng danh sách âm tiết theo mô hình vần # Mô hình tổng quát ÂM ĐỆM + ÂM CHÍNH + ÂM CUỐI # x110: /w/ + âm chính + /zero/ # x010: /zero/ + âm chính + /zero/ # x011: /zero/ + âm chính + không /zero/ # x111: /w/ + âm chính + không /zero/ ################################################# cons="(b|c|ch|d|đ|g|gh|gi|h|k|kh|l|m|n|ng|ngh|nh|p|ph|q|r|s|t|th|tr|v|x)?" cons_no_q="(b|c|ch|d|đ|g|gh|gi|h|k|kh|l|m|n|ng|ngh|nh|p|ph|r|s|t|th|tr|v|x)?" vowel_single="([aàảãáạăằẳẵắặâầẩẫấậeèẻẽéẹêềểễếệiìỉĩíịoòỏõóọôồổỗốộơờởỡớợuùủũúụưừửữứựyỳỷỹýỵ])" vowel_single_no_u="([aàảãáạăằẳẵắặâầẩẫấậeèẻẽéẹêềểễếệiìỉĩíịoòỏõóọôồổỗốộơờởỡớợùủũúụưừửữứựyỳỷỹýỵ])" vowel_double_zero="([iìỉĩíịuùủũúụưừửữứự]a)" vowel_double_nonzero="([iy][êềểễếệ]|ư[ơờởỡớợ]|u[ôồổỗốộ])" tails="(c|ch|i|m|n|ng|nh|o|p|t|u|y)" tails_no_y="(c|ch|i|m|n|ng|nh|o|p|t|u)" # x110 egrep "^(qu[aàảãáạ]|$cons(o[aàảãáạeèẻẽéẹ]|u[eèẻẽéẹêềểễếệơờởỡớợyỳỷỹýỵ]|uya))$" raw_list.txt > x110.txt # x010 # Trong mảng âm đầu, bỏ "q", nếu không sẽ kết hợp với nguyên âm đôi /uo/ ở dạng "ua" và thành âm [kwa] egrep "^($cons_no_q($vowel_single|$vowel_double_zero))$" raw_list.txt > x010.txt # x011 # 1. Bỏ "u" trong mảng nguyên âm đơn vì nếu không kết quả sẽ có các âm tiết có vần [wi]. egrep "^($cons($vowel_single_no_u|$vowel_double_nonzero|o[oòóỏõóọ])$tails|[uùủũúụ]$tails_no_y)$" raw_list.txt > x011.txt # 2. Trong phần kết quả, xoá "gio" # x111 # Phải tách mảng uy[aêềểễếệ] ra vì còn có các tổ hợp "uya, uy[$Ê]" egrep "^(($cons(o[aàảãáạăằẳẵắặeèẻẽéẹ]|u[ăằẳẵắặâầẩẫấậeèẻẽéẹêềểễếệơờởỡớợyỳỷỹýỵ])|uy[aêềểễếệ]|qu[aàảãáạ])$tails)$" raw_list.txt > x111.txt
Máy yếu thì đừng có mà cho trâu bò chạy loăng quăng. Dù đã có 1GB RAM yểm trợ nhưng cái Core 2 Duo T5500 vẫn phải mất 2 phút thở không ra hơi. Trong cuộc đời, có hàng nghìn những cái 2 phút vớ vẩn nhưng cũng có những cái 2 phút siêu vớ vẩn như thế này 😛 .
Nhờ công của lũ trâu bò kia, có khoảng 60% trường hợp được xác định là dị tật bẩm sinh và dĩ nhiên là đã được đào thải theo quy luật tự nhiên.
Cuối cùng, cái khó nhất là vẽ ra một đàn gà ta thuần chủng để “nhặt” những thứ rác rưởi mà lũ trâu bò kia không giải quyết được. Tuy nhiên, dù đã phác thảo ra được vài con nhưng rõ ràng đây là một công việc tỉ mỉ, vì thế, tạm dừng ở đây đã.
Bình luận