مساعد Motrjim الذكي

أكواد تنظيف البيانات للمترجمين على Google Colab

صفحة عملية جاهزة للمترجمين ومنسقي الكوربس وفرق الترجمة، تضم أهم أكواد تنظيف البيانات النصية قبل التدريب أو الفهرسة أو إنشاء ذاكرات الترجمة أو إعداد ملفات الترجمة الآلية.

مناسب لـ Google Colab سهل للموبايل جاهز لـ Elementor مفيد للمترجمين أمثلة عملية لكل كود

1) تجهيز البيئة في Google Colab

ضع الأوامر التالية في أول خلية داخل Colab لتثبيت المكتبات الأساسية:

خلية التثبيت الأولى
!pip install pandas spacy sentence-transformers langdetect openpyxl
!python -m spacy download en_core_web_sm
خلية الاستيراد
import re
import html
import pandas as pd
from langdetect import detect, DetectorFactory
import spacy
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity

DetectorFactory.seed = 0
nlp = spacy.load("en_core_web_sm")
model = SentenceTransformer("all-MiniLM-L6-v2")
لماذا هذه المكتبات؟
re html pandas spaCy langdetect sentence-transformers
لأنها تغطي أغلب ما يحتاجه المترجم من تنظيف نصي، كشف لغة، تطبيع لغوي، إزالة تكرار، ومعالجة ملفات CSV وExcel بسهولة.

2) الجدول السريع لأهم الأكواد

ملخص سريع للوظائف الأساسية قبل الشرح التفصيلي.

المرحلة الوظيفة المكتبة الكود المختصر
التجهيز قراءة ملف UTF-8 الأساسية with open('file.txt', 'r', encoding='utf-8') as f:
التنظيف حذف وسوم HTML re re.sub(r'<[^>]+>', '', text)
التنظيف فك رموز HTML html html.unescape(text)
التنظيف حذف المسافات الزائدة re re.sub(r'\s+', ' ', text).strip()
التنظيف حذف الروابط re re.sub(r'http\S+|www\.\S+', '', text)
التنظيف حذف الإيميلات re re.sub(r'\S+@\S+', '', text)
التطبيع كشف اللغة langdetect detect(text) == 'en'
التطبيع إرجاع الكلمات إلى أصلها spaCy " ".join([t.lemma_ for t in nlp(text)])
الجودة حذف الصفوف الفارغة pandas df.dropna(subset=['source','target'])
الجودة إزالة التكرار التام pandas df.drop_duplicates(subset=['source','target'])
الجودة فلترة طول الجمل pandas df[df['source'].str.len().between(3,500)]
الدلالة Embeddings sentence-transformers model.encode(sentences)
الدلالة Cosine Similarity sklearn cosine_similarity(embeddings)
التسليم تصدير CSV pandas df.to_csv('cleaned.csv', index=False, encoding='utf-8')

3) الأكواد بالتفصيل مع أمثلة عملية

كل بطاقة تحتوي على: الوظيفة، الكود، ثم مثال سريع قبل/بعد.

رفع ملف من جهازك إلى Colab

المكتبة: google.colab

مفيد عند بدء العمل على ملفات TXT أو CSV أو Excel.

رفع الملفات
from google.colab import files
uploaded = files.upload()
مثال: بعد تشغيل الخلية، اختر الملف من جهازك مثل: corpus.csv أو texts.txt.

قراءة ملف TXT بترميز UTF-8

المكتبة: الأساسية

هذا أهم خيار لتجنب ظهور النص العربي أو متعدد اللغات بشكل مشوه.

قراءة TXT
with open('file.txt', 'r', encoding='utf-8') as f:
    text = f.read()

print(text[:300])
مثال: إذا كان الملف يحتوي على: مرحبا بالعالم أو Hello world، سيُقرأ بشكل صحيح دون مشاكل ترميز.

قراءة ملف CSV

المكتبة: pandas

مثالي لملفات الترجمة الثنائية التي تحتوي أعمدة مثل source و target.

