# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: chat bot
#     language: python
#     name: chatbot
# ---

# %load_ext autoreload
# %autoreload 2

# +
import kampuan as kp

kp.test()
# -



# +

phrase='สวัสดี'
kp.tokenize(phrase)
# -

kp.tokenize('ตลาด')

# * 2 word 2 syllabus case
#

# +
case_1 ={'กินข้าว':'กาวขิ้น',
         'หิวจัง':'หังจิว',
        'คำผวน':'ควนผำ',
        'นอนแล้ว':'แนวร้อน',
        'ตะปู':'ตูปะ',
        'นักเรียน':'เนียนรัก',
        'ขนม':'ขมหน่ะ'}

tmp=[kp.tokenize(key) for key in case_1.keys()]
tmp

# get 
# -

# # Subwords
#
# * initial_consonant
#     * single อักษรเดี่ยว
#         * sound_level (low/mid/high)
#         * low_single, low_double
#     * cluster อักษรควบ
#         * true_cluster อักษรควบแท้
#         * fasle_cluster อักษรควบไม่แท้
#     * leading_cluster อักษรนำ–อักษรตาม
#         * hornum_leading หอ นำ
#         * oarnum_leading ออ นำ
#         * non_conform_leading นำด้วยสูง หรือ กลาง  นคร ขนม
# * final_consonant
#     * type (dead/live)
#     * sound (eng)
#         * k: กก
#         * ng: กง
#         * t: กด
#         * m: กม
#         * n: กน
#         * p: กบ
#         * y: เกย
#         * v: เกอว
#     * sound_level low/mid/high
# * vowel
# * tone http://www.thai-language.com/ref/tone-rules
#     * tone_mark
#     * tone_sound

# +
import re
from kampuan.lang_tools import get_vowel_pattern,get_vowel_form,remove_tone_mark
from kampuan.sub_word import ThaiSubWord
vowel_pattern=get_vowel_pattern()
def match_pattern(pattern,text):
    m=re.match(pattern,text)
    return m

def match_vowel_form(text,vowel_patterns):
    for i,pattern in enumerate(vowel_patterns):
        m=re.match(pattern,text)
        if m:
            return (i,m,pattern)
    
    return (-1,text,text)
        
vowel_forms=get_vowel_form(REP='-')
test_text =['เขียว',
            'เกรียน',
            'ตู่',
            'ตด',
            'กร',
            'นอน',
           'ขนุน',
           'จัง',
           'กำ',
           'ใหญ่',
            'ใคร',
           'เดา',
           'เปรต',
           'เสร็จ',
           'ปีน',
           'เปี๊ยะ',
           'คั่ว',
           'แก้ม',
            'แช่ง',
            'แกล้ม',
            'แพร่',
           'แข็ง',
           'เกลอ',
           'เทอญ',
           'เกิด',
           'เตลิด',
           'กลม',
            'เลว',
            'เสก',
           'วัว',
           'เยี่ยม',
           'เพลง',
           'ปลอม',
           'หอม',
           'เวร',
           'อย่าง',
           'อยู่',
           'อย่า',
           'กวน' ,
           'แวว',
           'วน',
           'ว่าย',
           'สวย',
           'เขย',
           'เกรง',
            'แปลง',
            'กรง',
            'ธง',
            'ครี่',
            'แซง',
            'แปล',
            'แทรก',
            'ท้อ',
            'ท้อง',
            'ใคร',     
            'เสวย',   
            'เยี่ยม',
            'บรรณ',
            'สมุทร',
            'จันทร์',
            'พันธุ์', 
            'กริบ', 
            'อยาก',     
            'กบ', 
            'เกษม',
           'เออ']

for text in test_text:
    try:
        print(text,ThaiSubWord(text)._vowel_form,ThaiSubWord(text)._tone)
    except AttributeError:
        print(text,ThaiSubWord(text).two_syllable)
#     except IndexError:
#         print('error',text)
        
#     plain=remove_tone_mark(text)
#     (i,m,pattern)=match_vowel_form(plain,vowel_pattern)   
#     print('===')
#     print(m.groups(),vowel_forms[i],pattern)
# -

ThaiSubWord(text)

# +
from kampuan.const import THAI_VOW

len(THAI_VOW)

# +
# case เ แ need to verify ควบกล้ำ 
# 1 ตัว -> no สะกด
# 2 ตัว -> 1 สะกด
# 3 ตัว -> 1 สะกด

# อักษรนำ

