Source code for pythainlp.transliterate.pali

# SPDX-FileCopyrightText: 2016-2026 PyThaiNLP Project
# SPDX-FileType: SOURCE
# SPDX-License-Identifier: Apache-2.0
import re


[docs] def pronunciate_pali(word: str) -> str: """ Convert pali word to Thai pronunciation :param str word: Pali word (written in Thai script) to be pronunciated. :return: A string of Thai letters indicating how the input text should be pronounced. :Example: >>> from pythainlp.transliterate import pronunciate_pali >>> pronunciate_pali('ภควา') 'ภะคะวา' >>> pronunciate_pali('สมฺมา') 'สัมมา' >>> pronunciate_pali('มยํ') 'มะยัง' >>> pronunciate_pali('สฺวากฺขา') 'สวากขาโต' """ # 1. จัดการช่องว่างที่อาจพิมพ์เกินมาก่อนนฤคหิต word = word.replace(" ํ", "ํ").replace("ฺ ", "ฺ") # --- กฎข้อ 3: นฤคหิต (ํ) --- # แบบมีสระหน้า (เ-ไ) เช่น โกํ -> โกง word = re.sub(r'([เ-ไ][ก-ฮ])ํ', r'\1ง_F_', word) # แบบมีสระบน/ล่าง (ะ-ู) เช่น สุ ํ -> สุง word = re.sub(r'([ก-ฮ][ะ-ู])ํ', r'\1ง_F_', word) # แบบพยัญชนะเดี่ยว เช่น หํ -> หัง word = re.sub(r'([ก-ฮ])ํ', r'\1ัง_F_', word) # --- กฎข้อ 4 & 5: พินทุ (ฺ) เป็นตัวควบกล้ำ (ต้นคำ) --- # ถ้าพินทุอยู่พยัญชนะตัวแรกของคำ (ไม่มีตัวอื่นนำหน้า) ให้มาร์คเป็นตัวควบกล้ำ (_C_) word = re.sub(r'(^|\s)([ก-ฮ])ฺ', r'\1\2_C_', word) # --- กฎข้อ 2: พินทุ (ฺ) เป็นตัวสะกด --- # แบบมีสระนำหน้า เช่น เนยฺ -> เนย word = re.sub(r'([เ-ไ][ก-ฮ])([ก-ฮ])ฺ', r'\1\2_F_', word) # แบบมีสระบน/ล่าง เช่น ทิฏฺ -> ทิฏ word = re.sub(r'([ก-ฮ][ะ-ู])([ก-ฮ])ฺ', r'\1\2_F_', word) # แบบพยัญชนะเดี่ยว (สะกด) เช่น สมฺ -> สัม (เพิ่มไม้หันอากาศ) word = re.sub(r'([ก-ฮ])([ก-ฮ])ฺ', r'\1ั\2_F_', word) # --- กฎข้อ 1: พยัญชนะที่ไม่มีเครื่องหมาย ให้อ่านเสียง "อะ" --- # หาพยัญชนะที่: ไม่ได้ตามหลัง เ-ไ และ ไม่ได้นำหน้าสระ, ไม่ใช่ตัวสะกด(_F_), ไม่ใช่ตัวควบ(_C_) word = re.sub(r'(?<![เ-ไ])([ก-ฮ])(?![ะ-ู็-์]|_F_|_C_)', r'\1ะ', word) # ทำความสะอาด Marker ที่เราใช้ทดไว้ตอนประมวลผล (_F_ = Final, _C_ = Cluster) word = word.replace('_F_', '').replace('_C_', '') return word