import re import gradio as gr ########################################################## # 1) دالّة التصحيح اللغوي/الإملائي (كما في سؤالك السابق) ########################################################## def transform_text(input_text): """ تقوم هذه الدالة بتطبيق مجموعة من القواعد على النص المدخل وتعيد النص المصحّح/المعدّل. """ # 1) إضافة علامة # بعد بعض الكلمات العامية المحددة pattern_hash = r"\b(ايش|إيش|ويش|ليش|عشان|علشان|لسى|يالله|والله|يلا|يااه|اووه|همن|ثمن)\b" input_text = re.sub(pattern_hash, r"\1#", input_text, flags=re.IGNORECASE) # 2) بعض التصحيحات الإملائية والفصيحة: input_text = re.sub(r"\bهاذي\b", "هذه", input_text) input_text = re.sub(r"\bهذول\b", "هؤلاء", input_text) input_text = re.sub(r"\b(أنتي|انتي)\b", "أنت", input_text, flags=re.IGNORECASE) input_text = re.sub(r"\bمعاك\b", "معك", input_text) input_text = re.sub(r"\bاللي\b", "الذي", input_text) # 3) تصحيح بعض الهمزات الشائعة input_text = re.sub(r"\bتاكل\b", "تأكل", input_text) input_text = re.sub(r"\bتاخذ\b", "تأخذ", input_text) # 4) إزالة همزة فعل الأمر (مثال مبسط: إذهب -> اذهب) pattern_amr = r"\bإ([ضذصثقفغعهخحجةشسيبلاتنم])(.*?)(\b)" input_text = re.sub(pattern_amr, r"ا\1\2", input_text) # 5) تحويل الأسئلة إلى علامة استفهام بدلاً من النقطة question_words = [ "كيف", "لماذا", "لمَ", "هل", "متى", "أين", "أيش#", "ايش#", "ويش#", "ليش#", "وش", "ما", "من", "أين", "أيمكن", "أحقًا" ] for q_word in question_words: pattern_q = rf"(\b{q_word}\b)\." input_text = re.sub(pattern_q, rf"\1؟", input_text, flags=re.IGNORECASE) # 6) إزالة النقاط في نهاية الجمل input_text = re.sub(r"\.(\s|$)", r"\1", input_text) # 7) استبدال التردّد أو التمتمة (آآ / آه / آ ...) بالرمز $ pattern_stammer = r"\b(آآ+|آه+|آ)\b" input_text = re.sub(pattern_stammer, " $", input_text) # 8) وضع علامة ~ بعد الكلمات الأعجمية (إن وجدت) foreign_words = ["كوميدينة", "أجبورة"] for fw in foreign_words: pattern_fw = rf"\b{fw}\b" input_text = re.sub(pattern_fw, fw + "~", input_text, flags=re.IGNORECASE) # 9) معالجة الضحك والبكاء البسيط input_text = re.sub(r"\bضحك بسيط\b", "[ضحك بسيط]", input_text) input_text = re.sub(r"\bبكاء خفيف\b", "[بكاء خفيف]", input_text) return input_text ########################################################## # 2) دالّة إعادة التنسيق للإدخال بالشكل الجديد ########################################################## def reformat_transcript(lines): """ نتوقع الشكل: [المتحدث 1] (0:00 - 0:02) السلام عليكم. [المتحدث 2] (0:02 - 0:05) وعليكم السلام... [المتحدث 1] (0:06 - 0:08) الله يبقى شخبارا... ونريد تحويله إلى: , (المتحدث 1) [0:00 - 0:02] السلام عليكم. , (المتحدث 2) [0:02 - 0:05] وعليكم السلام... , (المتحدث 1) [0:06 - 0:08] الله يبقى شخبارا... """ output_lines = [] i = 0 while i < len(lines): line = lines[i].strip() # نحاول التقاط الصيغة: [المتحدث X] (0:00 - 0:02) # تعبير نمطي مثل: # ^\[(.*?)\]\s*\((.*?)\)$ # حيث: # group(1) -> "المتحدث 1" # group(2) -> "0:00 - 0:02" pattern = r'^\[(.*?)\]\s*\((.*?)\)$' match = re.match(pattern, line) if match: speaker = match.group(1) # "المتحدث 1" time_range = match.group(2) # "0:00 - 0:02" # السطر التالي متوقع أن يكون النص text_line = "" if i+1 < len(lines): text_line = lines[i+1].rstrip("\n").strip() else: text_line = "" # نطبّق التصحيح اللغوي على النص text_line = transform_text(text_line) # الصيغة المطلوبة: , (المتحدث 1) [0:00 - 0:02] النص formatted = f", ({speaker}) [{time_range}] {text_line}" output_lines.append(formatted) # تجاوز سطرين: سطر المربع + سطر النص i += 2 else: # إذا لم يطابق، نتجاهل هذا السطر أو نحتفظ به (هنا نتجاهله) i += 1 return output_lines ########################################################## # 3) دالّة pipeline لتجميع العملية ########################################################## def pipeline(raw_text): """ تأخذ النصّ المُدخل (كاملًا)، تفصّله سطرًا سطرًا، ثم تعيد تنسيقه بالنمط المطلوب. تعيد الناتج كسلسلة نصية. """ lines = raw_text.splitlines() reformatted_lines = reformat_transcript(lines) final_text = "\n".join(reformatted_lines) return final_text ########################################################## # 4) إنشاء واجهة Gradio ########################################################## demo = gr.Interface( fn=pipeline, inputs=gr.Textbox(lines=10, placeholder="ألصق النص هنا..." , label="النص المفرغ (الصيغة الجديدة)"), outputs=gr.Textbox(lines=10 , label="النص المعالج"), title="تنسيق النص المفرغ وفق الصيغة الجديدة", description="ألصق النص بالصيغ: [المتحدث X] (0:00 - 0:02) في سطر، والسطر التالي هو محتواه." ) ########################################################## # 5) تشغيل الواجهة مع رابط عام (إذا أمكن) ########################################################## if __name__ == "__main__": demo.launch(share=True)