قراءة CSV
import pandas as pd

df = pd.read_csv('corpus.csv', encoding='utf-8')
df.head()
مثال: لو الملف فيه عمودان: source و target، فستتمكن من تنظيف كل عمود لاحقًا.

حذف وسوم HTML بالكامل

المكتبة: re

مفيد عند سحب نصوص من مواقع أو ملفات تحتوي على وسوم مثل p و div و span.

حذف HTML Tags
import re

text = "<p>Hello <b>world</b></p>"
clean_text = re.sub(r'<[^>]+>', '', text)
print(clean_text)
قبل: <p>Hello <b>world</b></p>
بعد: Hello world

فك رموز HTML مثل &nbsp; و &amp;

المكتبة: html

أفضل من حذفها مباشرة، لأنه يعيد الرمز إلى شكله الطبيعي.

فك HTML Entities
import html

text = "Hello  world & everyone"
clean_text = html.unescape(text)
print(clean_text)
قبل: Hello&nbsp;&nbsp;world &amp; everyone
بعد: Hello world & everyone

حذف المسافات الزائدة والمزدوجة

المكتبة: re

ضروري جدًا قبل المقارنة أو إزالة التكرار أو التصدير النهائي.

تنظيف المسافات
import re

text = "  This   is    a   test.  "
clean_text = re.sub(r'\s+', ' ', text).strip()
print(clean_text)
قبل: __This___is____a___test.__
بعد: This is a test.

حذف الأسطر الفارغة

المكتبة: الأساسية

يفيد في ملفات TXT الكبيرة أو النصوص المنسوخة من الويب.

إزالة الأسطر الفارغة
lines = text.splitlines()
lines = [line.strip() for line in lines if line.strip()]
clean_text = "\n".join(lines)
مثال: يحول النص من عدة أسطر متفرقة تحتوي فراغات إلى نص مرتب بدون أسطر فارغة.

حذف الروابط URL

المكتبة: re

مفيد إذا كانت البيانات تحتوي على روابط صفحات أو إحالات غير مفيدة للترجمة.

إزالة الروابط
import re

text = "Read more at https://example.com or www.site.com"
clean_text = re.sub(r'http\S+|www\.\S+', '', text)
clean_text = re.sub(r'\s+', ' ', clean_text).strip()
print(clean_text)
بعد التنظيف: Read more at or
يمكنك بعد ذلك مراجعة النص أو حذفه إن أصبح بلا قيمة.

حذف عناوين البريد الإلكتروني

المكتبة: re

مفيد لحماية الخصوصية أو حذف البيانات الشخصية من الكوربس.

إزالة الإيميلات
import re

text = "Contact us at info@example.com for details."
clean_text = re.sub(r'\S+@\S+', '', text)
clean_text = re.sub(r'\s+', ' ', clean_text).strip()
print(clean_text)
بعد التنظيف: Contact us at for details.

حذف الأحرف غير القابلة للطباعة والأحرف المخفية

المكتبة: re

هذا مهم جدًا لأن بعض الملفات تحتوي على أحرف خفية تؤثر على المطابقة والتجزئة.

إزالة الأحرف المخفية
import re

text = "Hello\u200b world\ufeff"
clean_text = re.sub(r'[\u200b-\u200f\ufeff]', '', text)
print(clean_text)
مثال: يزيل أحرف zero-width و BOM التي لا تظهر بصريًا لكنها تسبب مشاكل في التنظيف.

توحيد علامات الترقيم الذكية

المكتبة: الأساسية

يفيد عند نسخ النصوص من Word أو صفحات ويب.

توحيد الاقتباسات والشرطات
text = text.replace("“", '"').replace("”", '"')
text = text.replace("‘", "'").replace("’", "'")
text = text.replace("—", "-").replace("–", "-")
مثال: يحول “Hello”—test إلى "Hello"-test.

كشف اللغة واستبعاد النصوص الخاطئة

