Browse Source

better explanations seeding.

master
Mohsen Taba 4 months ago
parent
commit
7044c81bd7
  1. 119
      apps/hadis/management/commands/reformat_data.py

119
apps/hadis/management/commands/reformat_data.py

@ -5,10 +5,10 @@ from django.db import transaction
from apps.hadis.models import Hadis
class Command(BaseCommand):
help = 'Updates explanation and address fields with structured multilingual dummy data'
help = 'Updates explanation fields with extensive, deep-dive academic commentary (3x length)'
def handle(self, *args, **options):
self.stdout.write("Starting bulk update of Explanation and Address fields...")
self.stdout.write("Starting bulk update with EXTENDED Explanations...")
hadis_qs = Hadis.objects.all()
total_hadis = hadis_qs.count()
@ -19,14 +19,12 @@ class Command(BaseCommand):
self.stdout.write(f"Found {total_hadis} Hadis records.")
# --- DATA POOLS FOR RANDOM VARIATION ---
# 1. Address Data (Hierarchical strings: Book -> Chapter -> Section)
# --- ADDRESS POOL (Standard Reference Format) ---
address_pool = [
{
"en": ["Sahih al-Bukhari", "Book of Revelation", "Chapter 1"],
"fa": ["صحیح بخاری", "کتاب وحی", "باب ۱"],
"ru": ["Сахих аль-Бухари", "Книга откровения", "Глава 1"]
"en": ["Sahih al-Bukhari", "Book of Revelation", "Chapter 1: How Revelation Began"],
"fa": ["صحیح بخاری", "کتاب وحی", "باب ۱: آغاز وحی"],
"ru": ["Сахих аль-Бухари", "Книга откровения", "Глава 1: Как началось откровение"]
},
{
"en": ["Riyad as-Salihin", "The Book of Knowledge", "Virtues of Seeking Knowledge"],
@ -40,43 +38,81 @@ class Command(BaseCommand):
}
]
# 2. Explanation Data (Title/Detail objects)
# --- EXPLANATION POOL (Massive Text Blocks) ---
explanation_pool = [
{
"en": [
{"title": "Vocabulary", "detail": "The term 'Niyyah' implies the resolve of the heart."},
{"title": "Context", "detail": "Narrated by Omar bin Al-Khattab regarding migration to Medina."}
{
"title": "Vocabulary & Linguistic Analysis",
"detail": "The term 'Niyyah' (Intention) is pivotal in Islamic lexicon, derived from the root 'nawa', meaning to aim, direct, or purpose oneself towards a specific destination. In the terminology of the jurists (Fuqaha), it serves a dual function: firstly, to distinguish acts of worship (Ibadah) from mundane customary habits (Adah)—such as distinguishing the act of washing oneself for cooling off from the act of Ghusl (ritual purification). Secondly, it distinguishes different ranks of worship from one another, such as separating a noon prayer that is obligatory (Fard) from one that is voluntary (Sunnah). Philosophically, scholars like Al-Ghazali have elaborated that Niyyah is the 'spirit' of the action, while the physical movement is merely the 'body'; a body without a spirit is lifeless, just as an action without sincere intention holds no weight in the Divine Court."
},
{
"title": "Context of Revelation (Asbab al-Wurud)",
"detail": "This tradition is famously known as the 'Hadith of the Migrant to Umm Qais'. It was delivered by the Prophet (PBUH) from the pulpit in Medina to address a subtle but critical issue within the community. Reports indicate that a man had migrated from Mecca to Medina not solely for the sake of Allah and His Messenger, but because a woman named Umm Qais had refused to marry him unless he undertook the migration. While his physical journey was identical to the other companions who sacrificed their homes for faith, his internal compass was directed towards a worldly gain. The Prophet (PBUH) used this specific incident to establish a universal maxim: that the validity and reward of any deed are inextricably bound to the hidden motive behind it, warning that one who targets the world will attain only that, with no share in the Hereafter."
}
],
"fa": [
{"title": "لغات", "detail": "واژه «نیت» به معنای قصد و عزم قلبی است."},
{"title": "شأن نزول", "detail": "این حدیث از عمر بن خطاب در مورد مهاجرت به مدینه روایت شده است."}
{
"title": "تحلیل واژگان و اصطلاحات",
"detail": "واژه «نیت» در لغت‌نامه اسلامی از ریشه «نوی» گرفته شده است که به معنای قصد کردن، آهنگ کردن و جهت‌گیری به سوی مقصدی مشخص است. در اصطلاح فقیهان، نیت دو کارکرد اساسی دارد: نخست، تمایز میان عبادات و عادات روزمره؛ مانند تفاوت میان کسی که برای خنک شدن خود را می‌شوید با کسی که غسل تعبدی انجام می‌دهد. دوم، تمایز میان مراتب مختلف عبادت، مانند جدا کردن نماز واجب ظهر از نماز مستحبی نافله. از نظر فلسفی، علمایی همچون امام محمد غزالی تشریح کرده‌اند که نیت به مثابه «روح» عمل است، در حالی که حرکات فیزیکی تنها «جسم» آن هستند؛ همان‌طور که جسم بدون روح مرده است، عملی که فاقد نیت خالصانه باشد نیز در پیشگاه الهی فاقد ارزش و اعتبار حقیقی است."
},
{
"title": "شأن نزول و بستر تاریخی",
"detail": "این حدیث مشهور به «حدیث مهاجر ام قیس» است. پیامبر اکرم (ص) این سخنان را بر فراز منبر در مدینه بیان فرمودند تا به مسئله‌ای ظریف اما حیاتی در جامعه بپردازند. نقل شده است که مردی از مکه به مدینه هجرت کرد، نه صرفاً برای خدا و رسولش، بلکه بدین خاطر که زنی به نام «ام قیس» شرط ازدواج با او را انجام این هجرت قرار داده بود. اگرچه سفر فیزیکی او کاملاً مشابه دیگر صحابه‌ای بود که خانه و کاشانه خود را برای ایمان رها کرده بودند، اما قطب‌نمای درونی او به سوی هدفی دنیوی تنظیم شده بود. پیامبر (ص) از این رویداد خاص استفاده کردند تا یک قاعده کلی و جاودانه را بنا نهند: اینکه صحت و پاداش هر عملی با انگیزه پنهانی پشت آن گره خورده است و هشدار دادند که هر کس دنیا را هدف گیرد، تنها به همان خواهد رسید و بهره‌ای در آخرت نخواهد داشت."
}
],
"ru": [
{"title": "Словарь", "detail": "Термин «Ният» подразумевает решимость сердца."},
{"title": "Контекст", "detail": "Передано Омаром ибн аль-Хаттабом относительно переселения в Медину."}
{
"title": "Лексический и терминологический анализ",
"detail": "Термин «Ният» (Намерение) является ключевым в исламском лексиконе и происходит от корня «нава», что означает стремиться, направляться или иметь цель достичь определенного пункта. В терминологии факихов (правоведов) он выполняет двойную функцию: во-первых, отличает акты поклонения (Ибадат) от обыденных привычек (Адат) — например, отличие обычного купания ради прохлады от ритуального омовения (Гусль). Во-вторых, он различает разные виды поклонения, например, отделяет обязательную полуденную молитву (Фард) от добровольной (Сунна). Философски, такие ученые, как аль-Газали, поясняли, что Ният — это «душа» действия, тогда как физическое движение — лишь его «тело»; тело без души безжизненно, так же как и действие без искреннего намерения не имеет веса перед Божественным Судом."
},
{
"title": "Контекст ниспослания (Асбаб аль-Вуруд)",
"detail": "Это предание широко известно как «Хадис о переселенце к Умм Кайс». Пророк (мир ему) произнес эти слова с минбара в Медине, чтобы затронуть тонкий, но критически важный вопрос в общине. Сообщается, что один мужчина переселился из Мекки в Медину не только ради Аллаха и Его Посланника, но и потому, что женщина по имени Умм Кайс отказалась выйти за него замуж, пока он не совершит хиджру. Хотя его физическое путешествие было идентично пути других сподвижников, пожертвовавших домами ради веры, его внутренний компас был направлен на мирскую выгоду. Пророк (мир ему) использовал этот случай, чтобы установить универсальное правило: действительность и награда за любое деяние неразрывно связаны со скрытым мотивом, стоящим за ним."
}
]
},
{
"en": [
{"title": "Legal Ruling", "detail": "Scholars agree that this action is Mustahabb (recommended)."},
{"title": "Benefits", "detail": "Increases spirituality and mindfulness in daily life."}
{
"title": "Juristic Ruling & Debate",
"detail": "The consensus among the scholars of the four major schools regarding this act is that it falls under the category of 'Mandub' or 'Mustahabb' (highly recommended), but it does not reach the level of 'Wajib' (obligatory). The Hanafi jurists distinguish between Sunnah Muakkadah (emphasized tradition) and Sunnah Ghayr Muakkadah, placing this specific deed in the former category due to the Prophet's consistent observance of it. Conversely, Imam Malik viewed it as a communal obligation in some contexts, meaning if an entire city abandoned it, they would be sinful. The nuance lies in the evidence: while the command form is used in some narrations, contextual clues indicate it was an encouragement for spiritual refinement rather than a binding law punishable by omission."
},
{
"title": "Spiritual & Social Implications",
"detail": "Beyond the legal ruling, engaging in this practice serves as a rigorous discipline for the soul (Tazkiyah). It acts as a fortress against heedlessness (Ghaflah), constantly reminding the believer of the Divine presence amidst the chaos of daily life. When practiced collectively, it transcends individual spirituality to become a social adhesive, fostering a sense of unity, shared purpose, and mutual encouragement towards piety. Historically, societies that upheld these voluntary acts found that they served as protective barriers for the obligatory deeds; one who safeguards their voluntary prayers is rarely negligent in their obligatory ones, whereas abandoning the voluntary is often the first step towards compromising the obligatory."
}
],
"fa": [
{"title": "حکم فقهی", "detail": "علما اتفاق نظر دارند که این عمل مستحب است."},
{"title": "فواید", "detail": "باعث افزایش معنویت و توجه در زندگی روزمره می‌شود."}
{
"title": "حکم فقهی و دیدگاه مذاهب",
"detail": "اجماع علمای مذاهب اربعه در مورد این عمل بر این است که در دسته «مندوب» یا «مستحب» (بسیار توصیه شده) قرار می‌گیرد، اما به سطح «واجب» نمی‌رسد. فقهای حنفی میان سنت مؤکده (سنت تأکید شده) و سنت غیر مؤکده تفاوت قائل می‌شوند و این عمل خاص را به دلیل مداومت پیامبر بر آن، در دسته اول قرار می‌دهند. در مقابل، امام مالک در برخی زمینه‌ها آن را به عنوان یک واجب کفایی می‌نگریست، بدین معنا که اگر تمام اهل یک شهر آن را ترک کنند، گناهکار محسوب می‌شوند. ظرافت این حکم در دلایل آن نهفته است: اگرچه در برخی روایات از صیغه امر استفاده شده، اما قرائن و شواهد جانبی نشان می‌دهد که این دستور بیشتر جنبه تشویق برای تذیب نفس داشته تا یک قانون الزام‌آور که ترک آن مستوجب مجازات باشد."
},
{
"title": "آثار معنوی و اجتماعی",
"detail": "فراتر از حکم قانونی، انجام این عمل به عنوان یک تمرین سخت‌گیرانه برای تزکیه نفس عمل می‌کند. این عمل همچون دژی در برابر غفلت عمل کرده و در میان هیاهوی زندگی روزمره، حضور الهی را دائماً به مؤمن یادآوری می‌کند. هنگامی که این عمل به صورت جمعی انجام شود، از معنویت فردی فراتر رفته و به یک چسب اجتماعی تبدیل می‌شود که حس وحدت، هدف مشترک و تشویق متقابل به تقوا را پرورش می‌دهد. از نظر تاریخی، جوامعی که این اعمال مستحب را حفظ کردند، دریافتند که این‌ها به عنوان سدهای محافظتی برای واجبات عمل می‌کنند؛ کسی که بر نمازهای نافله خود محافظت کند، به ندرت در نمازهای واجب خود کوتاهی می‌کند، در حالی که ترک مستحبات اغلب اولین گام به سوی سستی در واجبات است."
}
],
"ru": [
{"title": "Правoвое решение", "detail": "Ученые согласны, что это действие является желательным (мустахаб)."},
{"title": "Польза", "detail": "Повышает духовность и осознанность в повседневной жизни."}
{
"title": "Правовое решение и дебаты",
"detail": "Консенсус среди ученых четырех основных мазхабов относительно этого действия заключается в том, что оно подпадает под категорию «Мандуб» или «Мустахаб» (весьма желательное), но не достигает уровня «Ваджиб» (обязательное). Ханафитские правоведы проводят различие между Сунной Муаккада (подтвержденная сунна) и Сунной Гайр Муаккада, помещая это конкретное деяние в первую категорию из-за постоянного соблюдения его Пророком. Имам Малик, напротив, рассматривал это как общую обязанность в некоторых контекстах; если бы целый город отказался от этого, они считались бы грешниками. Нюанс кроется в доказательствах: хотя в некоторых преданиях используется повелительная форма, контекстуальные подсказки указывают на то, что это было поощрение для духовного очищения, а не обязательный закон."
},
{
"title": "Духовные и социальные последствия",
"detail": "Помимо юридического постановления, участие в этой практике служит строгой дисциплиной для души (Тазкия). Оно действует как крепость против беспечности (Гафла), постоянно напоминая верующему о Божественном присутствии посреди хаоса повседневной жизни. Когда это практикуется коллективно, оно выходит за рамки индивидуальной духовности и становится социальным связующим звеном, воспитывая чувство единства, общей цели и взаимного поощрения к благочестию. Исторически сложилось так, что общества, поддерживавшие эти добровольные акты, обнаруживали, что они служат защитными барьерами для обязательных деяний; тот, кто оберегает свои добровольные молитвы, редко бывает небрежен в обязательных, тогда как отказ от добровольного часто является первым шагом к компромиссу в обязательном."
}
]
}
]
updated_count = 0
self.stdout.write("Iterating through data to apply updates...")
# Iterate and Update
for i, hadis in enumerate(hadis_qs, 1):
if i % 100 == 0:
if i % 50 == 0:
self.stdout.write(f"Processing {i}/{total_hadis}...")
# Pick random samples to make data look diverse
@ -84,46 +120,25 @@ class Command(BaseCommand):
exp_sample = random.choice(explanation_pool)
# --- CONSTRUCT ADDRESS FORMAT (List of Strings) ---
# Format: [{"language_code": "en", "text": ["A", "B"]}, ...]
new_address = [
{
"language_code": "en",
"text": addr_sample["en"]
},
{
"language_code": "fa",
"text": addr_sample["fa"]
},
{
"language_code": "ru",
"text": addr_sample["ru"]
}
{"language_code": "en", "text": addr_sample["en"]},
{"language_code": "fa", "text": addr_sample["fa"]},
{"language_code": "ru", "text": addr_sample["ru"]}
]
# --- CONSTRUCT EXPLANATION FORMAT (List of Objects) ---
# Format: [{"language_code": "en", "text": [{"title":.., "detail":..}]}, ...]
# --- CONSTRUCT EXPLANATION FORMAT (List of Objects with LONG detail) ---
new_explanation = [
{
"language_code": "en",
"text": exp_sample["en"]
},
{
"language_code": "fa",
"text": exp_sample["fa"]
},
{
"language_code": "ru",
"text": exp_sample["ru"]
}
{"language_code": "en", "text": exp_sample["en"]},
{"language_code": "fa", "text": exp_sample["fa"]},
{"language_code": "ru", "text": exp_sample["ru"]}
]
# Assign to fields
hadis.address = new_address
hadis.explanation = new_explanation
# Save (Using save() ensures signals/dates update, though slower than bulk_update)
# Since we modify JSON fields, simple save is safest.
# Save
hadis.save()
updated_count += 1
self.stdout.write(self.style.SUCCESS(f"Successfully updated {updated_count} Hadis records with new format."))
self.stdout.write(self.style.SUCCESS(f"Successfully updated {updated_count} Hadis records with rich, academic-length explanations."))
Loading…
Cancel
Save