دسته بندی ها
13:26 1400/02/13

جستجوی هوشمند و معنایی در SQL Server مثل سرچ گوگل

مشخصات سوال کننده :
کاربر : mojtabahakimian     امتیاز کاربر : 155     رتبه کاربر : 10
دسته بندی : WPF سی شارپ Entity Framework Sql Server

به این سوال امتیاز بدهید    2
تعداد بازدید این سوال : 4652
پاسخ دهنده : davud 00:51 1400/02/14

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

ولی اگه بخوایین خیلی ساده این کار رو انجام بدین میتونین خودتون این غلط های املائی رو پیش بینی کنین و در سیستم ذخیره کنین تا وقتی کاربری بخواد مکل رو سرچ بکنه عنوان ملک رو با مکل جایگزین بکنه و به کوئری ارسال بکنه.

به این پاسخ امتیاز بدهید    ‎−2
امتیاز: ‎−4 رتبه: 7089
1 نظر
mojtabahakimian : بله گوگل از هوش مصنویی استفاده میکنه و دیکشنری هم برای شناسائی درست کلمات داره ولی این کار رو ماهم میتونیم انجام بدیم فقط نمیدونم برای فارسی هم ساپورت میکنه یا نه یه چیزی پیدا کردم یک کتابخانه که دقیقا برای همین کار ساخته شده توی سی شارپ

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 01:20 1400/02/14
پاسخ دهنده : fateme 02:38 1400/02/14

ببینید برای انجام چنین کاری علاوه بر اینکه نیاز به هوش مصنوعی هست مطمئنا نیاز به یک دیتابیس از اطلاعات جستجو شده کاربران برای کلمات مشابه هم هست. به عنوان مثال همین لغتی که خودتون مثال زدید "مکل" هیچ ارتباطی از لحاظ معنایی با لغت "ملک" نداره ولی گوگل تشخیص داده که احتمالا شما "ملک" مد نظرتون بوده. در حالی که ممکنه "کلم" هم مد نظر باشه. بنابراین این گونه تحلیل ها رو ما نمیتونیم به این راحتی در جست و جو ها پیاده سازی کنیم.

جستجو در دیتابیس بر اساس لغت نه عبارت

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

var result = from a in _db.Customer.Where(q => arr.Any(term => q.CustomerName.ToLower().Contains(term.ToLower()))

دستور بالا توی انتیتی فریم ورک نوشته شده. شیوه کار اینجوری هست که اگر شما یک عبارت رو بهش بدید مثلا "سیاره زمین" تمامی حالات مثل "سیاره" و "زمین" و "سیاره زمین" و حتی "زمینی"، "سیاره ها" و ...  رو جستجو میکنه و در نتایج نمایش میده. اما نتایج معنایی رو نمیتونه بیاره.

به این پاسخ امتیاز بدهید    0
امتیاز: 1617 رتبه: 2
1 نظر
mojtabahakimian : کاملا درسته ولی باید بتونیم ماهم این کار رو انجام بدیم نمونه اون سایت : filimo.com که توی سرچ فیلم ها تقریبا مثل گوگله حتی انگلیسی تایپ کنید نتیجه فارسی نزدیک به اون رو نشون میده

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 03:27 1400/02/14
پاسخ دهنده : mojtabahakimian 03:25 1400/02/14

باتشکر از لطف مهندسان عزیز

ببینید کتابخانه Irony برای این کار هستش حالا نمیدونم فارسی رو هم ساپورت میکنه یا نه ؟! 

https://github.com/IronyProject/Irony

این لینک ها رو یه نگاهی بندازین :

Full-Text Search functions don't search like Google

https://www.codeproject.com/Articles/104299/Very-Powerful-Generic-Irony-Based-Database-Searche

به اصطلاح میگن sql server full text search fuzzy matching

 

به این پاسخ امتیاز بدهید    0
امتیاز: 155 رتبه: 10
پاسخ دهنده : olfat80r 21:51 1400/02/14

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

به این پاسخ امتیاز بدهید    0
امتیاز: 5 رتبه: 110
1 نظر
mojtabahakimian : سلام ممنونم ولی یکم بیشتر راهنمایی میکنید چون بحثش خیلی گستردس مثلا توی Mongo DB ?!

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 04:42 1400/02/15
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود