@@ -22,7 +22,7 @@ def __init__(self):
22
22
KhaveeVerifier: Thai Poetry verifier
23
23
"""
24
24
25
- def check_sara (self , word : str )-> str :
25
+ def check_sara (self , word : str ) -> str :
26
26
"""
27
27
Check the vowels in the Thai word.
28
28
@@ -216,13 +216,17 @@ def check_marttra(self, word: str) -> str:
216
216
print(kv.check_marttra('สาว'))
217
217
# output: 'เกอว'
218
218
"""
219
- if word [- 1 ] == 'ร' and word [- 2 ] in ['ต' ,'ท' ] :
219
+ if word [- 1 ] == 'ร' and word [- 2 ] in ['ต' , 'ท' ]:
220
220
word = word [:- 1 ]
221
221
word = self .handle_karun_sound_silence (word )
222
222
word = remove_tonemark (word )
223
223
if 'ำ' in word or ('ํ' in word and 'า' in word ) or 'ไ' in word or 'ใ' in word :
224
224
return 'กา'
225
- elif word [- 1 ] in ['า' ,'ะ' ,'ิ' ,'ี' ,'ุ' ,'ู' ,'อ' ] or ('ี' in word and 'ย' in word [- 1 ]) or ('ื' in word and 'อ' in word [- 1 ]):
225
+ elif (
226
+ word [- 1 ] in ['า' , 'ะ' , 'ิ' , 'ี' , 'ุ' , 'ู' , 'อ' ] or
227
+ ('ี' in word and 'ย' in word [- 1 ]) or
228
+ ('ื' in word and 'อ' in word [- 1 ])
229
+ ):
226
230
return 'กา'
227
231
elif word [- 1 ] in ['ง' ]:
228
232
return 'กง'
@@ -235,11 +239,13 @@ def check_marttra(self, word: str) -> str:
235
239
return 'เกย'
236
240
elif word [- 1 ] in ['ว' ]:
237
241
return 'เกอว'
238
- elif word [- 1 ] in ['ก' ,'ข' ,'ค' ,'ฆ' ]:
242
+ elif word [- 1 ] in ['ก' , 'ข' , 'ค' , 'ฆ' ]:
239
243
return 'กก'
240
- elif word [- 1 ] in ['จ' ,'ช' ,'ซ' ,'ฎ' ,'ฏ' ,'ฐ' ,'ฑ' ,'ฒ' ,'ด' ,'ต' ,'ถ' ,'ท' ,'ธ' ,'ศ' ,'ษ' ,'ส' ] :
244
+ elif word [- 1 ] in [
245
+ 'จ' , 'ช' , 'ซ' , 'ฎ' , 'ฏ' , 'ฐ' , 'ฑ' , 'ฒ' , 'ด' , 'ต' , 'ถ' , 'ท' , 'ธ' , 'ศ' , 'ษ' , 'ส'
246
+ ]:
241
247
return 'กด'
242
- elif word [- 1 ] in ['ญ' ,', ณ' , 'น' , 'ร' , 'ล' , 'ฬ' ]:
248
+ elif word [- 1 ] in ['ญ' , ', ณ' , 'น' , 'ร' , 'ล' , 'ฬ' ]:
243
249
return 'กน'
244
250
elif word [- 1 ] in ['บ' , 'ป' , 'พ' , 'ฟ' , 'ภ' ]:
245
251
return 'กบ'
@@ -249,8 +255,7 @@ def check_marttra(self, word: str) -> str:
249
255
else :
250
256
return 'Cant find Marttra in this word'
251
257
252
-
253
- def is_sumpus (self , word1 : str ,word2 : str ) -> bool :
258
+ def is_sumpus (self , word1 : str , word2 : str ) -> bool :
254
259
"""
255
260
Check the rhyme between two words.
256
261
@@ -266,10 +271,10 @@ def is_sumpus(self, word1: str,word2: str) -> bool:
266
271
267
272
kv = KhaveeVerifier()
268
273
269
- print(kv.is_sumpus('สรร','อัน'))
274
+ print(kv.is_sumpus('สรร', 'อัน'))
270
275
# output: True
271
276
272
- print(kv.is_sumpus('สรร','แมว'))
277
+ print(kv.is_sumpus('สรร', 'แมว'))
273
278
# output: False
274
279
"""
275
280
marttra1 = self .check_marttra (word1 )
@@ -290,13 +295,27 @@ def is_sumpus(self, word1: str,word2: str) -> bool:
290
295
marttra2 = 'กา'
291
296
return bool (marttra1 == marttra2 and sara1 == sara2 )
292
297
293
- def check_karu_lahu (self ,text ):
294
- if (self .check_marttra (text ) != 'กา' or (self .check_marttra (text ) == 'กา' and self .check_sara (text ) in ['อา' ,'อี' , 'อือ' , 'อู' , 'เอ' , 'แอ' , 'โอ' , 'ออ' , 'เออ' , 'เอีย' , 'เอือ' ,'อัว' ]) or self .check_sara (text ) in ['อำ' ,'ไอ' ,'เอา' ]) and text not in ['บ่' ,'ณ' ,'ธ' ,'ก็' ]:
298
+ def check_karu_lahu (self , text ):
299
+ if (
300
+ (
301
+ self .check_marttra (text ) != 'กา' or
302
+ (
303
+ self .check_marttra (text ) == 'กา' and
304
+ self .check_sara (text ) in [
305
+ 'อา' , 'อี' , 'อือ' , 'อู' , 'เอ' ,
306
+ 'แอ' , 'โอ' , 'ออ' , 'เออ' , 'เอีย' ,
307
+ 'เอือ' , 'อัว'
308
+ ]
309
+ ) or
310
+ self .check_sara (text ) in ['อำ' , 'ไอ' , 'เอา' ]
311
+ ) and
312
+ text not in ['บ่' , 'ณ' , 'ธ' , 'ก็' ]
313
+ ):
295
314
return 'karu'
296
315
else :
297
316
return 'lahu'
298
317
299
- def check_klon (self , text : str ,k_type : int = 8 ) -> Union [List [str ], str ]:
318
+ def check_klon (self , text : str , k_type : int = 8 ) -> Union [List [str ], str ]:
300
319
"""
301
320
Check the suitability of the poem according to Thai principles.
302
321
@@ -312,11 +331,22 @@ def check_klon(self, text: str,k_type: int=8) -> Union[List[str], str]:
312
331
313
332
kv = KhaveeVerifier()
314
333
315
- print(kv.check_klon('''ฉันชื่อหมูกรอบ ฉันชอบกินไก่ แล้วก็วิ่งไล่ หมาชื่อนํ้าทอง ลคคนเก่ง เอ๋งเอ๋งคะนอง มีคนจับจอง เขาชื่อน้องเธียร''', k_type=4))
334
+ print(kv.check_klon(
335
+ 'ฉันชื่อหมูกรอบ ฉันชอบกินไก่ แล้วก็วิ่งไล่ หมาชื่อนํ้าทอง ลคคนเก่ง เอ๋งเอ๋งคะนอง \
336
+ มีคนจับจอง เขาชื่อน้องเธียร',
337
+ k_type=4
338
+ ))
316
339
# output: The poem is correct according to the principle.
317
340
318
- print(kv.check_klon('''ฉันชื่อหมูกรอบ ฉันชอบกินไก่ แล้วก็วิ่งไล่ หมาชื่อนํ้าทอง ลคคนเก่ง เอ๋งเอ๋งเสียงหมา มีคนจับจอง เขาชื่อน้องเธียร''',k_type=4))
319
- # # -> ["Can't find rhyme between paragraphs ('หมา', 'จอง')in paragraph 2", "Can't find rhyme between paragraphs ('หมา', 'ทอง')in paragraph 2"]
341
+ print(kv.check_klon(
342
+ 'ฉันชื่อหมูกรอบ ฉันชอบกินไก่ แล้วก็วิ่งไล่ หมาชื่อนํ้าทอง ลคคนเก่ง \
343
+ เอ๋งเอ๋งเสียงหมา มีคนจับจอง เขาชื่อน้องเธียร',
344
+ k_type=4
345
+ ))
346
+ # output: [
347
+ "Can't find rhyme between paragraphs ('หมา', 'จอง') in paragraph 2",
348
+ "Can't find rhyme between paragraphs ('หมา', 'ทอง') in paragraph 2"
349
+ ]
320
350
"""
321
351
if k_type == 8 :
322
352
try :
@@ -327,34 +357,63 @@ def check_klon(self, text: str,k_type: int=8) -> Union[List[str], str]:
327
357
list_sumpus_sent3 = []
328
358
list_sumpus_sent4 = []
329
359
for i , sent in enumerate (text .split ()):
330
- sub_sent = subword_tokenize (sent ,engine = 'dict' )
360
+ sub_sent = subword_tokenize (sent , engine = 'dict' )
331
361
if len (sub_sent ) > 10 :
332
- error .append ('In sentence ' + str (i + 2 )+ ', there are more than 10 words. ' + str (sub_sent ))
333
- if (i + 1 ) % 4 == 1 :
362
+ error .append (
363
+ 'In sentence ' +
364
+ str (i + 2 ) +
365
+ ', there are more than 10 words. ' +
366
+ str (sub_sent )
367
+ )
368
+ if (i + 1 ) % 4 == 1 :
334
369
list_sumpus_sent1 .append (sub_sent [- 1 ])
335
- elif (i + 1 ) % 4 == 2 :
336
- list_sumpus_sent2h .append ([sub_sent [1 ],sub_sent [2 ],sub_sent [3 ],sub_sent [4 ]])
370
+ elif (i + 1 ) % 4 == 2 :
371
+ list_sumpus_sent2h .append (
372
+ [sub_sent [1 ], sub_sent [2 ], sub_sent [3 ], sub_sent [4 ]]
373
+ )
337
374
list_sumpus_sent2l .append (sub_sent [- 1 ])
338
- elif (i + 1 ) % 4 == 3 :
375
+ elif (i + 1 ) % 4 == 3 :
339
376
list_sumpus_sent3 .append (sub_sent [- 1 ])
340
- elif (i + 1 ) % 4 == 0 :
377
+ elif (i + 1 ) % 4 == 0 :
341
378
list_sumpus_sent4 .append (sub_sent [- 1 ])
342
- if len (list_sumpus_sent1 ) != len (list_sumpus_sent2h ) or len (list_sumpus_sent2h ) != len (list_sumpus_sent2l ) or len (list_sumpus_sent2l ) != len (list_sumpus_sent3 ) or len (list_sumpus_sent3 ) != len (list_sumpus_sent4 ) or len (list_sumpus_sent4 ) != len (list_sumpus_sent1 ):
379
+ if (
380
+ len (list_sumpus_sent1 ) != len (list_sumpus_sent2h ) or
381
+ len (list_sumpus_sent2h ) != len (list_sumpus_sent2l ) or
382
+ len (list_sumpus_sent2l ) != len (list_sumpus_sent3 ) or
383
+ len (list_sumpus_sent3 ) != len (list_sumpus_sent4 ) or
384
+ len (list_sumpus_sent4 ) != len (list_sumpus_sent1 )
385
+ ):
343
386
return 'The poem does not have 4 complete sentences.'
344
387
else :
345
388
for i in range (len (list_sumpus_sent1 )):
346
389
countwrong = 0
347
390
for j in list_sumpus_sent2h [i ]:
348
391
if self .is_sumpus (list_sumpus_sent1 [i ], j ) is False :
349
- countwrong += 1
350
- if countwrong > 3 :
351
- error .append ('Can\' t find rhyme between paragraphs ' + str ((list_sumpus_sent1 [i ],list_sumpus_sent2h [i ]))+ ' in paragraph ' + str (i + 1 ))
392
+ countwrong += 1
393
+ if countwrong > 3 :
394
+ error .append (
395
+ 'Can\' t find rhyme between paragraphs ' +
396
+ str ((list_sumpus_sent1 [i ], list_sumpus_sent2h [i ])) +
397
+ ' in paragraph ' +
398
+ str (i + 1 )
399
+ )
352
400
if self .is_sumpus (list_sumpus_sent2l [i ], list_sumpus_sent3 [i ]) is False :
353
- # print(sumpus_sent2l,sumpus_sent3)
354
- error .append ('Can\' t find rhyme between paragraphs ' + str ((list_sumpus_sent2l [i ],list_sumpus_sent3 [i ]))+ ' in paragraph ' + str (i + 1 ))
401
+ error .append (
402
+ 'Can\' t find rhyme between paragraphs ' +
403
+ str ((list_sumpus_sent2l [i ], list_sumpus_sent3 [i ])) +
404
+ ' in paragraph ' +
405
+ str (i + 1 )
406
+ )
355
407
if i > 0 :
356
- if self .is_sumpus (list_sumpus_sent2l [i ], list_sumpus_sent4 [i - 1 ]) is False :
357
- error .append ('Can\' t find rhyme between paragraphs ' + str ((list_sumpus_sent2l [i ],list_sumpus_sent4 [i - 1 ]))+ ' in paragraph ' + str (i + 1 ))
408
+ if self .is_sumpus (
409
+ list_sumpus_sent2l [i ], list_sumpus_sent4 [i - 1 ]
410
+ ) is False :
411
+ error .append (
412
+ 'Can\' t find rhyme between paragraphs ' +
413
+ str ((list_sumpus_sent2l [i ], list_sumpus_sent4 [i - 1 ])) +
414
+ ' in paragraph ' +
415
+ str (i + 1 )
416
+ )
358
417
if not error :
359
418
return 'The poem is correct according to the principle.'
360
419
else :
@@ -370,36 +429,61 @@ def check_klon(self, text: str,k_type: int=8) -> Union[List[str], str]:
370
429
list_sumpus_sent3 = []
371
430
list_sumpus_sent4 = []
372
431
for i , sent in enumerate (text .split ()):
373
- sub_sent = subword_tokenize (sent ,engine = 'dict' )
432
+ sub_sent = subword_tokenize (sent , engine = 'dict' )
374
433
if len (sub_sent ) > 5 :
375
- error .append ('In sentence ' + str (i + 2 )+ ', there are more than 4 words. ' + str (sub_sent ))
376
- if (i + 1 ) % 4 == 1 :
434
+ error .append (
435
+ 'In sentence ' +
436
+ str (i + 2 ) +
437
+ ', there are more than 4 words. ' +
438
+ str (sub_sent )
439
+ )
440
+ if (i + 1 ) % 4 == 1 :
377
441
list_sumpus_sent1 .append (sub_sent [- 1 ])
378
- elif (i + 1 ) % 4 == 2 :
379
- # print([sub_sent[1],sub_sent[2]])
380
- list_sumpus_sent2h .append ([sub_sent [1 ],sub_sent [2 ]])
442
+ elif (i + 1 ) % 4 == 2 :
443
+ list_sumpus_sent2h .append ([sub_sent [1 ], sub_sent [2 ]])
381
444
list_sumpus_sent2l .append (sub_sent [- 1 ])
382
- elif (i + 1 ) % 4 == 3 :
445
+ elif (i + 1 ) % 4 == 3 :
383
446
list_sumpus_sent3 .append (sub_sent [- 1 ])
384
- elif (i + 1 ) % 4 == 0 :
447
+ elif (i + 1 ) % 4 == 0 :
385
448
list_sumpus_sent4 .append (sub_sent [- 1 ])
386
- if len (list_sumpus_sent1 ) != len (list_sumpus_sent2h ) or len (list_sumpus_sent2h ) != len (list_sumpus_sent2l ) or len (list_sumpus_sent2l ) != len (list_sumpus_sent3 ) or len (list_sumpus_sent3 ) != len (list_sumpus_sent4 ) or len (list_sumpus_sent4 ) != len (list_sumpus_sent1 ):
449
+ if (
450
+ len (list_sumpus_sent1 ) != len (list_sumpus_sent2h ) or
451
+ len (list_sumpus_sent2h ) != len (list_sumpus_sent2l ) or
452
+ len (list_sumpus_sent2l ) != len (list_sumpus_sent3 ) or
453
+ len (list_sumpus_sent3 ) != len (list_sumpus_sent4 ) or
454
+ len (list_sumpus_sent4 ) != len (list_sumpus_sent1 )
455
+ ):
387
456
return 'The poem does not have 4 complete sentences.'
388
457
else :
389
458
for i in range (len (list_sumpus_sent1 )):
390
459
countwrong = 0
391
460
for j in list_sumpus_sent2h [i ]:
392
- # print(list_sumpus_sent1[i],j)
393
461
if self .is_sumpus (list_sumpus_sent1 [i ], j ) is False :
394
- countwrong += 1
395
- if countwrong > 1 :
396
- error .append ('Can\' t find rhyme between paragraphs ' + str ((list_sumpus_sent1 [i ],list_sumpus_sent2h [i ]))+ 'in paragraph ' + str (i + 1 ))
462
+ countwrong += 1
463
+ if countwrong > 1 :
464
+ error .append (
465
+ 'Can\' t find rhyme between paragraphs ' +
466
+ str ((list_sumpus_sent1 [i ], list_sumpus_sent2h [i ])) +
467
+ ' in paragraph ' +
468
+ str (i + 1 )
469
+ )
397
470
if self .is_sumpus (list_sumpus_sent2l [i ], list_sumpus_sent3 [i ]) is False :
398
- # print(sumpus_sent2l,sumpus_sent3)
399
- error .append ('Can\' t find rhyme between paragraphs ' + str ((list_sumpus_sent2l [i ],list_sumpus_sent3 [i ]))+ 'in paragraph ' + str (i + 1 ))
471
+ error .append (
472
+ 'Can\' t find rhyme between paragraphs ' +
473
+ str ((list_sumpus_sent2l [i ], list_sumpus_sent3 [i ])) +
474
+ ' in paragraph ' +
475
+ str (i + 1 )
476
+ )
400
477
if i > 0 :
401
- if self .is_sumpus (list_sumpus_sent2l [i ], list_sumpus_sent4 [i - 1 ]) is False :
402
- error .append ('Can\' t find rhyme between paragraphs ' + str ((list_sumpus_sent2l [i ],list_sumpus_sent4 [i - 1 ]))+ ' in paragraph ' + str (i + 1 ))
478
+ if self .is_sumpus (
479
+ list_sumpus_sent2l [i ], list_sumpus_sent4 [i - 1 ]
480
+ ) is False :
481
+ error .append (
482
+ 'Can\' t find rhyme between paragraphs ' +
483
+ str ((list_sumpus_sent2l [i ], list_sumpus_sent4 [i - 1 ])) +
484
+ ' in paragraph ' +
485
+ str (i + 1 )
486
+ )
403
487
if not error :
404
488
return 'The poem is correct according to the principle.'
405
489
else :
@@ -410,7 +494,11 @@ def check_klon(self, text: str,k_type: int=8) -> Union[List[str], str]:
410
494
else :
411
495
return 'Something went wrong. Make sure you enter it in the correct form.'
412
496
413
- def check_aek_too (self , text : Union [List [str ], str ], dead_syllable_as_aek :bool = False ) -> Union [List [bool ], List [str ], bool , str ]:
497
+ def check_aek_too (
498
+ self ,
499
+ text : Union [List [str ], str ],
500
+ dead_syllable_as_aek : bool = False
501
+ ) -> Union [List [bool ], List [str ], bool , str ]:
414
502
"""
415
503
Checker of Thai tonal words
416
504
@@ -428,9 +516,9 @@ def check_aek_too(self, text: Union[List[str], str], dead_syllable_as_aek:bool =
428
516
429
517
# การเช็คคำเอกโท
430
518
print(kv.check_aek_too('เอง'), kv.check_aek_too('เอ่ง'), kv.check_aek_too('เอ้ง'))
431
- ## -> False, aek, too
519
+ # -> False, aek, too
432
520
print(kv.check_aek_too(['เอง', 'เอ่ง', 'เอ้ง'])) # ใช้ List ได้เหมือนกัน
433
- ## -> [False, 'aek', 'too']
521
+ # -> [False, 'aek', 'too']
434
522
435
523
436
524
"""
0 commit comments