# #initialize the special character cases
# #คำควบแท้
# self.two_char_combine = ['กร','กล', 'กว', 'คร', 'ขร', 'คล', 'ขล','คว', 'ขว', 'ตร', 'ปร', 'ปล', 'พร', 'พล' ,'ผล',
#            'บร','บล','ดร','ฟร','ฟล','ทร','จร','ซร','ปร','สร']
# #คำนำ
# self.lead_char_nosound = ['อย','หง','หญ','หน','หม','หย', 'หร','หล','หว']
# #อักษรสูงนำอักษรต่ำ
# self._lead_char_high_low = ['ขน', 'ขม','สม','สย','สน','ขย','ฝร','ถล','ผว','ตน','จม','ตล',]
# #อักษรสูงนำอักษรกลาง
# self._high_char_high_medium = ['ผท','ผด','ผก','ผอ','ผช']
# -

import pythainlp
pythainlp.thai_tonemarks

pythainlp.thai_punctuations

['-'+char for char in pythainlp.thai_below_vowels]

['_'+char for char in pythainlp.thai_tonemarks]

['_'+char for char in pythainlp.thai_above_vowels]

[char+'_' for char in pythainlp.thai_lead_vowels]

['_'+char for char in pythainlp.thai_follow_vowels]

pythainlp.thai_vowels

ThaiSubWord('กริบ')._ex_regex.groups()

ThaiSubWord('พันธุ์').__dict__

# +
from kampuan.const import MUTE_MARK, THAI_CONS, THAI_TONE, VOWEL_FORMS,df_tone_rule,THAI_VOW

def find_mute_vowel(text: str):
    """extract main mute vowel การันต์ case:('พันธุ์')

    Args:
        text (str): word to check

    Returns:
        List of tuple List[(int,str)]: return[] if no การันต์ , return [(index, consonant)]
    """

    if MUTE_MARK not in text:
        return []
    else:
        mark_index = text.index(MUTE_MARK)
        lead_mute=text[mark_index-1]
        if lead_mute in THAI_VOW:
            return [(mark_index-1,lead_mute)]
        else:
            return []
        
find_mute_vowel('พันธุ์')      
# -

ThaiSubWord('เกรง').__dict__

# # kampuan logic:
# 1. Input phrase
# 2. Split phrase to syllables
# 3. Sub word processing, types and tones
# 4. preprocessing on two syllable words
# 5. Determine two syllable to do the puan
# 6. Puan process, output new
#     * Tone assignment
#     * 
# 7. Fine tune sound no nymss
#     * case บัน บรร
#     * case same vowel sound
#     * case tune shift
#
#

# +
from kampuan import puan_kam

# # 1. Input phrase
# input_text ='สวัสดี'
# # input_text ='ไงสลิ่ม'

# def puan_kam_preprocess(input_text):
#     # 2. Split phrase to syllables
#     tokenized= tokenize(input_text)

#     # 3. Sub word processing, types and tones
#     sub_words=[ThaiSubWord(word) for word in tokenized]

#     # 4. preprocessing on two syllable words
#     split_words =[word_split for word in sub_words for word_split in word.split_non_conform()  ]
    
#     return split_words

# def puan_2_kam(a_raw,b_raw,keep_tone =None):
#     a_raw_tone=a_raw._tone
#     b_raw_tone=b_raw._tone

#     # swap vowel
#     a_target= b_raw._vowel_form_sound.replace('-',a_raw.init_con)
#     b_target= a_raw._vowel_form_sound.replace('-',b_raw.init_con)

#     # swap final con
#     a_target =ThaiSubWord(a_target +b_raw.final_con)
#     b_target =ThaiSubWord(b_target +a_raw.final_con)

#     # Swap tone    
#     # assign tones
#     if keep_tone is None:
#         if a_target._word_class =='dead' or b_target._word_class =='dead':
#             keep_tone =False
#         else:
#             keep_tone =True
        
#     if keep_tone:
#         a_target_tone=a_raw_tone
#         b_target_tone =b_raw_tone
#     else:
#         a_target_tone=b_raw_tone
#         b_target_tone =a_raw_tone

#     # apply tone rules
#     a_target=ThaiSubWord.pun_wunayook(a_target._raw,a_target_tone)
#     b_target=ThaiSubWord.pun_wunayook(b_target._raw,b_target_tone)

#     return a_target ,b_target

# def puan_kam_base(input_text='สวัสดี',keep_tone =None, use_first=True,index=None):
    
