ورود

نسخه کامل مشاهده نسخه کامل : درخواست برنامه طراحی یک موتور جستجو با C#.Net



bahareh655
09-09-2008, 14:29
سلام به همه دوستان
من قراره یه پروژه به زبان C#.netبنویسم که موضوعش طراحی یک موتور جستجوست
اگه کسی می تونه کمکم کنه،یک دنیا ممنون:11:

_H2_
11-09-2008, 00:52
سلام
اگر منظورتان موتورهای جستجو وب است، اصولش ساده است و پیاده سازیش هم ساده است ولی حجم کد نویسی زیادی دارد.

اولین چیز نیاز به یک روبات اسکن کننده است.
شما باید صفحات اینترنت را به صورت متنی دانلود کنید (مثلاً با کلاسس System.Net.WebClient) و سپس:
1) این متن html را پردازش کنید و به طرز مناسبی که بعداً جستجوی سریعی داشته باشد، همراه با لینکش در دیتابیس ذخیره کنید
2) این متن html را پردازش کنید و هایپرلینک ها به صفحات دیگر را پیدا کنید، این هایپرلینک ها هدف بعدی جستجو هستند.
یعنی شما با رفتن به هر صفحه html آدرس چن و شاید چند ده صفحه دیگر را پیدا کنید.

باید مراقب باشید صفحه ای دوبار اسکن نشود و یک حلقه بینهایت در برنامه پیش آید،
باید به فکر آپدیت کردن اطلاعات صفحات هم باشید و طبق یک برنامه زمان بندی اطلاعات صفحات را مجدداً در دیتابیس تان refresh کنید

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

r.gh45
18-09-2008, 17:03
سلم می بخشید میشه یکمی بیشتر در مورد نحوه اسکن کردن صفحات توضیح بدید اگه میشه یک کد نمونه هم بزارین.
یک سوال دیگه آیا میشه یک برنامه توی وب نوشت که مثلا توی صفحات خاصی یک کاری بکنه . مثلا ارسال پیام.

_H2_
19-09-2008, 00:52
سلام
انجام این عمل بسیار حساس است و کد زیاد و دقیقی میخواهد که خیلی شبیه Parser های XML است ولی متاسفانه Html کمی بی قانون است و زیاد قوانین XML را رعایت نمیکند، مثلاً تگ <br> به جای </br> یا ساختار خیلی از صفحات وب مشکل دارد و شاید تگ td باز باشد که <td/> نداشته باشد و یا ....

در نتیجه باید یک کد دستی داشته باشیم که کاراکتر به کاراکتر html را بخواند و تفسیر کند و حتی الممکن تمام کار را در یک بار خواندن و مرور متن انجام دهد.

البته میتوان با کمی دردسر از هسته DOM مرورگر هایی مثل IE هم استفاده کرد ولی در دنیای واقعی و برای مصرف یک سایت جستجو فکر نکنم سرعت مناسبی داشته باشد و ساخت همان یک کد خوانده یک مروره خیلی بهتر است.

من فقط یک کد بسیار بسیار بسیار ساده و البته نه چندان صحیح برایتان نوشتم.
این کد فقط تگهای a را اسکن میکند و لینک تمام صفحاتدیگر را پیدا میکند.
این کد خلی مشکل دارد ولی در عوض ساده و کوتاه و قابل فهم است.
(مثلاً اگر در خصیصه href و قبل یا بعد از = یک یا چند فاصله باشد داشته باشد، کد به مشکل میخورد و ...)
باید توجه داشتکه از Scan محتویات غیر متنی zip و pdf و jpg و... و... و... در کدها جلوگیری کرد.

شما میتوانید به جای Urls.Add این مقادیر را به یک ListBox و یا با یک Enter به یک TextBox اضافه کنید. (در حالت واقعی این کار روی دیتابیس انجام میشود.)


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در آخر توجه داشته باشید که با احتصاب جلوگیری از مرور مجدد یک صفحه، میتوان متد Scan را برای صفحات جدید یافته شده نیز اجرا کرد.
این کار به صورت یک سرطان شاخه درختی رشد خواهد کرد و ظرف مدت کوتاهی به سایتهای دیگر و میلیون و میلون ها و میلیارد ها لینک خواهد رسید و تقریباً تمام شدنی برای من مفروض نیست. !!!


قسمت دوم سوالتان را اصلاً متوجه نشدم، مثلاً شما صفحه site.com/file.htm را پیدا کردید، خوب چه پیامی میخواهید بفرستید؟

r.gh45
21-09-2008, 09:31
سلام
منونم از اینکه جواب دادید.
برای قسمت دوم سوال منظورم اینکه مثلا ربات ما به صورت خدکار در یک سایت ثبت نام کنه (البنه میدونم این ربات باید خیلی هشمند باشه تا بتونه به تور مثال textbox مربوط به نامو پیدا کنه ولی برای شروع ما فرض می کنیم این فرم در تمام ثایت ها یکسان تعریف شده مثلا textbox1 مربوط به نام است.)
ممنون

_H2_
21-09-2008, 19:56
سلام

برای قسمت دوم سوال منظورم اینکه مثلا ربات ما به صورت خدکار در یک سایت ثبت نام کنه (البنه میدونم این ربات باید خیلی هشمند باشه تا بتونه به تور مثال textbox مربوط به نامو پیدا کنه ولی برای شروع ما فرض می کنیم این فرم در تمام ثایت ها یکسان تعریف شده مثلا textbox1 مربوط به نام است.)

در دید اول شاید ساده باشد ولی خیلی حالت خاص دارد و حتی در شرایط فیلدهای مساوی هم شاید مجبور شویم برای هر آدرسی کد را عوض کنیم، برای ثبت نام چندان کار امد نیست، مگر اینکه بخواهید یک برنامه مخرب اجرا کنید و تعداد کثیری را ثبت نام کند!!!!
یا اینکه برای صفحات دانلود برخی سایت، کاری کنید که زمان انتظار از بین برود و...
صفحه اگر کد js داشته باشد، باز کار سخت میشود، یعنی دکمه اصلی به جای submit یک کد js را اجرا کند، بعد باید بشنیم ببینیم کد js چه کار دارد میکند....
اگر page مورد نظر اعتبار سنجی تصویری داشته باشد (تصویر یک نوشته) دیگر کار غیر ممکن میکند، چون این نوشته های تصویر شده اغلب طوری هستند که بهترین OCR ها هم نمیتوانند از پس شان بر آیند...

در کل خیلی به محتویات صفحه وابسته است.

r.gh45
22-09-2008, 15:44
بازهم منونم آقای h2 . من قصد نوشتن کد مخرب ندارم این یک برنامست که به من سفارش دادن و بیشتر جنبه تبلیغاتی داره . فقط اگه شما لطف کنید و یک کد نمونه دیگه در این باره برای من بزارین ممنون میشم.

_H2_
23-09-2008, 23:00
سلام
اگر فرض کنیم یک فرم ساده با یک TextBox و Button به فرمت زیر داشته باشید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یا html زیر باشد، با هر زبان سمت سرور...

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

آنگاه برای پر کردن TextBox1 با مقدار Value1 و کلیک کردن Button1 و گرفتن html نتیجه، میتوان کد زیر را اجرا کرد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همانطور که گفتم اجرا شدن صحیح دستورات بسیار بسیار به صفحه حساس است.
مثلاً در صفحات aspx
- برای اتفاق افتادن رویدا کلیک معمولاً باید EVENTTARGET__ را هم اضافه کرد تا سوییچر داخلی فعال شود.
- شاید نیاز باشد گزینه EnableEventValidation برای page مربوطه False شود، چون asp.net مثل بقیه زبانهای سمت سرور چندان بی در و پیکر نیست و مدیریت شدیدی روی درخواستها دارد، معمولاً به صورت داخلی رویدادها را اعتبار سنجی میکند.

ولی در مورد صفحات دیگر زبانهای سروری این دو نکته وجود ندارد.

در کل اگر میخواهید، میتوانید کد فوق را به عنوان یک یادگیری و سرنخ در نظر بگیرید و سپس و بیشک باید آنرا بسیار توسعه بدهید.

r.gh45
25-09-2008, 10:35
سلام خیلی لطف کردین جناب h2 از اینکه وقت گزاشتین ممنون.اومید وارم با امامتون حضرت علی محشور بشید

_H2_
25-09-2008, 21:14
سلام

...اومید وارم با امامتون حضرت علی محشور بشید
یک چیزی میگفتید که حداقل یک تلیارد ام احتمال داشته باشه .... !

r.gh45
26-09-2008, 11:12
ما در این دنیا با هر کسی دوستی کنیم اون دنیا هم حتما با همان شخص دوستی می کنیم اگه با شیطان دوست باشیم اون دنیاهم میریم پیش اون و اگه مثل شما عشق ودوستی مولا علی تو قلبمون با شه حتما در کنار و جوار اون بزرگوار قرار می گیریم به اومید خدا

wickietetsu
09-12-2008, 06:49
ممنون از آقای h2
من یه پی ام واستون گذاشتم.لطفا چک کنید

barbababak
03-10-2010, 14:40
با فرض این که لینک برگه های سایت های مختلف پیدا شدند و تعداد زیادی از اونها داونلود شدند، قدم بعدی چیه؟

این که تمام متن اون صفحه ها رو پس از کنار گذاشتن تگ های اچ تی ام الشون در رکوردهای پایگاه داده ذخیره کرد و با استفاده از دستور LIKE و % در اونها جستجو انجام داد؟

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

_H2_
04-10-2010, 18:15
سلام


این که تمام متن اون صفحه ها رو پس از کنار گذاشتن تگ های اچ تی ام الشون در رکوردهای پایگاه داده ذخیره کرد و با استفاده از دستور LIKE و % در اونها جستجو انجام داد؟
آیا این راه کند نیست؟ چه روشهای بهتری وجود دارند؟

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

باید یکم بیشتر روی امکانات متعدد SQLServer تمرکز کنید.
SQLServer سرویس به نام Full Text Search دارد که با ساختاری به نام Catalog در ارتباط است.

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

باید Catalog ای برای ستون جدول مورد نظر بسازید و با سینتکس خاص این سرویس در Catalog تشکیل شده جستجو کنید.
برای اطلاعات بیشتر به مدخل زیر مراجعه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]