الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف نقوم بكتابة كود للبحث عن ورود كلمة بالاكثر احتمالية

بدأه أبو حنان في 13 يوليو 2010 · 7 رد · 1,294 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

بدئ ذي بدء أعلم اني قد اثقلت عليكم في الفترة الاخيرة لكن اعتقد ان هذا المنتدى العريق به من الكفاءات والخير الكثير ، لذلك اسنحملوني

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

لدينا 5 جداول في قاعدة بيانات SQL Server وهي التالي :

1- OneWord وبها حقلين الحقل الاول يسمى Word وسيكون به النص المشكول والحقل الثاني يسمى WordWithoutTashkeel وسيكون به النص الغير مشكول

2- TowWords وبها حقلين بنفس اسماء الحقول في الجدول الاول

3-ThreeWords وبها حقلين بنفس اسماء الحقول في الجدول الاول

4-FourWords وبها حقلين بنفس اسماء الحقول في الجدول الاول

5- FiveWords وبها حقلين بنفس اسماء الحقول في الجدول الاول

طبعا سيتم إدخال الكلمات المشكولة من خلال البرنامج وقد قمت بعمل ذلك والحمد لله

بحيث النص الموجود في Richtextbox نقوم بتقسمه الى كلمات ( كلمة واحد - كلمتان - ثلاث كلمات - اربع كلمات - خمس كلمات ) ومن ثم ادراجهم في الجداول انفة الذكر .

طبعا الى جانب مراعاة خذف التشكيل من الحقل الثاني

والى هنا ليس هناك مشكلة

لكن كيف سيكون الكود في اختيار الكلمة المناسبة للتشكيل بناء على اعلى نسبة احتمالية في ورود الكلمة في الجداول الخمس ؟؟

نرجو ممن لديه خلفية ان يدلنا على الكود الصحيح لعمل ذلك

مع خالص الشكر والتقدير لكل اعضاء هذا المنتدى الكريم

مختار أحمد

موقع الويب : http://www.luxorsystems.com

منتدياتنا :http://www.luxorsystems.com/forum/index.php

للمراسلة

luxorsystems@hotmail.com

للاتصال التليفوني

00201228085123

#2

أخي الكريم أبو حنان

لقد قمت منذ سنوات بتصميم مشروع ضحم للبحث واستعراض الكتب الاسلامية والبحث ضمن هذه الكتب ..وطبعا البحث كان عن طريق كلمة او جملة متطابقة او متباعدة ..

وكلمات البحث تكون طبعا من غير تشكيل فكيف سيتم البحث في الكتب دون تشكيل..

كانت طريقتي معقدة بعض الشيء ولكن تتميز بسرعة كبيرة للبحث وخاصة ان المجلدات كانت ضخمة وحجم الصفحات كبير

كان تصميمي لقاعدة البيانات بشكل هرمي .(التصنيف ---> الكتب ----> المجلدات ---- > ------ الأقسام ----- > الصفحات ------> كلمات الصفحة <----- الكلمات )

فقد كانت الكتب عبارة عن ملف نصي اقوم بقراءته وفهرسته ضمن قاعدة البيانات بهذا الشكل (طبعا كان الملف النصي بتنسيق معين )

أعود الأن إلى سؤالك ..والذي يهمنا فيما سبق هو الجدول الأخير الكلمات .

أقترح عليك اخي الكريم ان يكون لديك جدول واحد للكلمات فقط صحيح انه ممكن انه يكون كبير ولكن اذا وضعت عليه Index سيعمل بشكل رائع وسريع وخاصة مع SQL Server

جدول الكلمات سيحتوي الحقول التالية

ID طبعا مفتاح اساسي تعداد تلقائي

WordWithTashkeel ويكون من نوع Varchar

WordWithTashkeel ويكون من نوع Varchar أيضا

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

أولا قم بقراءة النص المشكل في الذاكرة وقم بتقسيمه لكلمات عن طريق Split تقسيمه حسب الفراغات بين الكلمات ولكن سيتم التقسيم ايضا حسب احرف الجر والعطف عليك ان تقوم ببعض المعالجة ودمجها مع الكلمة التالية اذا لم تكن تريد فهرستها بشكل وحيد

ومن ثم تقوم بازالة التشكيل من كل كلمة واضافتها لجدول الكلمات بشكل مشكل وليس مشكل

