NightPrince's picture
Deploy Vanilla HTML Tafsir Engine via FastAPI (with LFS)
3ee9536
Raw
History Blame Contribute Delete
2.07 kB
import re
def remove_tashkeel(text):
tashkeel_pattern = re.compile(
r'[\u0617-\u061A\u064B-\u0652]'
)
return re.sub(tashkeel_pattern, '', text)
def normalize_arabic(text):
text = re.sub("[إأآا]", "ا", text)
text = re.sub("ى", "ي", text)
text = re.sub("ؤ", "و", text)
text = re.sub("ئ", "ي", text)
text = re.sub("ة", "ه", text)
return text
def preprocess_arabic(text):
text = remove_tashkeel(text)
text = normalize_arabic(text)
return text
def remove_tafsir_stopwords(query):
# Strip trailing punctuation first
cleaned = re.sub(r'[\?؟\.،]+$', '', query).strip()
# 1. Strip trailing author names (e.g. "عند الطبري")
author_pattern = r'\s+(?:عند|حسب|تفسير)\s+(?:الطبري|ابن\s*كثير|القرطبي|السعدي|البغوي|الجلالين|الميسر)$'
cleaned = re.sub(author_pattern, '', cleaned).strip()
# 2. Main Prefix Stripper
prefix_pattern = r'^(?:(?:ما\s+)?(?:تفسير|معنى|معني|شرح|مقصود|المقصود|المراد)\s+(?:بـ|في\s+)?(?:قوله\s+تعالى|قوله\s+تعالي|قوله\s+عز\s*وجل|آية|اية|سورة)?\s*)' \
r'|^(?:ماذا\s+قال\s+المفسرون\s+في\s+قوله\s+تعالى\s*)' \
r'|^(?:كيف\s+فسر\s+.*?\s+آية\s+)' \
r'|^(?:أقوال\s+العلماء\s+في\s+تفسير\s*)' \
r'|^(?:تفسير\s+(?:آية|اية|سورة)\s*)' \
r'|^(?:تفسير\s+)' \
r'|^(?:شرح\s+(?:آية|اية)\s*)'
# Needs to be stripped repeatedly to peel layers like "تفسير آية"
old = ""
while old != cleaned:
old = cleaned
cleaned = re.sub(prefix_pattern, '', cleaned, flags=re.IGNORECASE).strip()
return cleaned
def bm25_tokenize(text):
return preprocess_arabic(text).split()
def preprocess_query(query):
query = preprocess_arabic(query)
return bm25_tokenize(query)