PDA

View Full Version : جستجوی متن های دارای اعراب عربی



niloufar
دوشنبه 11 دی 1385, 16:00 عصر
دوستان سلام
آیا کسی در رابطه با متن های دارای اعراب تجربه ای دارد؟
موضوع از این قراره که اگر یک فیلد از متن های اعراب دار داشته باشیم، در هنگام جستجو می خواهم اعراب ها درنظر گرفته نشوند. به عبارت دیگر اگر کاربر مثلا "الحسین" را جستجو کرد "الحُسَین" را هم پیدا کند.
این کار در MS-Word به طور اتوماتیک انجام میشود (امتحان کنید واقعا من که وقتی فهمیدم واقعا لذت بردم، اساسا این ورد آنقدر کارایی دارد که هرچی آدم ازش میبینه بازم چیزهایی هست که نمیدونه!)
اول حدس زدم شاید Ignore کردن اعراب رو همه حالیشون میشه (و ورد هم یکی از اون همه) اما دیدم که نه کوئری Select حالیش میشه و نه توابع Replace و Instr و نه حتی Find در ادیتور خود دات نت!!
لذا ورد خودش داره یه جور کلک میزنه.

این موضوع در دو دیدگاه باید بررسی بشه، یکی هنگام Select که رکوردهای دارای فلان کلمه را پیدا کنیم و یکی بعد از آوردن و برای HighLight کردن آن لفظ (یعنی در توابعی مثل Replace , Instr).

برای اولی یه نیمچه راه خودم به نظرم رسید و اون اینکه یه فیلد هم در بانک از بدون اعراب ها داشته باشیم و جستجو را در این فیلد داشته باشیم و نمایش رو از فیلد با اعراب. اما این هم یه نقص داره که اگه کاربر مثلا یکی از حروف را (نه همه حروف) را در کادر جستجو با اعراب نوشت دیگر نه از فیلد با اعراب پیدا میشود و نه از فیلد بدون اعراب.

برای دومی هم که اصلا راهی به ذهنم نرسید که چگونه هنگام نمایش (پس در فیلد دارای اعراب هستیم) بتوانم لفظ کاربر را (که اعراب ندارد) در متن (که اعراب دارد) با توابع Instr یا Replcae پیدا کنم و آن را با چیز دیگری (مثل highlight شده آن) تعویض کنم.

هر یک از دوستان که بتواند در این دو زمینه کمک کند ممنون میشم.

با تشکر

titbasoft
دوشنبه 11 دی 1385, 17:37 عصر
فقط در حد یک سرنخ:
http://www.barnamenevis.org/forum/showthread.php?t=33120

niloufar
چهارشنبه 13 دی 1385, 15:10 عصر
سلام
ظاهرا در اون تاپیک، مشکل من مشکل شما هم بوده، خوب خودتون چه کار کردید؟
جوابهای اون تاپیک رو نتونستم مورد استفاده قرار بدم (مقاله هاش که یکیش باز نشد و یکیش در VisualFoxPro بود که قبلا تو MSDN دیدم که ظاهرا گفته بود خودش Diacratics (اعراب) رو حالیش میشه. نامه الکترونیکی موجود هم که فقط طرح سوال بود نه جواب)

ممنون

niloufar
شنبه 16 دی 1385, 14:45 عصر
سلام
من هنوز منتظر جوابم.

Microsoft.net
شنبه 16 دی 1385, 16:56 عصر
موقعی که sql نصب میشه (2000) در یک مرحله سوال میکنه که حساسیت در کد پیج به چه صورت باشه مثلا case sensetive,accent sensetive,... و چند تا option دیگه که حدس میزنم اونی که شما می خواهید توش هست . فقط نکته این که بعد از نصب sql دیگه نمیتونید اونا رو تغییر بدید چون موقع نصب بانک Master با اونها کد میشه و تغییرش بعدا موجب ایجاد اشکال خواهد شد . در نتیجه دوباره باید Sql رو نصب کنید ...

Ner'zhul Arthas
یک شنبه 17 دی 1385, 01:23 صبح
من با وی بی 6 یه برنامه قرآن با 6 ترجمه نوشتم. برای جست و جو در اول برنامه بغیر از داشتن متن اصلی قرآن یه متن بدون اعراب هم در رم گرفتم.
من از پایگاه های داده استفاده نمیکنم.

برنامه قرآن رو خط به خط (آیه به آیه) که می خوند یکی به آرایه ی اصلی میداد یکی هم با فانکشن زیر اعرابش رو برمیداشت و به آرایه ی بدون اعراب میداد.

شکل دات نتش:



