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

البحث داخل مصفوفة نصية عن كلمة مطابقة او مشابهة

بدأه garo في 31 مارس 2008 · 8 رد · 1,617 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم .

ما هي افضل الطرق للبحث عن كلمة داخل مصفوفة نصية عن كلمة؟

مثلا

اذا كانت لدي النص التالي:

my name is garo

و اريد البحث عن كلمة nome مع العلم ان هذه الكلمة غير موجودة في النص السابق

فقط اريد من عملية البحث اخراج الكلمة المطابقة لها او اقرب كلمة تشبه كلمة nome و هي name

( _ /)

(='.'=)

(")-(")

#2

السلام عليكم,,

موضوع جميل أخ garo,

في الحقيقة أعرف خوارزميتين يقومان بالعمل,

الأولى تسمى SoundeX, و الأخ تمام كوجان وضع في منتدى الـ #C كود يطبق هذه الخوارزمية, و هي المستعملة على ما أعتقد في MS SQL Server,

الطريقة بكل بساطة, هي البحث عن الكلمات ذات النطق المشابه للكلمة المراد البحث عنها و الغير موجودة في النص!

الخوارزمية تقتضي بأن نقسم الحروف إلى مجموعات حسب المخارج الصوتية, و بعد ذلك نعطي لكل مجموعة رقماً,

بالتالي ستصبح الكلمات عبارة عن مجموعة من الأرقام, و الكلمات ذات النطق المتشابه ستحصل على نفس الأرقام!

يمكنك الاطلاع على الخوارزمية من هنا :

Soundex

و هنا موضوع الأخ تمام كوجان :

الخوارزميات الصوتية : خوارزمية SoundX, مع دعم اللغة العربية

الخوارزمية الثانية هي خوارزمية المسافة بين الكلمات أو ما يسمى Levenshtein Distance,

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

Levenshtein distance

هذا ما لدي و أتمنى أن أرى الجديد في هذا الموضوع, فالموضوع واسع و من الجميل التطرق لمثل هذه المواضيع المتقدمة,

ما رأيكم أن نكتب دالة لتطبيق خوارزمية SoundeX,

تحياتي,,

#3

هل هناك شروط للتقارب.

مثلا لها نفس العدد الحروف ام لا.

هل تقبل باختلاف حرف او حرفين وهل شرط متتابعة ام غير متجاورة.

tvquran_6.gif

#4

البحث عن نفس الكلمه ، يمكن ذلك وهناك الكثير من الخوارزميات ، ولكن البحث عن كلمه مشابه مممم فعلي ما يبدوا الأمر ليس بهذه السهوله !

خوارزميه Brute-Force لاستخراج Index للنص المشابه ، طبعا بعد معرفه Index يمكن أن نخرج الكلمه .

// String Processing

// Brute-Force Method
//  romansy

#include <iostream>
using namespace std;

int SearchMathcing ( char* first , char* second );

int main ()
{
	char* str = "Wajdy Essam in Java Developer And C++ Programmer !";
	char* sub = "am";

	cout << "First  : " << str << endl;
	cout << "second : " << sub << endl;

	int x = SearchMathcing(str,sub);

	if ( x >= strlen(str) )
		cout << "Cannot Found [" << sub << "] in String !\n";
	else
		cout << "Found [" << sub << "] in index [" << x << "] .\n";

	return 0;
}

int SearchMathcing (char* first , char* second )
{
	int i , j;
	int m = strlen(first);
	int n = strlen(second);

	for (i=0,j=0; i<m && j<n; i++,j++)
	{
		while ( first != second[j] )
		{
			i = i - ( j-1 );
			j = 0;
		}
	}

	if ( j == n )
		return i-n;

	else
		return i;
}

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#5

انا لو فعلا سأقوم بذلك واريد ان اختصر على نفسي سأقوم بأنشاء دالة تأخذ ثلاثة Parameters الأول هو الجملة والثاني هو الكلمة والثالث هو الدقة اي مثلا : ( 1 تعني تطابق الكلمة تماما , 2 تطابق جميع الحروف الا حرف واحد , 3 ......وهكذا )

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

اشكرك اخي Garo

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#6

اخي time1

طريقتك حلوة وصحيحة

بس مشكلتها تخلي الحاسوب ينتحر..... لأنه افرض كان عندك ملف نص فيه 1 ميجا؟!

بالنسبة لك اخي garo

فان احد الطرق الممتازة لحل مثل هذه المشاكل هو

الشبكات العصبية

Nural Network

ابحث عنها في

google وسوف تجد شروحات كثيرة

#7

Carlito

اقتباس
اخي time1

طريقتك حلوة وصحيحة

بس مشكلتها تخلي الحاسوب ينتحر..... لأنه افرض كان عندك ملف نص فيه 1 ميجا؟!

هو من ناحية انه راح ينتحر راح ينتحر لا شك في ذلك :D

لكن نقدر نقسم الملف إلى Lines من ثم إلى Segments ونبحث ....

نستطيع ان نعقد الخوارزمية قليلا لنصل إلى نتائج افضل , طبعا لاحظ هنا انه يوجد space بين كل كلمتين لكن انا افترض دائما ان البحث داخل كلمة طويلة لا يفصل بينها اي space .. لحظة !!

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

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

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#8

زي ما قلت لك هي صحيحة

نلخصها بالتالي:-

لتكون المشكلة هي البحث عن كلمة داخل نص متعدد الأسطر, نعلم ان هناك فراغ بين كل كلمتين, ونممشي على هذا الأساس الإفتراض

ودعك من البحث عن كلمة داخل كلمة الى حين آخر - لأنه الحاسوب راح يدخل على مستشفى مجانين اذا ما انتحر :wacko:

ونتسعمل طريقتك:

ابدأ بالبحث عن كل كلمة تبدأ بالحرف

اذا متطابق انتقل للحرف الثاني وهكذا

بس تعرف شي اخوي time1 نحن طلعنا عن المشكلة الأساسية

اعتقد انه المشكلة الأساسية هي البحث عن كلمة تشابه وليس تطابق B)

وبالتالي الا توافقني ان هذه الطريقة لاتنجح

خخخخخخخخخخخخخ

ممكن احتساب احتمالية مثلا كما ضرب اخونا garo مثال على البحث عن كلمة nome في الجملة my name is garo

فتكون الإحتمالية كالتالي:-

name هي اربع احرف فنوزع الإحتمالية على كل حرف وبالتالي تكون 25% لكل حرف فإذا عبر النسبة - هنا 75%- اذاً وجدها

بس شوف بالإمكان برمجتها بس انتظر فكرتك ورأيك في فكرتي اعلاه

وننتظر ايضا اراء الخبراء

اقتباس
هو من ناحية انه راح ينتحر راح ينتحر لا شك في ذلك
وراك وراك يالحاسوب الا تنتحر
#9

شكرا اخي خالد علي المساعدة

التي استفدت منها جدا

وشكرا لكل من time1 و Carlito

( _ /)

(='.'=)

(")-(")

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

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

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

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

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