Spaces:
Sleeping
Sleeping
File size: 6,548 Bytes
d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea d964e2a 49e0fea |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
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) |