Private Function Trim_O(ByVal i As String) As String
i.Replace("ً", "")
i.Replace("ُ", "")
i.Replace("ٍ", "")
i.Replace(",", "")
i.Replace("َ", "")
i.Replace("ِ", "")
i.Replace("ّ", "")
i.Replace("ء", "")
i.Replace("ْ", "")
i.Replace("ٌ", "")
i.Replace("آ", "ا")
i.Replace("إ", "ا")
i.Replace("أ", "ا")
i.Replace("ة", "ه")
Return i
End Function

بعد برای جست و جو تو آرایه ی بدون اعراب میگشت ولی جواب رو در آرایه ی با اعراب میداد.

برای این که کاربر با اعراب نوشت باز هم نتیجه بده میتونید فانکشن رو برای ورودی که از کاربر میگیرید هم استفاده کنید.

روش دیگه هم اینه که کلی این متن رو در حافظه رم یا هارد نریزید بلکه در خود جست و جو قبل از جست و جوی هر فیلد یه نمونه از اون فیلد گرفته و اون رو با فانکشن تمیز کنید و بعد توش بگردید.

titbasoft
سه شنبه 19 دی 1385, 08:59 صبح
ببخشید مشکلی پیش اومده بود که این تاپیک رو ندیدم، به هر حال، چند راه حل بهم پیشنهاد شد اما هیچ کدوم رضایت کارفرما رو تامین نکرد، فکر می کنم SQL Server 2005 یا خودش یا با یک پک جانبی بتونه این کار رو انجام بده، البته اصلا مطمئن نیستم. آقای ثباتی اگر چنین چیزی وجودداشته باشه قطعا در جریان هستند. پس سوالتون رو توی بخش SQL Server مطرح کنید.

ضمن اینکه چند تا امکانی که به دات نت 2 و SQL Server 2005 اضافه شده، به نظرم کمک های بسیار خوبی خواهند بود. من خودم تجربه ای نداشتم اما مطمئن هستم که امکانش وجود داره.

مثلا یک چنین سناریویی:
اگر بشه با استفاده از Regex دات نت یک Managed Stored Procedure نوشت که در زمان اجرا این کار رو انجام بده با توجه به (varchar(Max، قطعا پاسخ مناسب تری نسبت به SQL Server 2000 خواهید گرفت.

البته چون پرسیدید، پروژه ما در نهایت با ذخیره 2 نمونه از متن انجام شد. یک علت مهمش ناتوانی Index کردن در غیر این صورت بود.

niloufar
یک شنبه 24 دی 1385, 14:44 عصر
سلام
1- از همه بزرگواران ممنون که پیگیری می کنند.
2- من که خیلی تو دات نت و MSDN گشتم اما راه حل حسابی یافت می نشود (یا لااقل من یافت می نکردم همی)
3- اصلا فرض کنیم که بحث جستجو با همون دو بارذخیره (با اعراب و بی اعراب) حل شد (که فعلا راه بهتری پیدا نکردم) اما مشکل بعدی را چه طور حل کنیم. مشکل اصلی تو نمایشه که باید متن با اعراب نمایش داده بشه. دیگه اونجا مثلا برای اینکه متنی که کاربر جستجو کرده بود رو HighLight کنیم، باید اول اون رو (البته تو همون اعراب دار) پیدا کنیم و واضحه که دیگه نمیشه تو بی اعرابه پیداش کرد چون محل یک کلمه در با اعرابه و در بی اعرابه متفاوتند (به خاطر اعراب) و ما می خواهیم متن با اعراب رو HighLight کنیم و به کاربر به عنوان نتیجه جستجویش نشان دهیم.
4- اگر نظری دارید ممنون میشم بدونم.
5- ممنون

meh_secure
دوشنبه 25 دی 1385, 00:30 صبح
به نظر من هم بهتره اعراب رو از متن حذف کنید. یعنی 2 بار ذخیره کنید. یکی با اعراب یکی بدون اعراب

niloufar
دوشنبه 25 دی 1385, 14:18 عصر
به نظر من هم بهتره اعراب رو از متن حذف کنید. یعنی 2 بار ذخیره کنید. یکی با اعراب یکی بدون اعراب

سلام
خوب!! برای مشکلی که تو پست قبل گفتم چی؟!!


(راستی تولد 500 پستگی ام هم مبارک، هی می خواستم به 500 نرسه (آخه ستاره هاش که سبز و آبی قاطی بودند قشنگ تر بود تا الان که یه دست آبی شدند) آخرم نشد.)

Ner'zhul Arthas
دوشنبه 25 دی 1385, 16:16 عصر
یه روش دیگه هم هست.
اینکه اعراب رو جدا کنید و ذخیره کنید.
(متن با اعراب نه ها، اعراب خالی)
متن بدون اعراب هم جدا ذخیره کنید.

در جست و جو بدون اعراب رو میگرده. و وقتی میخواست نشون بده روش اعراب رو میچسبونه.
وقتی هم که طرف اعراب گذاشت باز همون جست و جو رو انجام میده ، از میان یافته ها اعراب گذاری میکنه و میگرده ، و یافته ها رو نشون میده.

روش دیگه هم اینه که سیستم جست و جو رو خودتون بنویسید(کاراکتر به کاراکتر بگرده)

اینطوری متونید کاری کنید که وقتی طرف گشت دنبال " کَرم "
همه ی اینا رو پیدا کنه:{ کَرَم ، کَرَمَ ، کَرم ، کَرُم و ... }

meh_secure
سه شنبه 26 دی 1385, 00:13 صبح
سلام
خوب!! برای مشکلی که تو پست قبل گفتم چی؟!!


(راستی تولد 500 پستگی ام هم مبارک، هی می خواستم به 500 نرسه (آخه ستاره هاش که سبز و آبی قاطی بودند قشنگ تر بود تا الان که یه دست آبی شدند) آخرم نشد.)
به اون موضوع دقت نکرده بودم. اما فکر می کنم Full text indexing در SQL Server بتونه کمکت کنه. در موردش تحقیق کن . معمولا این سرویس که اشاره کردم هم خانواده ی کلمات رو هم پیدا می کنه. شاید در مورد اعراب هم جواب داد.

راستی در مورد ستاره های سبز و آبی هم یه پیشنهادی دارم:
جساراتا البته : یکی دو تا از پست های بیهودمون رو حذف کنیم. :چشمک:

niloufar
سه شنبه 26 دی 1385, 12:38 عصر
یه روش دیگه هم هست.
اینکه اعراب رو جدا کنید و ذخیره کنید.
(متن با اعراب نه ها، اعراب خالی)
متن بدون اعراب هم جدا ذخیره کنید.

در جست و جو بدون اعراب رو میگرده. و وقتی میخواست نشون بده روش اعراب رو میچسبونه.
وقتی هم که طرف اعراب گذاشت باز همون جست و جو رو انجام میده ، از میان یافته ها اعراب گذاری میکنه و میگرده ، و یافته ها رو نشون میده.

روش دیگه هم اینه که سیستم جست و جو رو خودتون بنویسید(کاراکتر به کاراکتر بگرده)

اینطوری متونید کاری کنید که وقتی طرف گشت دنبال " کَرم "
همه ی اینا رو پیدا کنه:{ کَرَم ، کَرَمَ ، کَرم ، کَرُم و ... }
سلام
1- آخه چه طور ممکنه اعراب ها رو جدا نگه داشت و بعدا دقیق سر جاشون چسبوند، با توجه به اینکه حروف لزوما همشون اعراب ندارند و یادداشت آدرس ها هم علاوه بر احتمال بالای باگ، سرعت رو هم در برگرداندن پایین میاره.
2- خودمون جستجو را حرف به حرف انجام بدیم هم که علاوه بر اینکه حتما غیر بهینه و لذا با سرعت پایینتر خواهد بود، دردی از مشکل اخیر دوا نمیکنه و به درد مشکل جستجو می خوره که تا حالا بهترین راهش دوبار ذخیره کردن (با اعراب و بی اعراب) بوده. اما مشکل اصلی سر نمایش و Highlight کردنه.

niloufar
سه شنبه 26 دی 1385, 12:44 عصر
به اون موضوع دقت نکرده بودم. اما فکر می کنم Full text indexing در SQL Server بتونه کمکت کنه. در موردش تحقیق کن . معمولا این سرویس که اشاره کردم هم خانواده ی کلمات رو هم پیدا می کنه. شاید در مورد اعراب هم جواب داد.

ممنون، تا حالا که به هر جا زدم، انواع هم خانواده ها را دارند جز Ignore کردن اعراب.



راستی در مورد ستاره های سبز و آبی هم یه پیشنهادی دارم:
جساراتا البته : یکی دو تا از پست های بیهودمون رو حذف کنیم. :چشمک:

خوب اینم یه راهه! اما:
1- اینقدر من قوی صحبت میکنم که پست بیهوده برا ما بی معنیه :-) => کلی تحویل گرفتما!!
2- حالا به یکی دو تا پست پاک کردن هم، با یکی دو تا پست بعدی به همین روز می افتم
3- حالا اگه همش پاک کنیم، کی ما هم مثل شما طلایی-قرمز بشیم؟!! :-)
4- ممنون



اما دوستان اگه بازم راحی به نظرشون رسید، ممنون میشم.

Ner'zhul Arthas
سه شنبه 26 دی 1385, 14:53 عصر
سلام
1- آخه چه طور ممکنه اعراب ها رو جدا نگه داشت و بعدا دقیق سر جاشون چسبوند، با توجه به اینکه حروف لزوما همشون اعراب ندارند و یادداشت آدرس ها هم علاوه بر احتمال بالای باگ، سرعت رو هم در برگرداندن پایین میاره.
2- خودمون جستجو را حرف به حرف انجام بدیم هم که علاوه بر اینکه حتما غیر بهینه و لذا با سرعت پایینتر خواهد بود، دردی از مشکل اخیر دوا نمیکنه و به درد مشکل جستجو می خوره که تا حالا بهترین راهش دوبار ذخیره کردن (با اعراب و بی اعراب) بوده. اما مشکل اصلی سر نمایش و Highlight کردنه.

1.وقتی حروف غیر اعراب رو به اسپیس تبدیل کنید مشک حل میشه نیاز به آدرس نویسی و غیره هم نداره.
و میتونید تو این روش هر کاری میخواید با اعراب بکنید.
سرعتش هم خیلی فرق نمیکنه.

2. نه تنها غیر بهینه نیست خیلی هم قوی تره.
در مورد سرعتش هم تو وی بی 6 کل قرآن رو در حد اکثر 6 ثانیه میگشته که با دات نت خیلی هم سریعتره.
حالا چه برنامه ای هست که دارید مینویسید؟
یعنی حروفش بیشتر از قرآنه؟
تعداد حروف قرانی که من استفاده میکنم با اعراب حدود 700000 حرفه.

niloufar
دوشنبه 30 بهمن 1385, 12:59 عصر
1.وقتی حروف غیر اعراب رو به اسپیس تبدیل کنید مشک حل میشه نیاز به آدرس نویسی و غیره هم نداره.
و میتونید تو این روش هر کاری میخواید با اعراب بکنید.
سرعتش هم خیلی فرق نمیکنه.

2. نه تنها غیر بهینه نیست خیلی هم قوی تره.
در مورد سرعتش هم تو وی بی 6 کل قرآن رو در حد اکثر 6 ثانیه میگشته که با دات نت خیلی هم سریعتره.
حالا چه برنامه ای هست که دارید مینویسید؟
یعنی حروفش بیشتر از قرآنه؟
تعداد حروف قرانی که من استفاده میکنم با اعراب حدود 700000 حرفه.
سلام
1- ممنون
2- ببخشید خیلی وقت بود این جاها نبودم که جواب بدم.
3- من هنوز نمی فهمم منظور شما از ذخیره جداگانه اعراب (حتی با روش اسپیس گذاری که گفتید) چیه و به چه درد مشکل من می خوره. مثلا:
فرض کنید من در این متن "السَّلامُ عَلَیکَ یا أبا عبدالله" می خوام جستجو کنم در مورد "علیک یا ابا"
خوب، من میام متن جستجو را در فیلد بدون اعراب میگردم و این رکورد را پیدا میکنم. حال میخوام "عَلَیکَ یا أبا" را highlight کنم در حالی که متن کاربر "علیک یا ابا" بود. چه جوری بیام در فیلد با اعراب ("السَّلامُ عَلَیکَ یا أبا عبدالله") متن بی اعراب را جستجو و پیدا کنم تا آن را HighLight کنم؟

Ner'zhul Arthas
سه شنبه 01 اسفند 1385, 01:07 صبح
اگر متن با اعراب همش در حال نمایش دادنه نمیشه از این روش استفاده کرد.
و فایدش هم نسبت به بقیه روش ها اینکه که اگر طرف یکی از اعراب رو مشخص کرد بقیه ی اعراب ها رو میشه ندیده گرفت.

بهتره از همون روش آخری استفاده کنید. هم خفن تره هم لذت بخش تره نوشتنش.

در ضمن جست و جو در متنی که در متغیری در رم باشه خیلی سریع تره تا این که روی هارد باشه یا تو تکست باکس یا ریچ تکست باکس یا ... .

niloufar
چهارشنبه 02 اسفند 1385, 13:59 عصر
سلام
1- بازم ممنون
2- ببینید من می خوام یه چیزی تو مایه های اونی که تو پست قبل مثال زدم رو انجام بدم، شما از هر روشی که فکر میکنید بشه تو یه متن کلمات اعراب دار را از متن جستجوی بی اعراب پیدا کرد، تا همشونو بتونم highlight کنم برام توضیح بدید. ممنون
3- اون قرآن که گفتید، آیا همه متن قرآن رو دارید، می تونم ازتون بخوام بهم بدید جهت استفاده شخصی؟

Ner'zhul Arthas
چهارشنبه 02 اسفند 1385, 16:16 عصر
سلام
1- بازم ممنون
2- ببینید من می خوام یه چیزی تو مایه های اونی که تو پست قبل مثال زدم رو انجام بدم، شما از هر روشی که فکر میکنید بشه تو یه متن کلمات اعراب دار را از متن جستجوی بی اعراب پیدا کرد، تا همشونو بتونم highlight کنم برام توضیح بدید. ممنون
3- اون قرآن که گفتید، آیا همه متن قرآن رو دارید، می تونم ازتون بخوام بهم بدید جهت استفاده شخصی؟

بهترین روشی که میشناسم اینه که کاراکتر به کاراکتر بگرده.

