- Em chào mọi người, em có một bài tập là viết làm kt_gieovan(char a[], charb [])-“kiểm tra gieo vần”.
- Trong thơ lục bát, tiếng thứ 6 của câu lục vần với tiếng thứ 6 của câu bát, và tiếng thứ 8 của câu bát vần với tiếng thứ 6 của câu lục kế tiếp. Ví dụ:
Trăm năm trong cõi người “ta”.
Chữ tài chữ mệnh khéo “là” ghét “nhau”
Trải qua một cuộc bể “dâu”
Những điều trông thấy mà “đau” đớn lòng. - Anh/chị có thể giúp em tìm hướng giải quyết bài này được không ạ? Về việc kiểm tra hai từ có hiệp vần với nhau không ạ, em cám ơn nhiều.
(Input bài thơ không có dấu ạ)
Kiểm tra cách gieo vần trong bài thơ
- Tiếng Việt phải theo hệ Unicode/UTF-8, do đó không thể xử lý kiểu char thông thường đơn giản được. Việc quyết định dùng char hay đổi qua wchar_t để xử lý là 1 bài toán không đơn giản. Mình nghĩ đây là vấn đề khó nhất.
Sau khi đã chọn được cho mình phương hướng step 0, thì làm tiếp:
- Loại bỏ dấu (sắc huyền ngã hỏi nặng), và bỏ âm như: âu thành au, ăm thành am.
- Phân tách nguyên tâm và phụ âm dựa vào bảng tra.
- So sánh, ví dụ nh-au và d-au
Bước 1 cũng có thể dùng kỹ thuật bảng tra để làm.
Nếu bạn lựa chọn theo cách dùng char ở Step 0 thì để có bảng tra thì bạn phải lần lượt in tất cả các âm tiếng việt ra rồi tự map nó lại.
1 Ví dụ: Khi in Ă
và Â
sẽ có kết quả sau:
char a[]="Ă";
for (char i=0;i<sizeof(a);i++){
printf("%02X ", a[i]);
}
printf("\n");
char b[]="Â";
for (char i=0;i<sizeof(b);i++){
printf("%02X ", b[i]);
}
printf("\n");
FFFFFFC4 FFFFFF82 00
FFFFFFC3 FFFFFF82 00
Input bài thơ không có dấu ạ, em xin lỗi em nhầm mất ạ, nếu như vậy thì mình làm như thế nào vậy anh?
Đọc tới bước 1 của bạn là thấy sai rồi
Lập trình là biết mình cần làm gì trước khi làm
Bạn còn chưa hiểu đề thì thua rồi
Mình không hiểu thật sự luôn bạn à :(( Phiền bạn giúp mình với được không?
Lập trình là giải quyết vấn đề, là mô tả những gì bạn cần làm cho máy tính để máy tính thực hiện
Bạn còn không biết bạn cần làm gì thì nói gì tới lập trình
Vâng, mình cám ơn bạn góp ý
Nếu không dấu thì đơn giản thôi.
Nhưng vì mình đã trình bày ở trên mà bạn vẫn không hiểu. Thì mình sẽ không gợi ý cách giải mà hỏi bạn:
Nếu là con người thì làm cách nào để người đó biết 2 chữ vần nhau?
Ví dụ : “Can” và “Chan”?
Dạ, vấn đề này em hiểu, em đã code rồi ạ, em có thắc mắc là chữ “khôn” với “buồn” nó vần với nhau phải k ạ? Vì đề nói nó hiệp vần lưng, em cám ơn.
phải nhóm các cụm âm lại thành nhóm có âm chung nữa, ví dụ au-ao, oa-a gì chẳng hạn
có thể phải “chấm điểm” âm chính xác, ví dụ au-au thì 10đ, au-ao thì 5đ
có thể phải xét các ngoại lệ như từ “qua” tách ra là “a” chứ ko phải “ua”
nói chung khó quá xin thầy bài giải thôi
Đúng rồi, mấy cái corner case này có khi giáo sư Ngôn ngữ Tiếng Việt học còn không liệt kê hết 1 lúc được.
Mình chắc chắn với bạn là thầy chỉ cần chạy trường hợp cơ bản để kiểm tra khả năng lập trình của bạn.
Còn nếu thầy chơi nổi chọn các kiểu như iu, yêu
, oa, a
, uây, ay
thì kiểu gì chương trình của thầy cũng thiếu corner case.
mua từ điển về liệt kê hết các âm vần tiếng Việt trước cái đã
hình như tiếng Việt có khoảng 30k-40k từ, duyệt tách phần âm của tất cả các từ đó ra, cho vào cái set, rồi từ cái set đó dùng máy chạy bằng cơm nhóm lại các nhóm có âm vần giống nhau
Dạ vâng, em cám ơn anh/chị nhiều ạ.
Bạn có link submit bài không bạn? Mình muốn submit thử bài này.
Bài này nộp qua mail thôi ạ!
có danh sách các âm tiếng tiếng Việt nè: https://luom.tv/linhtinh/2020/04/LuomTV-amtiet-tiengViet.txt
người ta để encoding sai cứ save file về mở lên encoding utf-8 là được :V
Đúng rồi, tiếng Việt rất giàu và đẹp.
Nhiều khi vần trong thơ chệch âm rất nhiều.
Phần mềm kiểm tra cách gieo vần này làm ra cũng chỉ mang tính tương đối thôi
nếu có dấu thì có khoảng 156 vần theo cái link luom.tv kia:
a ac ach ai am an ang anh ao ap at au ay
ăc ăm ăn ăng ăp ăt
âc âm ân âng âp ât âu ây
e ec em en eng eo ep et
ê êc êch êm ên êng ênh êp êt êu
i ia ich iêc iêm iên iêng iêp iêt iêu im in inh ip it iu
o oa oac oach oai oam oan oang oanh oao oap oat oay oăc oăm oăn oăng oăt oc oe oen oeo oet oi om on ong ooc oong op ot
ô ôc ôi ôm ôn ông ôp ôt
ơ ơi ơm ơn ơp ơt
u ua uân uâng uât uây uc uê uêch uênh ui um un ung uôc uôi uôm uôn uông uôt uơ up ut uy uya uych uyên uyêt uyn uynh uyp uyt uyu
ư ưa ưc ưi ưm ưn ưng ươc ươi ươm ươn ương ươp ươt ươu ưt ưu
mấy vần có y dài đứng đầu thì chuyển thành i ngắn hết nha :V ví dụ quýt
có vần ýt
thì chuyển thành ít
bỏ dấu sắc còn it
bỏ cả mũ thì còn 102 “vần”
a ac ach ai am an ang anh ao ap at au ay
e ec ech em en eng enh eo ep et eu
i ia ich iec iem ien ieng iep iet ieu im in inh ip it iu
o oa oac oach oai oam oan oang oanh oao oap oat oay oc oe oen oeo oet oi om on ong ooc oong op ot
u ua uan uang uat uay uc ue uech uenh ui um un ung uo uoc uoi uom uon uong uop uot uou up ut uu uy uya uych uyen uyet uyn uynh uyp uyt uyu
giờ thì nối 102 vần này lại với nhau là được, có khoảng 5000 cặp thôi
này không cần thiết phải list ra full vần
ví dụ như
o oa oac oach oai oam oan oang oanh oao oap oat oay oăc oăm oăn oăng oăt oc oe oen oeo oet oi om on ong ooc oong op ot
chỉ cần o, oa là bao hết cái đống thanh ngang ở trên rồi
oap oat… thì cái này hiển nhiên sẽ đi kèm thanh sắc hoặc nặng, mà nếu là có thanh sắc hoặc nặng thì nó khong phải là o hay oa nữa rồi
có vẻ như chỉ cần check có bất kì nguyên âm trong chữ có dấu sắc -ngã -nặng là phán được rồi
á ả ã ạ
ắ ẳ ẵ ặ
ấ ẩ ẫ ậ
é ẻ ẽ ẹ
ế ể ễ ệ
ó ỏ õ ọ
ố ổ ỗ ộ
ớ ở ỡ ợ
ú ủ ũ ụ
ứ ử ữ ự
í ỉ ĩ ị
ý ỷ ỹ ỵ
chỉ cần từ có chứa bất kì chữ nào là cái đống trên thì nó là thanh sắc, không chứa thì là thanh ngang
có sót gì không nhỉ
xét vần thôi mà đâu có xét thanh đâu. Vần thôi đã ko làm nổi rồi =]
DNH nên để capcha xét 2 câu thơ lục bát có vần với nhau hay ko để thu thập dữ liệu vần điệu cho máy học