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

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

مغلق
بدأه Mr.ASP في 12 فبراير 2002 · 5 رد · 5,102 مشاهدة · في أرشيف قسم SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أنا عملت برنامج للقرآن الكريم بلغة ال ASP ..

بس السؤال عن ال SQL ...

السؤل:

الأية:

إِيَّاكَ نَعْبُدُ وإِيَّاكَ نَسْتَعِينُ

عند البحث عن أحد كلمات هذه الآية بدون التشكيل ، لا تظهر أي نتائج و هذا طبيعي ...

المطلوب:

تحويل الأية إلى هذه الصيغة

إياك نعبد وإياك نستعين

أي مع حذف التشكيل حتى تسهل عميلة البحث ...

الطريقة الي مستخدمها حاليا هي :

في جدول الآيات هناك عمودين للآيات واحد بالتشكيل و الثاني بدونه .. هذا الحل جيد و لكنة غير عملي ؟؟

هذه الطريقة تضاعف حجم قاعدة البيانات ....

في البرمجة : يمكنك عمل تغيرات إلى النص المراد بحثة ك حذف بعض الحروف أو التشكيل / المطلوب منكم عمل هذا في ال SQL Server

من خلال Stored Procedure ، أو بطرق أخرى ....

#2

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

المشكلة ممكن حلها ب Stored Procdure و لكن تخيل ماذا سيحدث حيث انه سيتطلب ان تزيل التشكيل من كل حقل قبل مقارنته و هذا سيبطئ قاعدة البيانات بصورة كبيرة جدا

في النص العربي للاسف نحن واقعين بين خيارين سئين و هما اما نضحي بالسرعة او بالمساحة :(

#3

أهلين أخوي خضر

كنت متوقع هذا ....

ومن شدة اليأس :( فكرت بطريقة مجنونة ....

مثلا البحث عن كلمة نستعين : في القرآن الكريم الكلمة مهي التشكيل هي : نَسْتَعِينُ

الطريقة هي كتابة كل الكلمات المحتملة مع التشكيل

يعني:

أحتمالات كلمة نستعين مع التشكيل

َستعين

نًستعين

نُستعين

نِستعين

نٍستعين

....

الخ ...

كلمة واحدة من 6 حروب و مايقارب 10 أشكال من التشكيل ؟

كم كلمة تنتج ؟

6 ×10 = 600 لا أكثر ، شغلة بالحساب بس الفكرة فعلا مجنونة .....

بس من هذه الفكرة المجنونة وجدت الحل ؟؟

فكرتني بال regular expression ، بحثت بالأنترنت عن دعم قواعد البيانات لبحث ب regular expression أو الأنماط ووجدتها :D ...

قاعدة بيانات MySQL تدعم هذا النوع من البحث ، لمعرفة المزيد أذه إلى

MySQL Manual G Description of MySQL regular expression syntax

http://www.mysql.com/doc/R/e/Regexp.html

بس للأسف ماحصلت شي مشابه بال MSSQL ...

#4

ال regular expression موجودة في Microsoft Access و Microsoft SQL Server ولكن لكل منهما رموزه الخاصة في ذلك

ال regular expression ستبطئ الاستعلام بصورة كبيرة جدا اذا استخدمت بكثافي في اية قاعدة بيانات

على العموم الرموز الخاصة ب SQL Server موجودة في الكتيب الالكتروني الذي ينزل مع البرنامج و هو مطابق لتعليمات SQL 92 القياسية

#5

regular expression بسيط جدا :

؟ و _ و % ...

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

للعمل بالدالة:

لنفرض أن لديك عمود من نوع nvarchar(500) مليء بالتشكيلات

و أسمة col_1 في جدول tbl_mytable ..

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

select dbo.fn_RemoveTashkeel (col_1) from tbl_mytable ;

و هذه الجملة للبحث مع حذف التشكيلات:

select * from tbl_mytable where dbo.fn_RemoveTashkeel (col_1) Like '%كلمة%';

كود الدالة:

CREATE FUNCTION fn_RemoveTashkeel (@InputString nvarchar(2300) )

RETURNS nvarchar(2300) 

AS

BEGIN

   DECLARE @OutputString nvarchar(2300) COLLATE Arabic_BIN 

   DECLARE @TashkeelChr char(8) COLLATE Arabic_BIN 

   DECLARE @feed int

   SET @OutputString=@InputString

   SET @TashkeelChr='ًٌٍَُِّْْْْْ'

   SET @feed=1

 WHILE @feed<=LEN(@TashkeelChr)

   BEGIN

    SET @OutputString=REPLACE(@OutputString,SUBSTRING(@TashkeelChr,@feed,1),'')

    SET @feed=@feed+1

   END

   RETURN(@OutputString)

END
#6

اخواني الأعزاء كل عام و انتم بخير

عندي تقريبا نفس قاعدة بالأكسس بها آيات القرآن كل آية في سجل و اريد ان ابحث في هذه القاعدة من خلال الفيجوال بيسيك و اريد ان اعرض البيانات المفلترة على dbgride و قد قمت بعمل كل شيء و لكن سطر الأمر بال sql لا يعطيني ما اريد بالظبط مثلا عند البحث عن كلمة الله يجب ان يعطيني كل الآيات التي ذكر بها لفظ الجلالة الله و لكن ما يحدث غير ذلك و قد قمت بوضع السطر كالتالي

select * from tablename like "*الله*"

و لكن البحث يمكن ان يكون صحيحا فقط عندما اكتب الآية كاملة و اريد من الأخوان ان يبينوا لي ما الخطأ في الجملة حيث ان خبرتي بال sql ليست كبيرة و شكرا مقدما لكل من قرأ الموضوع ، وعلى فكرة يا اخي انا اقوم بالبحث في السجل الغير مشكل و اتوقع ان المساحة لن تكون كبيرة و السرعة لن تكون ملحوظة اذا استخدمت هذه الآيات غير المشكلة في البحث ;) (f) على فكرة انا استخدم الفيجوال بيسيك يعني البرنامج بالفيجوال شكرا

هذا الموضوع مغلق.

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