اون برنامه ی قرآن رو هم یه تغییراتی توش میدم میذارم برای همه که دانلود کنن.
هر وقت گذاشتم خبرتون میکنم.

niloufar
سه شنبه 08 اسفند 1385, 15:53 عصر
اون برنامه ی قرآن رو هم یه تغییراتی توش میدم میذارم برای همه که دانلود کنن.
هر وقت گذاشتم خبرتون میکنم.

سلام
یادتون نرفته؟!!

Ner'zhul Arthas
سه شنبه 08 اسفند 1385, 19:02 عصر
نه دارم به دات نت تبدیلش میکنم که زیاد نمونده تا تموم شه.

حامد مصافی
چهارشنبه 09 اسفند 1385, 17:40 عصر
یه سورس ساده نوشتم!
یه نگاهی بهش بندازید

http://blackdal.persiangig.com/Sources/VB2005/SearchArabicText.rar

Ner'zhul Arthas
پنج شنبه 10 اسفند 1385, 21:22 عصر
حامد جان این برنامه که نوشتید وقتی در "...انا..." ، "اا" رو بگردیم "انا" رو میاره.

حامد مصافی
پنج شنبه 10 اسفند 1385, 22:49 عصر
سلام
من که روی این کامپیوتر VS.NET ندارم تست کنم.
اما من این برنامه رو مجدداً نوشتم و آپلود کردم (دیروز) و قسمت های تشخیص اعراب رو هم بهش اضافه کردم
می تونید از همون لینک بالایی دانلود کنید
گمان کنم درست کار کنه (اگر هم نکنه بفرمایید تا تصحیح کنم)

niloufar
شنبه 12 اسفند 1385, 16:16 عصر
سلام
آقای مصافی!
1- واقعا ممنون
2- اگه متن جستجو خودش اعراب داشته باشه، نمیاره که خوب معلومه چرا. من اومدم یه تابع مثل تابع IsTextSame شما اینطوری نوشتم:


Private Function DelDiacratics(ByVal sArabic As String) As String
Dim tmpSimple As String = sArabic

tmpSimple = tmpSimple.Replace("ً", "") 'تنوین نصب
tmpSimple = tmpSimple.Replace("ٌ", "") 'تنوین رفع
tmpSimple = tmpSimple.Replace("ٍ", "") 'تنوین جر
tmpSimple = tmpSimple.Replace("َ", "") 'فتحه
tmpSimple = tmpSimple.Replace("ُ", "") 'ضمه
tmpSimple = tmpSimple.Replace("ِ", "") 'کسره
tmpSimple = tmpSimple.Replace("ّ", "") 'تشدید

Return tmpSimple
End Function


و تابع SearchText شما را هم اینطوری عوض کردم:


Public Function SearchText(ByVal SearchTerm As String) As Boolean
Dim RegexSearchTerm As String = CreateRegxForSearch(DelDiacratics(SearchTerm))

res = Regex.Match(_Text, RegexSearchTerm)

If res.Success AndAlso IsTextSame(res.Value.Trim, DelDiacratics(SearchTerm)) Then
_Index = res.Index
_Lenght = res.Length

Return True
Else
Return False
End If
End Function



در اینصورت برای مثل "اهدِنا" درست شد ولی چرا برای مثل "اَلحَمدُلِله " جواب نمیده؟

niloufar
شنبه 12 اسفند 1385, 16:20 عصر
3- اصلا دلیل استفاده از


AndAlso IsTextSame(res.Value.Trim, SearchTerm)

چیه؟!! مگه برخی وقتها چیز الکی پیدا میکنه؟!

4- Patternهای RegExp رو کجا دقیق توضیح داده؟! آیا این ".?" همیشه برای Diacratics است؟
5- بازم ممنون

حامد مصافی
شنبه 12 اسفند 1385, 21:45 عصر
سلام نیلوفر خانم
1- خواهش می کنم
2- همونطری که قبلاً عرض کردم این فقط یک کد سریع التولید نمونه بود, انشاالله کاملترش می کنم
برای کلمات فاصله دار جواب نمیده (این مشکل رو رفع کردم و بعد از رفع مشکل اول کد رو مجدداً آپلود می کنم)
3- اگر بین هر دو حرف متن مورد جستجو چیزی وجود داشته باش (حتی غیر از اعراب) بازم در نتیجه جستجو نشون میده
4- نمی دونم کجا توضیح داده! سعی می کنم در آینده نزدیک در وبلاگم بنویسم. البته در
وبلاگ دوست عزیزم امیر خان تقدسی می تونید ابزار جالبی در این رابطه پیدا کنید
http://palizeblog.blogsky.com/

5- بازم خواهش می کنم, سورس بعدی رو امشب یا فردا آپلود می کنم