- البحث: عند البحث تقوم بالبحث عن الكلمة غير المشكلة طبعا وتقوم بجلب حقل الكلمة المشكلة وتحديد موضعها في RichText الذي يساعدك بذلك بكل سهولة عن طريق IndexOf او Find على حسب ما اذكر

ارجو ان تكون المعلومة وصلت .. ابدأ بمحاولتك وسنساعدك إن شاء الله ..

بالتوفيق

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#3

السلام عليكم ورحمة الله

أخ الكريم was_hal بارك الله فيك على ردك وجزاك عني خير الجزاء

لكن يبدو أنني لم اوضح الهدف من عمل عدد 5 جداول .

في الواقع انني حينما قمت بصميم الجداول على هذه الشاكلة كان الهدف منها هو ( دقة التشكيل ) كيف يكون ذلك ؟؟

والاجابة على الكيفية في دقة التشكيل تكمن في أن الجدول الاول سوف يحتوى كلمة وحيدة والجدول الثاني سيكون في الحقل (كلمتين متجاورتين ) وفي الجدول الثالث ثلاث كلمات متجاورة والرابع أربع كلمات متجاورة وفي الخامس خمس كلمات متجاورة .

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

واحب ان انوه الى أن هذه الطريقة متبعة من برنامج بحثي خاص بجامعة الملك سعود وهو في المشاركة التالية ويسمى ( التشكيل الآلي مع التصحيح ) :

هذا هو الرابط - اضغط هنا

حاول تحميل البرنامج وانظر الى قاعدة البيانات وهي قاعدة بيانات اكسس ستفهم قصدي تماما إن شاء الله

وبارك الله فيك على حسن التعاون

مختار أحمد

موقع الويب : http://www.luxorsystems.com

منتدياتنا :http://www.luxorsystems.com/forum/index.php

للمراسلة

luxorsystems@hotmail.com

للاتصال التليفوني

00201228085123

#4
اقتباس

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

بصراحة يا اخي لم افهم قصدك بشكل جيد ممكن ان توضح اكثر بمثال حتى استطيع مساعدتك اكثر .. انا قرأت الموضوع ولكن كان عن التشكيل والنطق الصوتي ..huh.gif

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#5

السلام عليكم ورحمة الله وبركاته

بارك الله فيك على تواصلك معي اخي الكريم

دعني أوضح ما اريد بالمثال التالي :

لنفرض أن لدينا Richtextbox فتحنا فيها ملف غير مشكول ولنفرض أن الملف مثلا يحتوي على جملة واحد للتبسيط وهي ( قرأ أحمد الدرس جيداً ) ونريد انا نشكلها

طبعا مع ملاحظة أنا جميع كلمات الجملة موجودة مشكولة في قاعدة البيانات ففي الجدول الأول موجودة الجملة كل كلمة كالتالي كل كلمة في سجل :

قرأ

أحمد

الدرس

جيداً

إذا هنا الكلمة موجودة في 4 سجلات مختلفة

وموجودة في الجدول الثاني كلمتين كلمين

قرأ أحمد

الدرس جيداً

وهنا موجودة في سجلين فقط

وفي الجدول الثالث موجودة كالتالي

قرأ أحمد الدرس

جيداً

وفي الجدول الرابع موجودة الجملة كالتالي :

قرأ أحمد الدرس جيدا

طبعا مع مراعاة أن من الممكن ان يكون التشكيل مختلف لأن ممكن الكلمة الواحدة تكون مكررة في الجداول بحسب موقعها في الجملة أثناء إدخالها لقاعدة البيانات

هنا سنبدأ البحث مثلا عن الكلمة الأولى وهي ( قرأ ) وسيكون البحث في الجدول الرابع

ما اريده هو طريقة للبحث اعرف منها الكلمة التالية فالتالية فالتالية فالتالية من الجملة في ( نفس الحقل ) بحيث لو تشابه الثلاث كلمات التالية في البحث فإذا هنا دقة التشكيل عند استبدال الكلمة سيكون اكبر عما لو وجدت الكلمة منفردة

أرجو أن اكون قد أوضحت المشكلة بشكل اكبر عن ذي قبل

وفي الناهية أشكر مجهودك وتعبك معي وجزاك الله عني خيرا

مختار أحمد

موقع الويب : http://www.luxorsystems.com

منتدياتنا :http://www.luxorsystems.com/forum/index.php