المكتبة: langdetect

إذا كنت تعمل على ملف إنجليزي فقط أو عربي فقط، فهذا الكود مفيد جدًا.

كشف اللغة
from langdetect import detect

text = "This is a sample sentence."
if detect(text) == 'en':
    print("النص إنجليزي")
else:
    print("النص ليس إنجليزيًا")
مثال: إذا كنت تجمع ملفات ترجمة إنجليزية فقط، يمكنك استبعاد أي سطر لغته ليست en.

Lemmatization: إرجاع الكلمات إلى أصلها

المكتبة: spaCy

يساعد في تقليل اختلاف الصيغ مثل running و ran و runs.

التطبيع الدلالي
doc = nlp("The children are running quickly.")
lemmas = " ".join([token.lemma_ for token in doc if not token.is_stop])
print(lemmas)
ناتج تقريبي: child run quickly
ممتاز في المقارنة وتقليل التباين اللغوي.

تطبيع العربية بشكل محافظ

المكتبة: re

اختياري، ومفيد عند جمع نصوص عربية من مصادر مختلفة.

تطبيع العربية
import re

def normalize_arabic(text):
    text = re.sub(r'[إأآٱ]', 'ا', text)
    text = re.sub(r'ى', 'ي', text)
    text = re.sub(r'ـ', '', text)
    text = re.sub(r'[\u064B-\u065F]', '', text)
    return text

text = "إِنَّ اللُّغَةَ العَرَبِيَّةَ جَمِيلَةٌ"
print(normalize_arabic(text))
بعد التطبيع: ان اللغه العربيه جميله
استخدمه فقط إذا كان هدفك المقارنة أو الفهرسة، وليس الحفاظ على النص الأصلي كما هو.

4) تنظيف ملفات الترجمة الثنائية (Source / Target)

هذه المرحلة مهمة جدًا للمترجمين الذين يعملون على كوربس متوازٍ أو ذاكرات ترجمة أو تدريب نماذج ترجمة آلية.

حذف الصفوف الفارغة من العمودين

المكتبة: pandas
Drop Empty Rows
df = df.dropna(subset=['source', 'target'])
df = df[
    (df['source'].astype(str).str.strip() != '') &
    (df['target'].astype(str).str.strip() != '')
]
الفائدة: حذف أي صف لا يحتوي على نص فعلي في المصدر أو الهدف.

تنظيف عمود كامل دفعة واحدة

المكتبة: pandas + re + html
تنظيف الأعمدة
def clean_text(text):
    text = str(text)
    text = html.unescape(text)
    text = re.sub(r'<[^>]+>', '', text)
    text = re.sub(r'http\S+|www\.\S+', '', text)
    text = re.sub(r'\S+@\S+', '', text)
    text = re.sub(r'[\u200b-\u200f\ufeff]', '', text)
    text = re.sub(r'\s+', ' ', text).strip()
    return text

df['source'] = df['source'].apply(clean_text)
df['target'] = df['target'].apply(clean_text)
الفائدة: تنفيذ أهم عمليات التنظيف على كل صف في العمودين دفعة واحدة.

إزالة التكرار التام Exact Dedup

المكتبة: pandas
إزالة التكرار التام
df = df.drop_duplicates(subset=['source', 'target'])
مثال: إذا تكرر الصف نفسه 10 مرات فلن يبقى منه إلا صف واحد.

إزالة التكرار بعد التطبيع

المكتبة: pandas

مفيد عندما يختلف النص فقط في المسافات أو حالة الأحرف.

Dedup بعد normalization
df['source_norm'] = df['source'].str.lower().str.replace(r'\s+', ' ', regex=True).str.strip()
df['target_norm'] = df['target'].str.lower().str.replace(r'\s+', ' ', regex=True).str.strip()

df = df.drop_duplicates(subset=['source_norm', 'target_norm'])
df = df.drop(columns=['source_norm', 'target_norm'])
مثال: السطران Hello World و hello world سيُعتبران تكرارًا.

