Skip to content
This repository has been archived by the owner on Jul 13, 2024. It is now read-only.

Latest commit

 

History

History
48 lines (32 loc) · 5.18 KB

Phase01-Search.md

File metadata and controls

48 lines (32 loc) · 5.18 KB

پروژه یک: آشنایی با full-text search

به پروژه اول کارآموزی تابستان کداستار خوش آمدید!

در این پروژه نرم افزاری می‌نویسیم که حجم قابل توجهی متن را به عنوان ورودی بگیرد، پردازش‌های لازم را روی آن انجام دهد و در نهایت کاربر بتواند با وارد کردن رشته‌های مختلف روی متن‌هایی که قبلا وارد شده بود جستجو کند (چیزی شبیه به یک موتور جستجوی ساده)

لیست تسک‌های مرتبط با این فاز به صورت issue template

فاز یک: آشنایی با مفاهیم اولیه جستجوی متنی

  1. قبل از شروع مطالعه حدود ۱۵ دقیقه تا نیم ساعت روی دو سوال زیر فکر کنید تا ذهن شما آماده شود:

    1. به روز‌های اول تشکیل شرکت گوگل فکر کنید، فرض کنید متن‌های چند صد هزار صفحه‌ی وب را جمع آوری کرده‌اید و میخواهید بین آن صفحات جستجو کنید، چه راه حلی برای اجرای کوئری چند کلمه‌ای کاربران بین هزاران صفحه متن که از قبل آماده شده است به ذهنتان میرسد؟

    2. چطور می‌شود این جستجو را از مرتبه‌ی یک یا همان (O(1 یک انجام داد؟

  2. در مورد Inverted Index جستجو و مطالعه کنید. مطالعه‌ی Inverted Index - GeeksforGeeks و دیدن این ویدئو را پیشنهاد می‌کنیم.

  3. در ابتدا می‌خواهیم برنامه‌ای ساده تحت کنسول و با زبان جاوا بنویسیم که تعدادی داکیومنت نمونه را بخواند و از روی آن‌ها یک Inverted-Index بسازد و بعد از آن از کاربر یک کلمه ورودی بگیرد و آی دی تمام داکیومنت‌هایی را که شامل آن کلمه هستند چاپ کند. این گام و تمام بخش های بعدی تا فاز نهم را با هم تیمی خود به صورت Pair Programming انجام دهید. مطالعه ی قسمت Remote Pairing از On Pair Programming - Martin Fowler را توصیه می کنیم. پیشنهاد می کنیم به مرور به ویرایشگر VS Code مهاجرت کنید و از امکان Live Share لذت ببرید.

  4. در این گام امکانات پیشرفته‌تری را برای کاربر فراهم کنیم به این صورت که کاربر محدود به کوئری‌های یک کلمه‌ای نباشد و بتواند چند کلمه را در رشته‌ی ورودی وارد کند و همه‌ی آن‌ها به صورت زیر جستجو شوند:

    • اگر قبل از شروع کلمه کاراکتر + وجود داشته باشد یعنی اگر در یک داکیومنت این کلمه وجود داشت، این داکیومنت حتما جزء نتایج باشد. (نتایج جستجوی این کلمه با سایر نتایج or می‌شود.)
    • اگر قبل از شروع کلمه کاراکتری وجود نداشته باشد یعنی نتایج جستجوی این کلمه با بقیه کلمات بدون علامت and شود.
    • اگر قبل از شروع کلمه کاراکتر - وجود داشته باشد یعنی داکیومنت‌های شامل این کلمه از نتایج حذف شوند. حذف این داکیومنت‌ها از نتایج در پایان پردازش بقیه کلمات کوئری وقتی همه نتایج دیگر محاسبه شده‌اند، اتفاق می‌افتد.

    مثال:

    get help +illness +disease -cough

    کوئری بالا به معنای داکیومنت‌هایی است که حتماً کلمه‌ی get و help هر دو را داشته باشند و حداقل یکی از کلمات illness یا disease را داشته باشند و همچنین کلمه‌ی cough را نداشته باشند.

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

نکات تکمیلی

  • بعد از تست‌های اولیه با چند داکیومنت محدود حجم دیتای خود را بیشتر کنید، پیشنهاد می‌کنیم از دیتاست The 20 Newsgroups data set استفاده کنید. (لینک دانلود)

  • همچنین فراموش نکنید تمام کاراکتر‌های ورودی را lowercase کنید.

  • برای آشنایی بیشتر با نحوه‌ی کار موتور‌های جست‌و‌جو دیدن این ویدئو توصیه می‌شود.