Kiểm tra cách gieo vần trong bài thơ

  • 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 ạ)
  1. 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:

  1. 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.
  2. Phân tách nguyên tâm và phụ âm dựa vào bảng tra.
  3. 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 ĂÂ 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

3 Likes

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

3 Likes

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

3 Likes

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”?

3 Likes

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 :thinking:

có thể phải “chấm điểm” âm chính xác, ví dụ au-au thì 10đ, au-ao thì 5đ :thinking:

có thể phải xét các ngoại lệ như từ “qua” tách ra là “a” chứ ko phải “ua” :thinking:

nói chung khó quá xin thầy bài giải thôi :kissing_closed_eyes:

7 Likes

Đú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. :v:

8 Likes

mua từ điển về liệt kê hết các âm vần tiếng Việt trước cái đã :sleepy:
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 :smiling_face_with_three_hearts:

4 Likes

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.

1 Like

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

4 Likes

Đú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

2 Likes

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 :innocent:

4 Likes

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ỉ

1 Like

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 :kissing_smiling_eyes:

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?