ماذا سنبني اليوم؟
اليوم، سنقوم ببناء نظام آلي متكامل "للتدقيق اللغوي والتصحيح" للمحتوى العربي قبل نشره. هذا النظام لن يقتصر على الأخطاء الإملائية والنحوية فحسب، بل سيتطرق أيضاً إلى جوانب تحسين محركات البحث (SEO) لضمان جودة المحتوى من كافة النواحي. الهدف هو أتمتة عملية المراجعة الأولية، مما يوفر الوقت ويحسن من جودة المحتوى المنشور.
الجزء الأول: فهم المشكلة والأدوات
في عالم المحتوى الرقمي السريع، يمثل التدقيق اللغوي اليدوي تحدياً كبيراً من حيث الوقت والدقة. الأخطاء اللغوية لا تقلل فقط من مصداقية المحتوى، بل يمكن أن تؤثر أيضاً سلباً على تجربة المستخدم وترتيب المحتوى في محركات البحث. نظامنا سيساعد في:
- اكتشاف الأخطاء الإملائية والنحوية الشائعة في اللغة العربية.
- تحسين صياغة الجمل لزيادة سهولة القراءة.
- التأكد من تضمين الكلمات المفتاحية بشكل طبيعي ومناسب لتحسين SEO.
الأدوات المستخدمة:
- Python: لغة البرمجة الأساسية لتنفيذ المنطق.
- camel_tools: مكتبة قوية لمعالجة اللغات الطبيعية (NLP) للغة العربية، ستساعدنا في التحليل اللغوي مثل تجزئة الكلمات (tokenization)، وتصنيف أجزاء الكلام (POS tagging).
- re (Regular Expressions): للبحث عن أنماط نصية محددة.
ملاحظة تقنية هامة: التدقيق اللغوي للغة العربية معقد بسبب طبيعتها الصرفية الغنية. مكتبات مثل
camel_toolsتقدم أساساً ممتازاً للتحليل، لكن التدقيق النحوي الكامل يتطلب نماذج لغوية متقدمة جداً. سنركز في هذا الدرس على الكشف عن الأخطاء الشائعة والتحسينات المتعلقة بالصياغة والـ SEO.
الجزء الثاني: إعداد بيئة العمل
قبل البدء، نحتاج إلى تثبيت Python والمكتبات اللازمة. تأكد من أن لديك Python 3 مثبتاً على نظامك.
تثبيت المكتبات:
افتح سطر الأوامر (Terminal أو Command Prompt) وقم بتنفيذ الأوامر التالية:
pip install camel_tools
قد تحتاج أيضاً إلى تنزيل بعض نماذج البيانات لـ camel_tools. يمكنك القيام بذلك برمجياً أو باستخدام الأمر التالي:
python -m camel_tools.download_models
الجزء الثالث: بناء منطق التصحيح اللغوي والـ SEO
سنقوم بإنشاء دالة رئيسية تأخذ نصاً عربياً كمدخل، ثم تطبق عليه سلسلة من عمليات التحليل والتدقيق.
1. تحليل النص وتجزئته (Tokenization)
باستخدام camel_tools، يمكننا تقسيم النص إلى كلمات وجمل، وهو أمر أساسي لأي تحليل لاحق.
2. التدقيق الإملائي (Spelling Check)
سنستخدم قائمة بسيطة من الأخطاء الإملائية الشائعة وتصحيحاتها، بالإضافة إلى الكشف عن الكلمات التي قد تكون غير قياسية.
3. التدقيق النحوي والأسلوبي (Grammar & Style Check)
هذا الجزء يتطلب قواعد أكثر تعقيداً. سنركز على الكشف عن:
- تكرار الكلمات غير الضروري.
- الجمل الطويلة جداً التي قد تؤثر على سهولة القراءة.
- الكلمات أو العبارات المحظورة (مثل كلمات الحشو).
4. تحسين محركات البحث (SEO Optimization)
لضمان أن المحتوى صديق لمحركات البحث، سنتحقق من:
- كثافة الكلمات المفتاحية (Keyword Density): التأكد من استخدام الكلمات المفتاحية المستهدفة بشكل كافٍ ولكن ليس مبالغاً فيه.
- سهولة القراءة (Readability): تقييم تقريبي لمدى سهولة قراءة المحتوى وفهمه.
ملاحظة تقنية: لتبسيط التدقيق الإملائي، سنقوم بإنشاء قاموس بسيط للأخطاء الشائعة. في نظام إنتاجي، قد تحتاج إلى دمج قاموس أوسع للغة العربية أو استخدام نماذج تعلم آلة مدربة خصيصاً.
الجزء الرابع: الكود العملي
هذا هو الكود الكامل الذي يجمع كل الأجزاء المذكورة أعلاه. قم بحفظه كملف proofreader.py.
import re
from camel_tools.utils.normalize import normalize_unicode
from camel_tools.segmentation import TextSegmenter
from camel_tools.morphology.analyzer import Analyzer
from collections import Counter
class ArabicProofreader:
def __init__(self, target_keywords=None, forbidden_words=None, common_errors=None):
self.segmenter = TextSegmenter(preset='standard')
self.analyzer = Analyzer('msa') # Modern Standard Arabic analyzer
# SEO & Style settings
self.target_keywords = target_keywords if target_keywords else ['محتوى', 'SEO', 'تدقيق لغوي', 'أتمتة']
self.forbidden_words = forbidden_words if forbidden_words else ['بصراحة', 'في الحقيقة', 'على الأرجح']
# Simple common spelling/grammar errors (key: wrong, value: correct)
self.common_errors = common_errors if common_errors else {
'هاذا': 'هذا',
'ذالك': 'ذلك',
'الأن': 'الآن',
'لاكن': 'لكن',
'شئ': 'شيء',
'مسؤليه': 'مسؤولية',
'فقط لاغير': 'فقط لا غير',
'بصورة جيدة': 'بشكل جيد',
'المحتوي': 'المحتوى'
}
def _clean_text(self, text):
"""Normalize unicode and remove extra spaces."""
text = normalize_unicode(text)
text = re.sub(r'\s+', ' ', text).strip()
return text
def _get_sentences(self, text):
"""Split text into sentences."""
# A simple regex for Arabic sentence splitting. Can be improved.
sentences = re.split(r'(?<=[.?!؛])\s+', text)
return [s.strip() for s in sentences if s.strip()]
def _get_words(self, text):
"""Tokenize text into words."""
# Use camel_tools segmenter for more robust word tokenization
segmented_text = self.segmenter.segment(text)
words = []
for sentence_tokens in segmented_text:
words.extend(sentence_tokens)
return words
def _calculate_readability(self, text):
"""
A very simplified readability score for Arabic.
Based on average sentence length and average word length.
Lower score generally means easier to read.
"""
sentences = self._get_sentences(text)
words = self._get_words(text)
if not sentences or not words:
return 0.0
avg_sentence_length = sum(len(self._get_words(s)) for s in sentences) / len(sentences)
avg_word_length = sum(len(w) for w in words) / len(words)
# This is a heuristic, not a standard formula for Arabic
readability_score = (avg_sentence_length * 0.5) + (avg_word_length * 0.2)
return readability_score
def analyze_content(self, content_text):
"""
Analyzes the given Arabic text for spelling, grammar, style, and SEO.
Returns a dictionary with feedback.
"""
original_text = content_text
cleaned_text = self._clean_text(content_text)
words = self._get_words(cleaned_text)
sentences = self._get_sentences(cleaned_text)
feedback = {
'original_text': original_text,
'suggestions': [],
'warnings': [],
'seo_report': {},
'readability_score': 0.0
}
# --- Spelling and Common Grammar Errors ---
word_counts = Counter(words)
for i, word in enumerate(words):
# Check for common errors
if word in self.common_errors:
feedback['suggestions'].append(
f"تصحيح إملائي/نحوي: الكلمة '{word}' قد تكون خاطئة، المقترح: '{self.common_errors[word]}'."
)
# Basic repetition check (e.g., "الكلمة الكلمة")
if i > 0 and words[i-1] == word:
feedback['warnings'].append(f"تكرار كلمة: الكلمة '{word}' مكررة بشكل متتالٍ. حاول إعادة الصياغة.")
# --- Style and Readability Checks ---
for sentence in sentences:
sentence_words = self._get_words(sentence)
# Check for long sentences
if len(sentence_words) > 25: # Arbitrary threshold for long sentences
feedback['warnings'].append(f"جملة طويلة: الجملة '{sentence[:50]}...' طويلة جداً ({len(sentence_words)} كلمة). حاول تقسيمها لزيادة سهولة القراءة.")
# Check for forbidden words
for forbidden_word in self.forbidden_words:
if forbidden_word in sentence:
feedback['warnings'].append(f"كلمة/عبارة محظورة: الجملة تحتوي على '{forbidden_word}'. يفضل تجنبها لتحسين الأسلوب.")
# --- SEO Report ---
total_words_count = len(words)
if total_words_count > 0:
for keyword in self.target_keywords:
keyword_count = sum(1 for word in words if keyword in word) # Simple substring match
density = (keyword_count / total_words_count) * 100
feedback['seo_report'][keyword] = {
'count': keyword_count,
'density': f"{density:.2f}%"
}
# Add suggestions for keyword density
if density < 1.0: # Too low
feedback['suggestions'].append(f"تحسين SEO: كثافة الكلمة المفتاحية '{keyword}' منخفضة ({density:.2f}%). حاول دمجها بشكل طبيعي أكثر.")
elif density > 3.0: # Too high (keyword stuffing)
feedback['warnings'].append(f"تحذير SEO: كثافة الكلمة المفتاحية '{keyword}' مرتفعة جداً ({density:.2f}%). قد يعتبر حشواً للكلمات المفتاحية.")
# --- Readability Score ---
feedback['readability_score'] = self._calculate_readability(cleaned_text)
if feedback['readability_score'] > 15: # Arbitrary threshold for complex text
feedback['warnings'].append(f"سهولة القراءة: المحتوى قد يكون صعب القراءة (المعدل التقريبي: {feedback['readability_score']:.2f}). حاول تبسيط الجمل والكلمات.")
return feedback
# --- مثال على الاستخدام ---
if __name__ == "__main__":
content = """
أهلاً بك في هذا الدرس التقني، اليوم سنبني نظام أتمتة لتدقيق المحتوي العربي.
هاذا النظام سيساعدك في تحسين جودة المحتوى قبل النشر، بصراحة هو مهم جداً.
سنركز على التدقيق اللغوي والـ SEO معاً. يجب أن يكون المحتوى سهل القراءة ومناسب لمحركات البحث.
الأن يمكنك إستخدام هذا الكود. لاكن تذكر أن التدقيق اللغوي العربي معقد.
المسؤليه تقع عليك لتحسينه.
"""
# يمكنك تخصيص الكلمات المفتاحية والكلمات المحظورة والأخطاء الشائعة
my_keywords = ['تدقيق لغوي', 'أتمتة', 'محتوى عربي', 'SEO']
my_forbidden_words = ['بصراحة', 'في الحقيقة']
my_common_errors = {
'هاذا': 'هذا',
'الأن': 'الآن',
'لاكن': 'لكن',
'المحتوي': 'المحتوى',
'إستخدام': 'استخدام',
'المسؤليه': 'المسؤولية',
'وصفه': 'وصفة' # Example of adding a new error
}
proofreader = ArabicProofreader(
target_keywords=my_keywords,
forbidden_words=my_forbidden_words,
common_errors=my_common_errors
)
analysis_results = proofreader.analyze_content(content)
print("--- تقرير التدقيق اللغوي والـ SEO ---")
print(f"\nالنص الأصلي:\n{analysis_results['original_text']}")
print("\n--- الاقتراحات (Suggestions) ---")
if analysis_results['suggestions']:
for suggestion in analysis_results['suggestions']:
print(f"- {suggestion}")
else:
print("لا توجد اقتراحات لتحسين المحتوى.")
print("\n--- التحذيرات (Warnings) ---")
if analysis_results['warnings']:
for warning in analysis_results['warnings']:
print(f"- {warning}")
else:
print("لا توجد تحذيرات مهمة في المحتوى.")
print("\n--- تقرير SEO ---")
for keyword, data in analysis_results['seo_report'].items():
print(f" - الكلمة المفتاحية '{keyword}': العدد={data['count']}, الكثافة={data['density']}")
print(f"\n--- سهولة القراءة (Readability Score) ---")
print(f" - المعدل التقريبي لسهولة القراءة: {analysis_results['readability_score']:.2f}")
# Example with a more complex text
print("\n" + "="*50 + "\n")
print("--- مثال على نص أكثر تعقيداً ---")
complex_content = """
تعتبر أتمتة العمليات اللغوية للمحتوي العربي تحديًا كبيرًا يتطلب فهمًا عميقًا لعلم الصرف والنحو العربي.
تلك التقنيات الحديثة، مثل معالجة اللغات الطبيعية (NLP)، تمكننا من بناء أنظمة تدقيق لغوي فعالة.
بصراحة، تطبيق هذه الأنظمة يساهم بشكل كبير في تحسين جودة المحتوى المنشور على الإنترنت،
مما يعود بالنفع على القارئ ويسهل على محركات البحث فهرسة المحتوى بشكل أفضل.
الأن، مع تزايد حجم المحتوى الرقمي، أصبح من الضروري إستخدام أدوات أتمتة متطورة لضمان خلو النصوص من الأخطاء.
"""
complex_analysis_results = proofreader.analyze_content(complex_content)
print("\n--- الاقتراحات (Suggestions) ---")
if complex_analysis_results['suggestions']:
for suggestion in complex_analysis_results['suggestions']:
print(f"- {suggestion}")
else:
print("لا توجد اقتراحات لتحسين المحتوى.")
print("\n--- التحذيرات (Warnings) ---")
if complex_analysis_results['warnings']:
for warning in complex_analysis_results['warnings']:
print(f"- {warning}")
else:
print("لا توجد تحذيرات مهمة في المحتوى.")
print("\n--- تقرير SEO ---")
for keyword, data in complex_analysis_results['seo_report'].items():
print(f" - الكلمة المفتاحية '{keyword}': العدد={data['count']}, الكثافة={data['density']}")
print(f"\n--- سهولة القراءة (Readability Score) ---")
print(f" - المعدل التقريبي لسهولة القراءة: {complex_analysis_results['readability_score']:.2f}")
النتيجة النهائية المتوقعة
بعد تشغيل الكود الموضح أعلاه (ملف proofreader.py)، ستحصل على تقرير مفصل في سطر الأوامر (Console) يتضمن:
- النص الأصلي: لعرض المحتوى الذي تم تحليله.
- الاقتراحات (Suggestions): قائمة بنقاط التحسين المقترحة، مثل تصحيحات الأخطاء الإملائية والنحوية الشائعة، واقتراحات لتحسين كثافة الكلمات المفتاحية.
- التحذيرات (Warnings): قائمة بالنقاط التي قد تحتاج إلى مراجعة، مثل تكرار الكلمات، الجمل الطويلة جداً، أو وجود كلمات/عبارات محظورة.
- تقرير SEO: يوضح عدد مرات ظهور كل كلمة مفتاحية مستهدفة وكثافتها في النص، مع تحذيرات إذا كانت الكثافة منخفضة جداً أو مرتفعة جداً (حشو الكلمات المفتاحية).
- سهولة القراءة (Readability Score): معدل تقريبي يشير إلى مدى سهولة قراءة المحتوى وفهمه، مع تحذير إذا كان المعدل يشير إلى نص معقد.
هذا التقرير سيمنحك رؤى فورية وقابلة للتنفيذ لتحسين جودة محتواك قبل نشره، مما يضمن خلوه من الأخطاء اللغوية وتحسين فرص ظهوره في محركات البحث.