للمراسلة

luxorsystems@hotmail.com

للاتصال التليفوني

00201228085123

#6
أبو حنان كتب:

السلام عليكم ورحمة الله وبركاته

بارك الله فيك على تواصلك معي اخي الكريم

دعني أوضح ما اريد بالمثال التالي :

لنفرض أن لدينا Richtextbox فتحنا فيها ملف غير مشكول ولنفرض أن الملف مثلا يحتوي على جملة واحد للتبسيط وهي ( قرأ أحمد الدرس جيداً ) ونريد انا نشكلها

طبعا مع ملاحظة أنا جميع كلمات الجملة موجودة مشكولة في قاعدة البيانات ففي الجدول الأول موجودة الجملة كل كلمة كالتالي كل كلمة في سجل :

قرأ

أحمد

الدرس

جيداً

إذا هنا الكلمة موجودة في 4 سجلات مختلفة

وموجودة في الجدول الثاني كلمتين كلمين

قرأ أحمد

الدرس جيداً

وهنا موجودة في سجلين فقط

وفي الجدول الثالث موجودة كالتالي

قرأ أحمد الدرس

جيداً

وفي الجدول الرابع موجودة الجملة كالتالي :

قرأ أحمد الدرس جيدا

طبعا مع مراعاة أن من الممكن ان يكون التشكيل مختلف لأن ممكن الكلمة الواحدة تكون مكررة في الجداول بحسب موقعها في الجملة أثناء إدخالها لقاعدة البيانات

هنا سنبدأ البحث مثلا عن الكلمة الأولى وهي ( قرأ ) وسيكون البحث في الجدول الرابع

ما اريده هو طريقة للبحث اعرف منها الكلمة التالية فالتالية فالتالية فالتالية من الجملة في ( نفس الحقل ) بحيث لو تشابه الثلاث كلمات التالية في البحث فإذا هنا دقة التشكيل عند استبدال الكلمة سيكون اكبر عما لو وجدت الكلمة منفردة

أرجو أن اكون قد أوضحت المشكلة بشكل اكبر عن ذي قبل

وفي الناهية أشكر مجهودك وتعبك معي وجزاك الله عني خيرا

أخ أبو حنان

شكرا لك لهذا الشرح الأن اتضحت الصورة ..smile.gif

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

وكما قالوا لكل مشكلة 100 حل .. ولكن ليس كلها أفضل حل..

أنا لا اعرف هل بياناتك تحتوى على صفحات كل الكتب ام لا ؟ ولكن لنعود الى تصميم قاعدة البيانات السابق وساخبرك بتعديل صغير سيفيدك اكثر إن شاء الله

.(التصنيف ---> الكتب ----> المجلدات ---- > ------ الأقسام ----- > الصفحات ------> كلمات الصفحة <----- الكلمات )

وسأفصل لك الثلاث جداول الأخيرة كالتالي:

الصفحات:

  • PageID ( حقل PrimaryKey طبعا )
  • PageName (اسم الصفحة Varchar اذا كان لها اسم )
  • DepID رقم القسم أو الفصل التابعة لها

الكلمات:
  • WordID (حقل PrimaryKey أيضا )
  • WordWithoutTashkeel
  • WordWithTashkeel

كلمات الصفحات: (هنا بيت القصيد)

  • ID رقم PrimaryKey يفضل ان يكون Bigint اذا كان حجم البيانات كبير
  • WordID رقم الكلمة
  • PageID رقم الصفحة ا لتي تنتمي لها هذه الكلمة
  • WordIndexً موضع الكلمة في الصفحة

أمر هام:

الكلمات في جدول الكلمات لا تتكرر لتجنب تكرار البياننات وزيادة حجم قاعدة البيانات.

طريقة الارشفة:

عند ارشفة الكتاب مثلا او اي مستند تريده ..

نقوم بأخد نسختين من المستند في مصفوفتين إحداهما مشكلة والأخرى ليست مشكلة (نزيل التشكيل منها برمجيا ..)

تقوم بتقسيم المستندين (بتشكيل ومن دون تشكيل الى كلمات ) مع الاحتفاظ بموضع الكلمة غير المشكلة في المستند

والبحث عن كل كلمة مشكلة في جدول الكلمات ..

إذا لم نجدها نخزنها وإذا وجدت نقوم بتسجيلها مع رقم الصفحة وموضعها بدون تشكيل في المستند في الجدول كلمات الصفحات..

