Source code for pythainlp.transliterate.pali

# SPDX-FileCopyrightText: 2016-2026 PyThaiNLP Project
# SPDX-FileType: SOURCE
# SPDX-License-Identifier: Apache-2.0
"""Thai pronunciation of Pali words."""

import re


[docs] def pronunciate_pali(word: str) -> str: """ Convert a Pali word to its Thai pronunciation. :param str word: Pali word, written in Thai script :return: Thai letters indicating how the word is pronounced :rtype: str :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