فلترة الجمل القصيرة جدًا أو الطويلة جدًا

المكتبة: pandas

مفيد لتحسين جودة التدريب أو إعداد corpus أنظف.

Length Filtering
df = df[df['source'].str.len().between(3, 500)]
df = df[df['target'].str.len().between(3, 500)]
الفائدة: حذف الأسطر عديمة القيمة مثل حرف واحد فقط، أو الأسطر الطويلة جدًا بشكل غير طبيعي.

فلترة نسبة الطول بين المصدر والهدف

المكتبة: pandas

مهمة لاكتشاف الصفوف المشوهة أو المحاذاة الخاطئة بين الجمل.

Length Ratio
src_len = df['source'].str.len()
tgt_len = df['target'].str.len()

ratio = src_len / tgt_len.replace(0, 1)
df = df[ratio.between(0.3, 3.0)]
مثال: إذا كانت الجملة المصدر من 200 حرف والهدف من 5 أحرف فقط، فغالبًا هذا صف غير سليم.

التحقق من تطابق عدد الـ Placeholders

المكتبة: re + pandas

مهم جدًا في النصوص البرمجية أو التجارية مثل: {name} أو %s.

Placeholder Check
import re

def count_placeholders(text):
    text = str(text)
    patterns = re.findall(r'(\{[^}]+\}|%s|%d)', text)
    return len(patterns)

df['src_ph'] = df['source'].apply(count_placeholders)
df['tgt_ph'] = df['target'].apply(count_placeholders)

df = df[df['src_ph'] == df['tgt_ph']]
df = df.drop(columns=['src_ph', 'tgt_ph'])
مثال:
المصدر: Hello {name}
الهدف الصحيح يجب أن يحتوي أيضًا على {name} أو placeholder مماثل.

كشف اللغة في المصدر والهدف

المكتبة: langdetect + pandas

مفيد إذا كنت تريد التأكد أن عمود المصدر إنجليزي والهدف عربي مثلًا.

لغة المصدر والهدف
def safe_detect(text):
    try:
        return detect(str(text))
    except:
        return "unknown"

df['source_lang'] = df['source'].apply(safe_detect)
df['target_lang'] = df['target'].apply(safe_detect)

df = df[(df['source_lang'] == 'en') & (df['target_lang'] == 'ar')]
الفائدة: استبعاد الصفوف التي اختلطت فيها اللغات أو انقلب المصدر مع الهدف.

5) إزالة التكرار الدلالي Semantic Dedup

هذه الخطوة متقدمة، لكنها ممتازة عندما تكون الجمل مختلفة قليلًا في الصياغة لكنها متشابهة في المعنى.

تحويل الجمل إلى Embeddings ثم قياس التشابه

المكتبة: sentence-transformers + sklearn

يصلح لاكتشاف الجمل القريبة من بعضها دلاليًا، مثل: How are you? و How do you do?

النسخة الأساسية
sentences = [
    "How are you?",
    "How do you do?",
    "The weather is great today.",
    "Today the weather is wonderful."
]

embeddings = model.encode(sentences)
sim = cosine_similarity(embeddings)

print(sim)
الفكرة: القيم الأعلى من 0.85 أو 0.90 غالبًا تشير إلى تشابه قوي، لكن العتبة تختلف حسب نوع البيانات.
حذف التكرار الدلالي من DataFrame
sentences = df['source'].tolist()
embeddings = model.encode(sentences, show_progress_bar=True)
sim_matrix = cosine_similarity(embeddings)

to_drop = set()
threshold = 0.90

for i in range(len(sentences)):
    for j in range(i + 1, len(sentences)):
        if sim_matrix[i][j] >= threshold:
            to_drop.add(j)

df = df.drop(df.index[list(to_drop)]).reset_index(drop=True)
تنبيه: إزالة التكرار الدلالي قد تحذف جملًا قريبة في المعنى لكنها ليست متطابقة تمامًا. لذلك يفضّل مراجعة النتائج أو اختبار عدة عتبات مثل: 0.85 أو 0.90 أو 0.92.

