Last active
April 13, 2020 04:16
-
-
Save korakot/0b772e09340cac2f493868da035597e8 to your computer and use it in GitHub Desktop.
Thai Soundex LK82, Udom83
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ตาม guru.sanook.com/1520 | |
import re | |
t1 = str.maketrans("กขฃคฅฆงจฉชฌซศษสญยฎดฏตณนฐฑฒถทธบปผพภฝฟมรลฬฤฦวหฮอ", | |
"กกกกกกงจชชชซซซซยยดดตตนนททททททบปพพพฟฟมรรรรรวหหอ") | |
t2 = str.maketrans( | |
"กขฃคฅฆงจฉชซฌฎฏฐฑฒดตถทธศษสญณนรลฬฤฦบปพฟภผฝมำยวไใหฮาๅึืเแโุูอ", | |
"1111112333333333333333333444444445555555667777889AAABCDEEF") | |
def LK82(s): | |
res = [] | |
s = re.sub("[่-๋]", "", s) # 4.ลบวรรณยุกต์ | |
s = re.sub("[ก-ฮ][ิุู]?์", "", s) # 4.ลบการันต์ | |
s = re.sub("[็ํฺๆฯ]", "", s) # 5.ทิ้งไม้ไต่คู่ ฯลฯ | |
# 6.เข้ารหัสตัวแรก | |
if 'ก'<=s[0]<='ฮ': | |
res.append(s[0].translate(t1)) | |
s = s[1:] | |
else: | |
res.append(s[1].translate(t1)) | |
res.append(s[0].translate(t2)) | |
s = s[2:] | |
# เข้ารหัสตัวที่เหลือ | |
i_v = None # ตำแหน่งตัวคั่นล่าสุด (สระ) | |
for i,c in enumerate(s): | |
if c in "ะัิี": # 7. ตัวคั่นเฉยๆ | |
i_v = i | |
res.append('') | |
elif c in "าๅึืู": # 8.คั่นและใส่ | |
i_v = i | |
res.append(c.translate(t2)) | |
elif c == 'ุ': # 9.สระอุ | |
i_v = i | |
if i==0 or (s[i-1] not in "ตธ"): | |
res.append(c.translate(t2)) | |
else: | |
res.append('') | |
elif c in 'หอ': | |
if i+1<len(s) and (s[i+1] in "ึืุู"): | |
res.append(c.translate(t2)) | |
elif c in 'รวยฤฦ': | |
if i_v == i-1 or (i+1<len(s) and (s[i+1] in "ึืุู")): | |
res.append(c.translate(t2)) | |
else: | |
res.append(c.translate(t2)) # 12. | |
# 13. เอาตัวซ้ำออก | |
res2 = [res[0]] | |
for i in range(1, len(res)): | |
if res[i] != res[i-1]: | |
res2.append(res[i]) | |
# 14. เติมศูนย์ให้ครบ ถ้าเกินก็ตัด | |
return ("".join(res2)+"0000")[:5] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ตาม https://sites.google.com/site/knowledgecomplex/porkaerm-kar-subkhn-kha-thiy-tam-seiyng-xan-thai-soundex | |
import re | |
tu1 = str.maketrans("กขฃคฅฆงจฉชฌซศษสฎดฏตฐฑฒถทธณนบปผพภฝฟมญยรลฬฤฦวอหฮ" | |
,"กขขขขขงจชชชสสสสดดตตททททททนนบปพพพฟฟมยยรรรรรวอฮฮ") | |
tu2 = str.maketrans("มวำกขฃคฅฆงยญณนฎฏดตศษสบปพภผฝฟหอฮจฉชซฌฐฑฒถทธรฤลฦ" | |
,"0001111112233344444445555666666777778888889999") | |
def Udom83(s): | |
s = re.sub('รร([เ-ไ])', 'ัน\\1', s) # 4. | |
s = re.sub('รร([ก-ฮ][ก-ฮเ-ไ])', 'ั\\1', s) # 5. | |
s = re.sub('รร([ก-ฮ][ะ-ู่-์])','ัน\\1', s) | |
s = re.sub('รร', 'ัน', s) | |
s = re.sub('ไ([ก-ฮ]ย)', '\\1', s) # 2. | |
s = re.sub('[ไใ]([ก-ฮ])','\\1ย', s) | |
s = re.sub('ำ(ม[ะ-ู])', 'ม\\1', s) # 3. | |
s = re.sub('ำม', 'ม', s) | |
s = re.sub('ำ', 'ม', s) | |
s = re.sub('จน์|มณ์|ณฑ์|ทร์|ตร์|[ก-ฮ]์|[ก-ฮ][ะ-ู]์', "", s) # 6. | |
s = re.sub('[ะ-์]', '', s) # 7. | |
sd = s[0].translate(tu1) | |
sd += s[1:].translate(tu2) | |
return (sd+'000000')[:7] | |
# มีปัญหา กับ กรรไกร ที่ ไ โดนแปลงไป ทำให้ รร ไม่ได้ | |
# จึงต้องย้าย 4-5 ขึ้นไปก่อน 1 |
พอจะแนะนำการเอา algorithm นี้ไปใช้งานให้หน่อยได้ไหมครับ ว่าต้องเอาไปใช้งานอย่างไร
คือที่สงสัยก็คือ เวลาใช้นี้ต้องเลือกเอาระหว่าง LK82 กับ Udom83 หรือว่าต้องใช้งานร่วมกันครับ
พอจะมีตัวอย่างการนำไปใช้งานให้ดูหน่อยได้ไหมครับ
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
งั้นเปลี่ยนมาใช้กฎข้อ 6 ของ Udom83 แทนสิครับ
s = re.sub('จน์|มณ์|ณฑ์|ทร์|ตร์|[ก-ฮ]์|[ก-ฮ][ะ-ู]์', "", s)