Azoz-7's picture
Update app.py
49e0fea verified
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)