العودة إلى المدونة

أداة humanizer في Instagram Agent Skill تحذف محارف الربط وعلامات الاتجاه من النص العربي

Instagram Agent Skill ثلاث عشرة مهارة مجانية لـ Claude برخصة MIT، بلا تسجيل ولا مفتاح API. لكن أداة humanizer فيها تحذف ZWNJ وZWJ وعلامات الاتجاه، وdetect.py يعطي النص الفارسي والعربي الصحيح درجة أسوأ. اعرف هذا قبل التثبيت.

ينتشر Instagram Agent Skill هذه الأيام بكثرة: ثلاث عشرة مهارة لـ Claude تتولى جانب الكتابة في حساب إنستغرام. يقول ملف README إنها مجانية برخصة MIT، بلا تسجيل ولا مفتاح API ولا ربط بالحساب. قرأنا المستودع عند الـ commit d03c56b (١٣ سبتمبر ٢٠٢٦). هذه الادعاءات صحيحة. لكن مهارة واحدة فيه تُفسد النص الفارسي، وتمسّ العربي أيضًا.

ما الموجود فعلًا في المستودع

  • ثلاثة عشر مجلدًا في skills/، من ig-reel وig-caption إلى ig-dm وig-audit. التثبيت بثلاث طرق: لصق الرابط في Claude، أو نسخ المجلدات إلى ~/.claude/skills/، أو إضافته كـ plugin. (README)
  • السكربتات الخمسة بلغة Python تستورد المكتبة القياسية فقط، ولا يستخدم أيٌّ منها requests أو urllib أو socket.
  • لا تنشر شيئًا. يقول README ذلك صراحة: المهارات تكتب وأنت تنشر، لأن الأتمتة عبر المتصفح تخالف شروط إنستغرام. «مدير المحتوى» هنا يعني مساعد كتابة، لا مشغّل حساب.
  • اختبر المؤلف أداة تقييم الـ hook ونشر النصف المزعج من النتيجة. تلتقط الـ hooks السيئة عمدًا جيدًا (AUC ٠٫٨٣)، لكنها قريبة من رمي العملة في التمييز بين نجاحات صانع محتوى وإخفاقاته (AUC ٠٫٥٦). والبيانات من YouTube Shorts بالإنجليزية، لا من Reels.

ما اصطدمنا به

ig-human هي أداة humanizer، ويصفها README بأنها سبب صلاحية البقية للاستخدام. قائمة المحارف «غير المرئية» في slop.json. السطر ١١ هو U+200C، أي ZERO WIDTH NON-JOINER، مع "action": "delete". وتحذف القائمة نفسها ZWJ (U+200D) وLRM وRLM وARABIC LETTER MARK (U+061C).

حذف مدخل من القائمة لا يحميه. ففي humanize.py، الأسطر ٨٨ إلى ٩٢، يُحذف كل محرف متبقٍّ من فئة يونيكود Cf، وZWNJ منها. في الفارسية تصبح «می‌خواهم» «میخواهم». وفي العربية، علامات الاتجاه هي ما يضبط ترتيب علامات الترقيم والأرقام حين يختلط النص بكلمات لاتينية، وحذفها قد يقلب ذلك الترتيب.

ويعدّ detect.py كل محارف Cf في السطر ١٠٨ ويعطي كلًّا منها وزن ٤ في السطر ١١٣. فيحصل النص المكتوب بشكل صحيح على درجة FINGERPRINT أسوأ ويبدو آليًا أكثر.

ومشكلة ZWJ تخص كل اللغات: الإيموجي المركّبة مثل 👨‍👩‍👧 تبقى متصلة به، وحذفه يفككها إلى إيموجي منفصلة.

لم نشغّل السكربتات. كل ما سبق من قراءة الشيفرة، والأسطر مرتبطة.

ما العمل

لا تشغّل humanize.py على نص فارسي أو عربي. وإن أردت تشغيله، فاحذف هذه المداخل الخمسة من مصفوفة invisible في slop.json وضيّق حذف Cf:

# Persian and Arabic need these; ZWJ also holds emoji sequences together
KEEP = {chr(c) for c in (0x200C, 0x200D, 0x200E, 0x200F, 0x061C)}

stray = [c for c in text if unicodedata.category(c) == "Cf" and c not in KEEP]
text = "".join(c for c in text if unicodedata.category(c) != "Cf" or c in KEEP)

ويحتاج detect.py:108 الاستثناء نفسه، وإلا بقيت الدرجة تعاقبها.

المصادر

مسودة بمساعدة الذكاء الاصطناعي، راجعها عماد حبيب‌نيا