التعرف التلقائي على اتجاه الفقرات في صفحات الويب - 2

قمت الان بتطبيق السكربت على هذا البلوك و كذلك على بلوكي الياباني و بلوكي الاخر على http://tech.hasenj.org

كتجربة عملية، لنجرب كتابة فقرة انكليزية:

This is webbidi in action, it’s figuring out which paragraphs are LTR and which are RTL, and then fixing them accordingly.

من اهداف السكربت ان يكون ذكيا بعض الشيء و لا يعتمد فقط على اول كلمة في الجملة، بل ياخذ في الحسبان انه قد تكون هناك فقرة عربية تبدأ بكلمة انكليزية، على سبيل المثال:

linux هو نظام تشغيل مفتوح المصدر، و هو النظام المفضل لدى الهاكرز (هواة البرمجة).

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

كيف نحدد اذن اتجاه الفقرة؟

العملية ليست بذلك التعقيد، الاسلوب اللذي اتبعته يعتمد على فكرة بسيطة: تخيل ان هناك فقرة عربية تبدأ بكلمة انكليزية، ما هي الخاصية اللتي تحويها هذه الفقرة لكي نحكم عليها انها ليست فقرة انكليزية؟ بسيطة .. ستجد ان اغلب الكلمات في الفقرة عربية. لذلك ربما نريد ان نحدد اتجاه الفقرة عن طريق اتجاه اول جملة فيها و ليس اول كلمة فيها.

الفكرة ببساطة، نقوم بأخذ اول X كلمات، حيث X = 10 و ناخذ اتجاه اول كلمة على انه المرشح C، و نعتبر الاتجاه الاخر D ناخذ نسبة الاتجاهات C الى D، فإذا كان عدد الكلمات ذات الاتجاه C اكثر من P بالمئة (حيث P = 40) نعتبر ان اتجاه الفقرة هو C (و هو مرشحنا الاول)، اما اذا وجدنا ان نسبة الكلمات اللتي تحمل هذا الاتجاه اقل من P بالمئة، نعتبر الاتجاه الاخر هو اتجاه الجملة.

هذه الفكرة تعتمد على افتراض و هو ان عدد الكلمات الانكليزية سيكون قليلا في هذه الحالة. قد لا تنجح الفكرة في جميع الحالات، او قد تقودني التجارب الى تغيير قيم X و P، فقد اقوم باخذ عدد اكبر من الكلمات، او بدل الاعتماد على عدد الكلمات، قد ابحث عن اول جملة عن طريق البحث عن نقطة او سطر جديد او ما شابه.

و السبب في تحديد النسبة P برقم 40 (اي اقل من النصف) هو حالة خاصة واجهتها في البلوك الياباني و ذلك عند ذكر معاني الكلمات: فمعاني الكلمات عادة تكون اسطر قليلة، كل سطر يبدأ بكلمة من اللغة الاخرى يليها المعنى العربي، و هنا اريد ان يكون اتجاه الفقرة هو اتجاه اللغة الاخرى.

و طبعا في جميع الاحوال، مهما حاولنا تضبيط السكربت و جعله اكثر ذكاءاَ، ستظل هناك حالات تحتاج الى تدخل بشري لتحديد اتجاه الفقرة، و في هذه الحالة يمكن ان نعتمد على رموز اليونيكود الخاصة بتحديد الاتجاه مثل RLE و اخواتها، و هي رموز غير مرئية لهذا تسترعي شيئا من الحذر في الاستعمال. و هذه الجزئية لم اقم باضافتها بعد لكنها ضمن مخططات التطوير.

الكود بسيط و صغير، ادعوكم لقرائته على github

http://github.com/hasenj/bidiweb/blob/master/autobidi.js

لم اضع اشعار ترخيص في الملف (بعد) و لكن هو مشروع مفتوح المصدر و باختصار افعل به ما تشاء! حتى لو وضعته في برامج مغلقة او مواقع خاصة او برامج تجارية.. ليس لدي اي مانع. فقط ارجو المشاركة بالتحسينات في حال قمت باضافة خواص جديدة (لكنك غير مجبر على ذلك).