QModel / app /hadith_utils.py
aelgendy's picture
Sync codebase with local main (config, README, docker, gitignore updates)
15f1210 verified
Raw
History Blame Contribute Delete
1.21 kB
"""Hadith utility functions โ€” narrator extraction and highlighting."""
import re
# Arabic narrator markers
_AR_NARRATORS = [
"ุญูŽุฏู‘ูŽุซูŽู†ูŽุง", "ุฃูŽุฎู’ุจูŽุฑูŽู†ูŽุง", "ุญูŽุฏู‘ูŽุซูŽู†ููŠ", "ุฃูŽุฎู’ุจูŽุฑูŽู†ููŠ", "ุนูŽู†ู’", "ู‚ูŽุงู„ูŽ",
"ุณูŽู…ูุนู’ุชู", "ุฃูŽู†ู’ุจูŽุฃูŽู†ูŽุง", "ุซู†ุง", "ุฃู†ุง",
]
# English narrator markers
_EN_NARRATORS = [
"Narrated", "told us", "informed us", "heard", "on the authority of",
"from", "said", "reported",
]
def highlight_narrators(text: str, lang: str = "arabic") -> str:
"""Highlight common narrator markers in Hadith text using markdown bolding."""
if not text:
return text
if lang == "arabic" or any(m in text for m in _AR_NARRATORS):
# Highlight Arabic markers
for marker in _AR_NARRATORS:
# Match word with optional diacritics
pattern = re.compile(f"({re.escape(marker)})", re.U)
text = pattern.sub(r"**\1**", text)
else:
# Highlight English markers
for marker in _EN_NARRATORS:
pattern = re.compile(f"\\b({re.escape(marker)})\\b", re.I)
text = pattern.sub(r"**\1**", text)
return text