حامد مصافی
شنبه 12 اسفند 1385, 23:28 عصر
سلام
نیلوفر خانم@ :
در روش شما:
در هنگام جستجوی کلمه "مَن" کلمه "مِن" هم در لیست نتایج قرار می گیرد!

الان که دارم روی برنامه کار می کنم جستجو روی کلمه ای مانند "اَلحَمدُلِله " هم به خوبی کار می کنه


Pattern های RegExp رو کجا دقیق توضیح داده؟! آیا این ".?" همیشه برای Diacratics است؟

در پست پیش یادم رفت بگم. نقطه برای کاراکترهای غیر فاصله ای به کار میره (به همین خاطر تابع IsTextSame رو نوشتم) و علامت سوال مشخص کننده اینه که صفر با یک مورد می تونند در این موقعیت قرار بگیرند.


همچنان می تونید از لینک قبلی سورس رو دانلود کنید
http://blackdal.persiangig.com/Sources/VB2005/SearchArabicText.rar

niloufar
یک شنبه 13 اسفند 1385, 16:03 عصر
سلام

1- در مورد دوتا اعرابی ها چی؟ (مثلا تشدید و فتحه باهم)
2- برای کوئری هم میشه از این روش استفاده کرد (بجای دوفیلد فرض کردن که ما در پیش از این ها گفتیم)؟ سرعت پایین نمیاد؟

حامد مصافی
یک شنبه 13 اسفند 1385, 19:04 عصر
سلام
1- این مورد باید مرتفع بشه (در نسخه ای که آپلود کردم این امکان نیست)