6) مثال كامل سريع: من نص خام إلى نص نظيف

هذا المثال يجمع أهم ما سبق في دالة واحدة.

مثال متكامل
import re
import html

sample = """
<p>Hello  world!</p>
Visit https://example.com
Email: info@example.com
"""

def clean_text(text):
    text = html.unescape(text)
    text = re.sub(r'<[^>]+>', '', text)
    text = re.sub(r'http\S+|www\.\S+', '', text)
    text = re.sub(r'\S+@\S+', '', text)
    text = re.sub(r'[\u200b-\u200f\ufeff]', '', text)
    text = re.sub(r'\s+', ' ', text).strip()
    return text

cleaned = clean_text(sample)
print(cleaned)
الناتج المتوقع:
Hello world! Visit Email:
وبعدها يمكنك مراجعة النص يدويًا أو إضافة قواعد أخرى حسب نوع مشروعك.

7) تصدير النتائج بعد التنظيف

بعد اكتمال التنظيف، يمكنك حفظ البيانات بعدة صيغ.

تصدير CSV

المكتبة: pandas
Export CSV
df.to_csv('cleaned.csv', index=False, encoding='utf-8')
الاستخدام: أفضل خيار عند نقل البيانات إلى أدوات الترجمة أو التحليل أو التدريب.

تصدير Excel

المكتبة: pandas + openpyxl
Export Excel
df.to_excel('cleaned.xlsx', index=False)
الاستخدام: مناسب للمراجعين أو فرق الترجمة التي تفضّل ملفات Excel.

تصدير TXT من عمود واحد

المكتبة: الأساسية
Export TXT
with open('cleaned_source.txt', 'w', encoding='utf-8') as f:
    for line in df['source']:
        f.write(str(line) + '\n')
الاستخدام: مفيد إذا أردت ملفًا نصيًا بسيطًا من عمود واحد فقط.

تحميل الملف من Colab إلى جهازك

المكتبة: google.colab
Download File
from google.colab import files
files.download('cleaned.csv')
الاستخدام: بعد الحفظ، يتيح تنزيل الملف النهائي مباشرة إلى جهازك.

8) نصائح عملية للمترجمين قبل اعتماد البيانات

  1. احتفظ دائمًا بنسخة خام من الملف قبل أي تنظيف.
  2. لا تطبق التطبيع العنيف على النصوص النهائية إذا كنت تحتاج الحفاظ على الأصل كما هو.
  3. راجع 50 إلى 100 صف يدويًا بعد التنظيف للتأكد أن القواعد لم تحذف شيئًا مهمًا.
  4. استخدم كشف اللغة على عينات، لأن بعض الجمل القصيرة جدًا قد تُصنّف بشكل خاطئ.
  5. في ملفات الترجمة الثنائية، افحص دائمًا توازن المصدر والهدف وطول الجمل والـ placeholders.
  6. إزالة التكرار الدلالي ممتازة، لكنها مرحلة متقدمة وتحتاج اختبارًا على عينة أولًا.

9) لماذا نستخدم هذه الأكواد بالتحديد؟

Regex (re)

الأداة الأقوى لتنظيف الضوضاء البصرية مثل HTML والروابط والمسافات والأحرف غير المرغوبة بسرعة ومرونة.

spaCy

يقدم تطبيعًا لغويًا مفيدًا عبر Lemmatization، مما يقلل اختلاف الصيغ الصرفية عند المقارنة والتحليل.

pandas

مثالي لملفات الترجمة الثنائية والجداول، ويجعل حذف التكرار والصفوف الفارغة والتصدير أمرًا سهلًا جدًا.

Sentence Transformers

يفهم المعنى لا الشكل فقط، لذلك يساعد على اكتشاف التكرارات القريبة دلاليًا التي لا تراها الأدوات التقليدية.

``` ...
Scroll to Top