الموضوع ليس مسألة أو وظيفة أو تمرين في جامعة أو أي شيء من هذا القبيل إنما للنقاش البناء وإيجاد أفضل مقاربة ممكنة
نص المسألة: نريد برنامجا يعالج بأكبر دقة ممكنة موضوع تقسيم الاسم الثلاثي باللغة العربية إلى تفاصيل اسماء
طبعا الكود أو الخوارزمية المستخلصة ممكن تستخدم في كثير من البرمجيات وفوائدها كالتالي:
1- نقل البيانات من قاعدة بيانات تستخدم الاسم الثلاثي للعميل إلى قاعدة بيانات مفصلة الاسم الثلاثي
2- التسهيل على المستخدم بالادخال
3- إدارة إمكانية التعلم الذاتي للبرنامج
يمكن استخدام السيناريوم التالي كأحد الأمثلة:
يدخل المستخدم الاسم الثلاثي ثم يضغط زر enter أو زر نفذ فيقوم البرنامج بشكل تلقائي بتقسيم الاسم سواء كان ثلاثيا أو ثنئيا أو رباعيا لاسم و اسم أب وكنية كما في الشكل التالي :
يجب أن يتحرى المستخدم أكبر دقة ممكنة ويعالج حالات الاسماء المركبة في بداية ونهاية الأسماء بأكبر دقة ممكنة.
النقاش مفتوح لمعالجة الحالات..
أسئلة ممكن الاعتماد عليها:
- كيف سيعالج البرنامج الأسماء الثلاثية
- كيف سيعالج الأسماء المركبة (الأكثر شيوعا")
- كيف سيعالج الاسماء المركبة مع الاسماء المكونة من أكثر من اربع مقاطع
في المثال التالي: الاسم: "محمد محي الدين الشيخ صبري"
لاحظ النمط التالي :
عبدو كلمة وحيدة , بينما عبد الرحمن هي كلمة وحيدة.
عبد الرحمن يمكن دمج الكلمتين بكلمة واحدة لتصبح عبدالرحمن
الشيخ صبري كلمة واحدة
محي الدين كلمة واحدة
هذه الأنماط يجب معالجتها وهي ليست بالكثيرة فالافضل بناء قاموس بها مارأيكم.
خلونا نكون واضحين أكتر وصريحين أكتر :
لا يمكن تحري الدقة التامة ,لكن يمكن إعطاء نتائج بدقة تصل إلى 70-75% في حال معالجة بعض الأمور.
1- هناك بعض الكلمات التي دائماً (أو في حالات شاذة فقط لايحصل هذا) ما تلحق بكلمات أخرى كمثال :
أ- "عبد" لوحدها ليست إسما وغالبا ما يأتي بعدها ال التعريف "عبد الـ"
ب- محي لا تأتي لوحدها ودائما تلحقها كلمة الدين مثل "محي الدين" أما كلمة "محي" لوحدها تلحق بياء أخرى لتصبح "محيي"
2- في حالة كان الاسم يحتوي على ال التعريف في بداية الكلمة فلا يلحق بكلمة أخرى مثل "المثنى" , "الصادق"
3- هناك بعض الكلمات التي احتمال أن تلحق بكلمة أخرى كبيرا (خاصة في نهايات الجملة ) مثل "الشيخ" ,لكن فرصة وجودها بدون كلمة أخرى أيضا كبيرا.
4- بعض الألقاب التي تعود للفترة العثمانية غالبا ما تكون بوزن "الفًعًل في" كمثال "الكبك جي","القفه في", "الطرق جي" ...
طيب كبداية ما رأيكم بهذا الكود:
string fulln=dr["FullName"].ToString(); string FirstName,LastName,FatherName; string[] FullName = fulln.Split(); if ((fulln.Contains("عبد") && !fulln.Contains("عبدو")) || fulln.Contains("أبو") || fulln.Contains("محي") || fulln.Contains("ابو") || fulln.Contains("الشيخ")) { int indx = -1; if (fulln.Contains("عبد ا")) { indx = fulln.IndexOf("عبد ا"); fulln = fulln.Remove(indx + 3, 1); } if (fulln.Contains("محي")) { indx = fulln.IndexOf("محي"); fulln = fulln.Remove(indx + 3, 1); } if (fulln.Contains("الشيخ ")) { indx = fulln.IndexOf("الشيخ "); fulln = fulln.Remove(indx + 5, 1); } FullName = fulln.Split(); for (int i = 0; i < FullName.Count(); i++) { if (FullName.Contains("محي")) { FullName = FullName.Insert(FullName.IndexOf("محي") + 3, " "); } if (FullName.Contains("الشيخ")) { FullName = FullName.Insert(FullName.IndexOf("الشيخ ") + 6, " "); } } } int size = FullName.Count(); if ((FullName[0].Contains("عبد") && !FullName[0].Contains("عبدو")) || FullName[0].Contains("ابو") || FullName[0].Contains("أبو") || FullName[0].Contains("محي")) { if (size < 3) { FirstName = FullName[0]; LastName = FullName[1]; FatherName = ""; } else if (size < 4) { FirstName = FullName[0] + " " + FullName[1]; LastName = FullName[2]; } else if (size < 5) { FirstName = FullName[0] + " " + FullName[1]; FatherName = FullName[2]; LastName = FullName[3]; } else { FirstName = FullName[0]; FatherName = FullName[1]; string str = string.Empty; for (int i = 2; i <= size; i++) { str += FullName + " "; LastName = str.Trim(); } } } else { if (size < 3) { FirstName = FullName[0]; LastName = FullName[1]; FatherName = ""; } else if (size < 4) { FirstName = FullName[0]; FatherName = FullName[1]; LastName = FullName[2]; } else if (size < 5) { FirstName = FullName[0]; FatherName = FullName[1]; LastName = FullName[2] + " " + FullName[3]; } else { FirstName = FullName[0]; FatherName = FullName[1]; string str = string.Empty; for (int i = 2 ; i <= size; i++) { str += FullName + " " ; LastName = str.Trim(); } } }فما رأيكم دام فضلكم ؟
يرفع من قيمة الموضوع واهمية الرد