#     if isinstance(input_text,str):
#         split_words=puan_kam_preprocess(input_text)
#     else:
#         split_words =split_words
#     # 5. Determine two syllable to do the puan
#     if not index:
#         n_subwords=len(split_words)
#         index=(0,0)
#         if n_subwords ==1:
#             index=(0,0)
#         elif n_subwords==2:
#             index=(0,1)
#         elif use_first:
#             index =(0,-1)
#         else:
#             index=(1,-1)
#     # 6. Puan process, output new
#     # puan kum given two subwords
#     a_raw=split_words[index[0]]
#     b_raw=split_words[index[1]]
    
#     # apply tone rules
#     a_target,b_target=puan_2_kam(a_raw,b_raw,keep_tone =keep_tone)

#     # 7. combine
#     kam_puan= [w._raw for w in split_words]
#     kam_puan[index[0]]=a_target
#     kam_puan[index[1]]=b_target

#     return kam_puan

# def puan_kam_all(input_text='สวัสดี'):
#     keep_tone =[True,False]
#     use_first =[True,False]
#     result= {}
#     count=0
    
#     for k in keep_tone:
#         for j in  use_first:
#             result[count]=puan_kam_base(input_text=input_text,keep_tone =k,use_first=j)
#             count+=1
#     return result

# def puan_kam_auto(input_text='สวัสดี',use_first=None):
 
#     split_words=puan_kam_preprocess(input_text)
    
#     n_subwords=len(split_words)
    
#     index=(0,0)
#     if n_subwords ==1:
#         index=(0,0)
#     elif n_subwords==2:
#         index=(0,1)
#     elif n_subwords==3:
#         if split_words[0]._word_class =='dead':
#             index=(1,-1)
#         else:
#             index=(0,-1)
#     else:# more than 3 
#         if use_first is None:
#             return [puan_kam_base(input_text=input_text,keep_tone =None,index=(i,-1)) for i in [0,1]]
#         elif use_first:
#             index=(0,-1)
#         else:
#             index=(1,-1)
    
#     return puan_kam_base(input_text=input_text,keep_tone =None,index=index)

case_1 =['คำผวน',
         'นอนแล้ว',
         'ตะปู',
         'นักเรียน',
         'ขนม',
         'เรอทัก',
          'ลองดู',
         'เจอพี่',
         'เรอมัก',
        'อาไบ้',
        'หิวข้าว',
        'กะหล่ำ',
        'เจอหมึก']
for k in case_1:
    print(puan_kam(k))
# -

case_1 =['มะนาวต่างดุ๊ด',
         'กาเป็นหมู',
         'ก้างใหญ่',
         'อะหรี่ดอย',
         'นอนแล้ว',
         'ตะปู',
         'นักเรียน',
         'ขนม',
         'เรอทัก',
        'สวัสดี']
for k in case_1:
    print(k)
    print(puan_kam_auto(input_text=k))
    print('===========')

case_1 ={'กินข้าว':'กาวขิ้น',
         'หิวจัง':'หังจิว',
        'คำผวน':'ควนผำ',
        'นอนแล้ว':'แนวร้อน',
        'ตะปู':'ตูปะ',
        'นักเรียน':'เนียนรัก',
        'ขนม':'ขมหน่ะ',
        'เรอทัก':'รักเธอ'}
for k,v in case_1.items():
    print(k,v)
    print(puan_kam(k))
    print('===========')

# +
from kampuan.lang_tools import convert_tone_pair_double_init, convert_tone_pair_single_init,remove_tone_mark
from kampuan.const import TONE_MARK_CLASS_INV
from kampuan.sub_word import ThaiSubWord
import logging

test_text=[
    'ไก่',
    'เป็ด',  
    'แคง',
    'แข็ง',
    'ขาว',
    'ด๊วด',
    'หมา',
    'คราว',
    'คน',
    'ทราบ',
    'ก็',
    'ภูมิ',
] 
    
for text in test_text:
    print('-----',text)
    for i in range(0,5): 
        print(ThaiSubWord.pun_wunayook(text,tone_target=i))

# +
from IPython.display import display

test_text=[
    'ภูมิ',
    'พยาธิ',
    'ชาติ',
    'สาเหตุ',
    'ธาตุ'
] 
for text in test_text:
    sw =ThaiSubWord(text)
    print(text,sw._ex_vw_form)
    display(sw.__dict__)
    print()


StarcoderdataJupyterScriptsDedupFiltered