2 - مسلماً سرعت پایین میاد
اما در مورد ثبت جداگانه...
اگر قراره تا متن بدون اعراب رو ذخیره کنید یعنی اینکه دارید عملاً اعراب رو کنار می ذارید (مسئله "مَن" و مِن")
در مورد مشکل محل اعراب (که در پست های پیشین بهش اشاره فرمودید) می خواین چی کار کنین؟

نمی دونستم برای جستجو در پایگاه داده این کد رو می خواین, در هر صورت برای پایگاه داده باید از یک روش دیگه استفاده کرد.
کد اون رو هم به زودی آپلود می کنم

Ner'zhul Arthas
دوشنبه 14 اسفند 1385, 19:22 عصر
قرآن رو آپلود کردم:
http://www.barnamenevis.org/forum/showthread.php?p=315320#post315320

اگر میخواید از روش جست و جوش استفاده کنید یه تغییراتی باید توش بدید.

حامد مصافی
سه شنبه 15 اسفند 1385, 10:39 صبح
سلام دوست عزیز
از بابت سورستون ممنون
ولی در مورد جستجو در صورتی که کلمه مورد جستجو هم دارای اعراب باشه کار نمی کنه.
در ضمن نیلوفر خانم من سورسم رو آپدیت کردم (همون لینک قبلی)

niloufar
سه شنبه 15 اسفند 1385, 15:07 عصر
آقای منافی
این پست واسه دیروز بود (قبل از آپلود جدید شما) که پست نشده بود ولی چون saveش رو داشتم و مطالب خوبی هم داشت گفتم دوباره بذارم:

سلام
1- در واقع اطلاعات که مثل همیشه در بانک هستند. لذا همونطور که در پست های اولیه هم اشاره شده، دو مرحله لازم است. یکی استخراج (و کوئری) از بانک (یعنی چه رکوردهایی متن مورد جستجو را در فلان فیلد خاص دارند) و سپس نمایش HighLight شده اونها.
2- اون بحث ذخیره متن بدون اعراب دقیقا مشکل "مَن" و "مِن" رو داره و ضمنا به درد مرحله دوم هم نمیخوره که در پست های پیش هم بهش اشاره شد.
3- سورس کد شما (البته پس از اینکه زحمت حل مشکلاتش رو کشیدید، اگه حمل بر پر توقعی نشه) مرحله دوم را کاملا حل میکنه، لذا اگر راهی هم (غیر از تکرار با فیلد بدون اعراب) به نظرتون میرسه (که البته در سرعت هم تاثیر زیادی نذاره) ممنون میشم.
4- در مورد سورس فعلی هم چیزهایی که به ذهنم میرسه (اگه زحمتتون نمیشه) یکی همون بحث دواعرابی ها است و دیگری بحث کاراکترهای جایگزین فارسی (به عنوان مثال اگر در متن "ألحمد" یا "إهدنا" بود و کاربر "الحمد" یا "اهدنا" رو سرچ کرد، باید جواب بگیره. یا مثلا اگر به جای "کتابی" "کتابی" را زد یا بجای "ایاک" زد "ایاک" باز هم باید نتیجه بگیره و نمایش داده بشه.)
5- ممنون

niloufar
سه شنبه 15 اسفند 1385, 15:23 عصر
اما امروز

6- از بابت تغییراتی که در جهت استفاده از DB دادید ممنون اما:
7- هنوز مشکل دواعرابی که باقیه
8- بد نیست یه سری دیگه از اعراب ها رو هم به لست اعراب هاتون اضافه کنید مثل سکون یا الف مقصوره و ...
9- اون بحث کاراکتر های جایگزین فارسی که در شماره 4 به آن اشاره شد هم مهم هستند
10- در مورد اینجور جستجو در DB که شما استفاده کردید، فکر نمیکنید در داده های زیاد، خیلی سرعت را پایین بیاورد؟
11- راستی در این خط


tmpDatatable.Rows.Add(i, _Datatable.Rows(i).Item("sArabic"))

از i+1 به جای i استفاده کنید.
11- سوالی که از قبل در مورد DataSet تو ذهنم بود (که ربطی هم به بحث این تاپیک نداره و فقط چون تو سورس شما هم دیدم هست دوباره یادم افتاد) اینه که Auto Increment در DataSet و بانک به هم وصل نیستند. به عنوان مثال اگر شما در سورس خودتون بیایید و در لبه دوم، چند بار روی AddNew بایید و بروید بیرون و دوباره بیایید، هر بار یکی به Id اضافه میشود. حال پس از اینکه چند بار الکی Id را بالا بردید (بدون افزودن رکورد)، یک رکورد واقعی اضافه کنید و آن را ذخیره کنید. Id مثلا از 8 رفته به 20 اما اگر بدون خروج به لبه سوم بروید و همین رکورد آخر که اضافه کردید را جستجو کنید، Id برابر 9 است. به عبارت دیگه Id در DataSet نگاه نمی کنه به Id در بانک. بدتر از این وقتی است که در بانک آخرین Id شما مثلا 15 باشه ولی پس از آن در بانک چند Id اضافه و پاک شده باشد. در اینصورت شما در DataSet که میخواید یه چیز اضافه کنید به شما میگه Id اش 16 است ولی وقتی در بانک ذخیره میشه با Id مثلا 20 ذخیره میشه. راهی براش سراغ دارید یا تو یه تاپیک جدا مطرحش کنم؟

Ner'zhul Arthas
سه شنبه 15 اسفند 1385, 17:45 عصر
سلام دوست عزیز
از بابت سورستون ممنون
ولی در مورد جستجو در صورتی که کلمه مورد جستجو هم دارای اعراب باشه کار نمی کنه.
در ضمن نیلوفر خانم من سورسم رو آپدیت کردم (همون لینک قبلی)

شما چی رو جست و جو کردید که کار نمیکنه؟

niloufar
سه شنبه 15 اسفند 1385, 20:04 عصر
سلام
ظاهرا من هم تست کردم، متون اعراب دار را هم جستجو میکرد.

حامد مصافی
سه شنبه 15 اسفند 1385, 22:32 عصر
سلام
من الرَّحِیمِ و السَّماءُ و چند کلمه دیگه رو که از خود متن کپی کرده بودم رو جستجو کردم.
اما نتیجه ای در بر نداشت. البته در مورد برنامهش ما بهتره تو همون تاپیک صحبت کنیم.

@خانم نیلوفر :
اقای منافی کیه؟ بنده مصافی هستم سرکار خانم!

1- نحوه Hilight شدن که در برگه اول برنامه استفاده شده. ضمناً در این آپدیت محل و طول عبارت یافت شده رو هم اضافه کردم.
2- دقیقاً
3-
4- بحث دو اعرابی که حل شده (نمی دونم شما آخرین نسخه رو دانلود کردید یا نه) در مورد کاراکترهای جایگزین هم در برنامه گنجانده خواهد شد.
5- خواهش می کنم
6- خواهش مجدد
7- نسخه آتی انشاالله
8- این کاراکتر ها رو من روی کیبورد پیدا نکردم در Charachter Map هم جیزی پیدا نکردم. نمی دونم از کجا باید کپی کنم.
9- حتماً
10- چرا، این دقیقاً فکریه که می کنم. اما فعلاً راه دیگه ای به ذهنم نمی رسه. نمیشه این تابع رو به زبانی که برای DBMS قابل فهم باشه ترجمه کرد.
11- حق با شماست
12- طبق فرمولی که فرمودید تست کردم و مشکلی ندیدم. یا من اشتباه تست کردم یا شما به ظور کامل توضیح ندادید

Ner'zhul Arthas
سه شنبه 15 اسفند 1385, 22:42 عصر
منظورم متون دارای دو اعراب بود.

بازم نفهمیدم یعنی چی.

میشه یه کپی از چیزی که میگید بذارید اینجا.

niloufar
چهارشنبه 15 فروردین 1386, 14:11 عصر
سلام
1- بعد از یک ماه گفتم دوباره بیام سراغ این تاپیک
2- آقای مصافی (البته که منافی، نه!! اشتباه لپی بود، منافی نام فامیل یکی از همدانشگاهی هایم بود)، هَفَشتا کاری که فرموده بودید، انجام شد؟
3- بازم آقای مصافی، در مورد اون 12 ایه، ظاهرا اشتباه تست کردید، چون از وجود این مشکل مطمئنم (چون اصلا مشکل قدیمی درون افکارم بودندی). اصل مشکل اینه که اگه تو بانک ماکزیمم Id موجود از Idای که الان قراره اختصاص داده بشه، چند تا کوچکتر باشه (یعنی چند تا رکورد بعد از آخرین رکورد فعلی حذف شده باشه) در اینصورت، مشکل ذکر شده ایجاد خواهد شد. مورد دیگر مشکل هم همونجا گفته ام.

niloufar
سه شنبه 18 اردیبهشت 1386, 16:11 عصر
سلام
آقای مصافی! چی شد؟

حامد مصافی
سه شنبه 18 اردیبهشت 1386, 17:20 عصر
سلام
1- بعد از یک ماه گفتم دوباره بیام سراغ این تاپیک
2- آقای مصافی (البته که منافی، نه!! اشتباه لپی بود، منافی نام فامیل یکی از همدانشگاهی هایم بود)، هَفَشتا کاری که فرموده بودید، انجام شد؟
3- بازم آقای مصافی، در مورد اون 12 ایه، ظاهرا اشتباه تست کردید، چون از وجود این مشکل مطمئنم (چون اصلا مشکل قدیمی درون افکارم بودندی). اصل مشکل اینه که اگه تو بانک ماکزیمم Id موجود از Idای که الان قراره اختصاص داده بشه، چند تا کوچکتر باشه (یعنی چند تا رکورد بعد از آخرین رکورد فعلی حذف شده باشه) در اینصورت، مشکل ذکر شده ایجاد خواهد شد. مورد دیگر مشکل هم همونجا گفته ام.


لطفاً کاراکترهای ویژه مورد نظرتونو بنویسید.
من در اسرع وقت بقیه موارد رو بررسی می کنم

niloufar
یک شنبه 06 خرداد 1386, 17:04 عصر
لطفاً کاراکترهای ویژه مورد نظرتونو بنویسید.
من در اسرع وقت بقیه موارد رو بررسی می کنم
سلام
اولا از اینکه قراره زحمتشو بکشید ممنون.
ثانیا من یه بار دقیق میگم چی مراده:

1- مشکل دو اعرابی ها هنوز باقیه (من "الرب العالمین" را تست کردم نیاورد)
2- بد نیست یه سری دیگه از اعراب ها رو هم به لست اعراب هاتون اضافه کنید مثل سکون (" ْ ") یا الف مقصوره و ...
3- برخی کاراکترهای جایگزین فارسی هم که گفتم و الان به ذهنم میرسه اینهاست:
- متن "ألحمد" یا "إهدنا" یا "مسؤول" یا مثل اینها (بازی همزه روی حروف) باشد و کاربر "الحمد" یا "اهدنا" یا "مسوول" رو سرچ کند
- متن "کتابی" باشد و کاربر "کتابی"را سرچ کند
- متن "ایاک" باشد و کاربر "ایاک" را سرچ کند
- متن "قرآن" یا "آمین" باشه و کاربر "قران" یا "امین" رو سرچ کنه
- متن "قائم" باشد و کاربر "قایم" رو سرچ کنه
- متن "صلوة" باشه ون کاربر "صلوه" (یعنی بدون دو نقطه ة) رو سرچ کنه
- متن "صلوة" باشه (یا با الف مقصوره آن) و کاربر "صلاة" رو سرچ کنه
- یا برعکس اینها شاید...
- و چیزایی تو این قبیل
4- اون i+1 رو به جای i در سورس خودتون هم تغییر بدید لطفاً


بازم ممنون.
راستی Update بعدی رو اگه خواستید در پست های اول هم آپدیت کنید، اما حتما یه لینک درست هم در آخرین پست بذارید. بازم ممنون.

niloufar
یک شنبه 06 خرداد 1386, 17:18 عصر
راستی الان تست کردم دیدم اصلا "ایاک" را (با اینکه تو متن است نمیاره). چرا؟؟

niloufar
یک شنبه 13 خرداد 1386, 18:07 عصر
سلام
آقای مصافی، پست های من رو دیدید یا نه؟؟

حامد مصافی
یک شنبه 13 خرداد 1386, 18:38 عصر
سلام؛
بله دیدم
یک نکته جالب، در ابتدای متن عربی تایپ کنید "ایاک" سپس ان رو جستجو کنید. میبینید که نتیجه ظاهر میشه و با گزینه جستجوی بعدی کلمه ایاک موجود در سوره هم علامتگذاری میشه

دارم روی این کلاس کار می کنم.

niloufar
یک شنبه 13 خرداد 1386, 19:47 عصر
سلام
ممنون، منتظرم.