طريقة البحث:

الأن عند البحث مثلا عن الجملة (قرأ أحمد الدرس جيدا) ..

كلمة قرأ وليكن موضعها في المستند ( Index = 105 ) تنتمي للصفحة رقم ( PageID = 3 ) لجلب الكلمة المشكلة نكتب الاستعلام التالي :

Select TableWords.WordWithTashkeel From TableWords Inner Join TablePageWords On TableWords.ID = TablePagesWords.WordID
Where TablePagesWord.PageID = 3 And WordIndex = 105

سيتم جلب الكلمة الصحيحة المشكلة لهذا الموضع تحديدا ..

أرجو أن تكون الفكرة وضحت ..wink.gif

بالتوفيق

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#7

السلام عليكم ورحمة الله وبركاته

أولا : شكرا على كل ما تبذله معي في هذا المشكلة وجعل الله مجهودك في ميزان حسناتك يارب

ثانيا :- المشكلة لديا أنه ليس هناك كتب أو صفحات للكتب وما شابه

ولكن هناك مستند يدخل للبرنامج قد يكون هذا المستند مكون من 1000 كلمة وقد يكون المستند فيه 5 أو 6 كلمات فقط لا غير

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

ونفس الامر يتم في الجدول الثاني لكن بوضع كلمتين كلمتين

ونفس الامر في الجدول الثالث نقوم بوضع ثلاث كلمات ثلاث كلمات وهكذا حتى الجدول الخامس نضع فيه خمس كلمات خمس كلمات

وهناك ملاحظة هامة :

لا يحق لنا منع تكرار الكلمات وذلك لأنه من الممكن أن تأتي الكلمة في جملة بتشكيل معين وتأتي في جملة أخرى بتشكيل أخر مختلف

بعد ذلك نأتي للدور المعاكس أي تشكيل الكلمات من واقع قاعدة البيانات فيقوم المستخدم بفتح مستند ( غير مشكول ) وكما في السابق قد يحوي المستند على ألف جملة أو ألف كلمة وقد يحوي فقط جملة واحدة

وعملية فتح المستند حذف التشكيل وحف النص المشكول في قاعدة البيانات كل ذلك قمت به ولا مشكلة فيه ابدا والحمد لله .

نأتي الآن لتفكيري في عملية التشكيل من واقع قاعدة البيانات ولا ادري كيفية تنفيذ ذلك

لنفرض السناريو التالي :

ادخل المستخدم مستند مكون من جملة واحدة فقط ونفرض انها ( قرأ أحمد الدرس جيداً ) ونريد أن نشكبل هذه الجملة

هنا كان تفكيري أن نقسم الجملة الى كلمات وبحث عن الكلمة الأولى في الجدول الخامس ثم نخزن ناتج البحث في متغير

ثم نقوم بالبحث عن الكلمة التالية لها فإن وجدناها في نفس الحقل كان دقة الشكيل للكلمة الاولى عالية ونقوم بالبحث عن الكلمة الثالثة فإن وجدت في نفس الحقل كانت دقة التشكيل أعلى فأعلى وهكذا حتى نصل للكلمة رقم 5 .

وفي حال لم نجد الكلمة الثانية أو الثالثة نبحث في الجدول الرابع ثم الثالث ثم الثاني حتى إذا عجزنا عن ايجاد كلمات مشابة للكلمات التالية لكلمة البحث وهي الاولى في حالتنا قمنا بجلبها من جدول الكلمة الواحدة بتشكيلها واستبدلناها في المستند المفتوح

وفي النهاية أتمنى أن اكون أوضحت الصورة بشكل جيد

مع خالص شكري وتقديري لمجهودك لكن اقول يعوضك الله بمجهودك خيري الدنيا والأخرة إنه ولي ذلك والقادر عليه .

مختار أحمد

موقع الويب : http://www.luxorsystems.com

منتدياتنا :http://www.luxorsystems.com/forum/index.php

للمراسلة

luxorsystems@hotmail.com

للاتصال التليفوني

00201228085123

#8

وعليكم السلام ورحمة الله وبركاته ..

إذا كان ليس عندك صفحات والمستخدم يمكنه ان يفتح مستند غير الذي تم ارشفته سابقا فطريقتك صحيحة .. وتقبل محاولتي .. ولك التوفيق .. wink.gif

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…