Reference OS v8 5 دقائق قراءة ٣ يوليو ٢٠٢٦ informational Slopo: اكتشف تكرار الكود غير الحرفي باستخدام التضمين ستتعلم كيفية تثبيت Slopo وتشغيله لاكتشاف التكرار غير الحرفي في مشروع Python الخاص بك خلال…

Show HN: CLI tool for detecting non-exact code duplication with embedding models
اختر القسم الذي تحتاجه الآن
الفكرة التي تمنع التسرع
هل لديك دالتان تفعلان نفس الشيء لكن بأسماء متغيرات مختلفة؟ الأدوات التقليدية لا تكتشف ذلك، لكن Slopo تستخدم AI لحل المشكلة.
قبل أن تطبق، اعرف أين تقف بالضبط
لا تعتمد على الانطباع؛ اختر مؤشراً تراجعه
تخيل أن لديك مشروع Python كبير، وتشك في وجود دوال مكررة تؤدي نفس المهمة لكن بأسماء مختلفة أو ترتيب أسطر مختلف. الأدوات التقليدية مثل PMD تعجز عن اكتشاف هذا التكرار غير الحرفي. هنا يأتي دور Slopo، أداة CLI مفتوحة المصدر تستخدم نماذج التضمين (Embedding Models) لاكتشاف التشابه الدلالي بين أجزاء الكود. في هذا الدليل العملي، ستتعلم كيفية تثبيت Slopo وتشغيله على مشروعك، مع مثال كامل من البداية إلى النتيجة، وأخطاء شائعة وحلولها، وكيفية تخصيص العتبة والنموذج.
Slopo هي أداة سطر أوامر (CLI) مكتوبة بلغة Python، تهدف إلى اكتشاف تكرار الكود غير الحرفي (non-exact code duplication) باستخدام نماذج التضمين. بدلاً من مقارنة النص حرفياً، تحول الأداة الكود إلى تمثيلات رقمية (embeddings) ثم تحسب التشابه بينها. هذا يسمح باكتشاف أجزاء الكود التي تؤدي نفس الوظيفة حتى لو اختلفت في التسميات أو الترتيب.
ملاحظة: README غير واضح بالكامل، لذا الخطوات تقريبية بناءً على بنية المشروع. تأكد من تثبيت Python 3.8+.
python --versionpip install git+https://github.com/rafal-qa/slopo.git (إذا لم يكن متاحاً على PyPI، استخدم هذا الأمر)slopo --helpقد تحتاج إلى إنشاء ملف .env في مجلد المشروع لتحديد متغيرات البيئة. المتغيرات المدعومة حالياً (بناءً على README):
SLOPO_THRESHOLD: نسبة التشابه الدنيا (افتراضي 0.8). مثال: SLOPO_THRESHOLD=0.7SLOPO_MODEL: اسم نموذج التضمين (افتراضي all-MiniLM-L6-v2). مثال: SLOPO_MODEL=all-mpnet-base-v2SLOPO_LANGUAGE: لغة الكود (افتراضي python). مثال: SLOPO_LANGUAGE=pythonملاحظة: هذه المتغيرات قد تختلف حسب إصدار Slopo. راجع الوثائق الرسمية للتأكد.
لنفترض أن لديك مشروع إدارة مخزون بسيط يحتوي على ملفين:
inventory.py
def calculate_tax(price, rate):
return price * rate
def apply_discount(price, discount):
return price - (price * discount)utils.py
def compute_tax(price, rate):
return price * rate
def apply_discount_v2(price, discount):
return price - (price * discount)لاحظ أن calculate_tax و compute_tax متطابقتان وظيفياً لكن بأسماء مختلفة. كذلك apply_discount و apply_discount_v2. شغّل Slopo على المجلد:
slopo scan --threshold 0.7 /path/to/projectالنتائج المتوقعة:
File: inventory.py, Lines: 1-2, Similarity: 1.0 with utils.py Lines: 1-2
File: inventory.py, Lines: 4-5, Similarity: 1.0 with utils.py Lines: 4-5هذا يعني أن Slopo اكتشف التكرار غير الحرفي بنجاح.
يمكنك ضبط عتبة التشابه لتقليل النتائج الإيجابية الخاطئة. على سبيل المثال، إذا كنت تريد فقط التكرار العالي جداً، استخدم --threshold 0.9. إذا كنت تريد اكتشاف تكرارات أقل وضوحاً، استخدم --threshold 0.5. يمكنك أيضاً تغيير نموذج التضمين عبر متغير البيئة SLOPO_MODEL. النماذج الأكبر مثل all-mpnet-base-v2 تعطي دقة أعلى لكنها أبطأ.
النتائج تظهر أزواجاً من أجزاء الكود مع نسبة تشابه (0-1). كلما اقتربت من 1، زاد التشابه. راجع الأجزاء المتشابهة وقرر ما إذا كنت تريد دمجها.
تأكد من أن العتبة منخفضة بما يكفي (جرب 0.5)، وأن المشروع يحتوي على تكرار غير حرفي. يمكنك أيضاً تجربة نموذج مختلف.
نعم، مفتوح المصدر ومجاني بالكامل.
لا، يعمل على CPU بشكل طبيعي.
Slopo أداة واعدة لاكتشاف التكرار غير الحرفي في مشاريع Python. جربها على مشروعك، وشارك ملاحظاتك مع المجتمع. تذكر أن الأداة لا تزال جديدة، لذا توقع بعض التحديات. ابدأ الآن بتحسين جودة كودك.
خطوات عملية مرتبة من التشخيص إلى النتيجة
لماذا؟ بدون التثبيت لا يمكن استخدام الأداة
كيف؟ شغّل الأمر: pip install git+https://github.com/rafal-qa/slopo.git
الناتج: تثبيت ناجح ويمكنك تشغيل slopo --help
لماذا؟ لتخصيص العتبة والنموذج حسب احتياجك
كيف؟ أنشئ ملف .env في مجلد المشروع وأضف: SLOPO_THRESHOLD=0.7 SLOPO_MODEL=all-MiniLM-L6-v2 SLOPO_LANGUAGE=python
الناتج: ملف تكوين جاهز
لماذا؟ لاكتشاف التكرار في الكود
كيف؟ شغّل: slopo scan --threshold 0.7 /path/to/project
الناتج: قائمة بأزواج الكود المتشابه مع نسب التشابه
لماذا؟ لتحديد ما إذا كان التكرار حقيقياً ويحتاج للدمج
كيف؟ راجع الأزواج ذات التشابه العالي (مثلاً >0.8) وافحص الكود يدوياً
الناتج: قرار بشأن دمج الدوال أو إعادة هيكلتها
حوّل القراءة إلى تنفيذ سريع
SLOPO_THRESHOLD=0.7 SLOPO_MODEL=all-MiniLM-L6-v2 SLOPO_LANGUAGE=python
slopo scan --threshold 0.5 /path/to/project
اعرف أين يتعثر الناس وكيف تتجنب ذلك
ماذا تفعل حسب حالتك؟
إذا: إذا كان لديك مشروع Python كبير وتشك في وجود تكرار غير حرفي
إذن: قم بتثبيت Slopo وتشغيله بعتبة 0.7
إذا: إذا حصلت على نتائج كثيرة جداً
إذن: ارفع العتبة إلى 0.9 لتقليل الإيجابيات الخاطئة
إذا: إذا لم تحصل على نتائج
إذن: اخفض العتبة إلى 0.5 أو استخدم نموذج تضمين أكبر
جدول صغير يمنع التسويف
نقاط مختصرة ترجع لها لاحقاً
1. Slopo تستخدم نماذج تضمين sentence-transformers.
2. الأداة مكتوبة بلغة Python وتعمل على CLI.
3. العتبة الافتراضية هي 0.8.
4. النموذج الافتراضي هو all-MiniLM-L6-v2.
5. يمكن تخصيص لغة الكود عبر متغير SLOPO_LANGUAGE.
6. Slopo مجاني ومفتوح المصدر.
7. لا يحتاج إلى GPU، يعمل على CPU.
8. النتائج تظهر أزواجاً من أجزاء الكود مع نسبة تشابه.
إجابات مباشرة على ما يبحث عنه الزائر
تعريفات مختصرة تمنع الالتباس
أجزاء كود تؤدي نفس الوظيفة لكنها مختلفة في التسميات أو ترتيب الأسطر.
نموذج تعلم آلي يحول النص إلى متجهات رقمية لقياس التشابه.
قيمة قطع للتشابه، النتائج فوقها تعتبر مكررة.
استخدمها كمسارات متابعة داخل نفس الموضوع
تحول القارئ: من مطور يجهل وجود أدوات لاكتشاف التكرار غير الحرفي إلى مطور يستخدم Slopo بفعالية لتحسين جودة كوده
القيمة الحقيقية تظهر عند العودة والتطبيق
لا تتعامل معه كمقال يُقرأ مرة واحدة. استخدمه كلوحة تشغيل: ارجع للتشخيص عند ظهور المشكلة، وللقوالب عند التطبيق، ولمؤشرات القياس عند المراجعة.
Slopo أداة واعدة لاكتشاف التكرار غير الحرفي في مشاريع Python. جربها على مشروعك، وشارك ملاحظاتك مع المجتمع. تذكر أن الأداة لا تزال جديدة، لذا توقع بعض التحديات. ابدأ الآن بتحسين جودة كودك.
حتى يبقى المرجع صالحاً مع الوقت
FAQ
استمر في القراءة