Якби я хотів створити пошукову систему, як би я почав? [зачинено]


9

Чи може хтось вказати мене в правильному напрямку? У мене дійсно немає досвіду написання коду, але я швидко навчаюся. Я не намагаюся сказати, що буде легко, але сподіваюся, що хтось може мені допомогти ...


6
Якщо у вас немає досвіду написання коду, як щодо того, як навчитися кодувати спочатку? Побудова пошукової системи є своєрідним надлишком для когось нового в програмуванні.
Теренс Понс

3
Як каже Теренс, це не щось для тих, хто починає програмувати. Будь-яка пошукова система, яка є якоюсь корисною, має тенденцію бути досить складною роботою, тому Google є настільки масовим, що вони роблять дуже важке завдання досить добре. Навіть досвідчені програмісти вважають за краще використовувати щось попередньо створене. Якщо ви дасте якесь уявлення про те, чого ви цього хочете, можливо, ми можемо вказати вам у правильному напрямку.
Орлінг

2
Почніть з меншого проекту. Побудова пошукової системи включає велику кількість коду. І як ви збираєте всі дані для своєї пошукової системи? Вам знадобиться набагато більше коду та масивна інфраструктура. Дійсно, будь ласка, починайте з менших проектів і працюйте, інакше ви просто засмутитеся.
Джеймс

1
Ця книга допомогла мені зрозуміти, що таке пошукові системи та як вони будуються: nlp.stanford.edu/IR-book
devnull

Відповіді:


16

Я написав це для блогу, у якого я мав зворотній шлях, коли .... його більше немає в Інтернеті, так ... ось воно! :

Як написати пошукову систему

Даррен Роуз на сайті probolgger.net проводить проект з написання групових записів на тему "Як це зробити". Це один з небагатьох блогів, які я читаю регулярно, тому я вважаю, чому б не написати щось, що варто прочитати для зміни, а не мій стандартний жорстокий рент, де я нарешті погрожую вдарити Уго Чавеса в горло.

Я вирішив написати «Як написати пошукову систему». Я вибрав цю тему з двох причин:

  1. Про це в Інтернеті не так багато.
  2. Я зараз пишу його для одного з моїх клієнтів.

Мій клієнт - інтернет-роздрібний торговець значних розмірів, тому я не шукаю всю мережу лише на їхньому веб-сайті, точніше лише на продукцію, що продається на їхньому сайті. Тим не менш, ті самі методи можуть бути використані для написання більш складних, які використовуються для пошуку в Інтернеті. Я знаю, що це не технологічний блог, тому я не буду надто заглиблюватися в технічні характеристики, а також не буду обговорювати технічні вимоги \ потреби в енергії для обробки або веб-сканування.

Я використовую досить просту техніку, у мене є таблиця (tblKeywords) з ​​трьома полями:

  1. Itemid (Якщо ви здійснюєте пошук в Інтернеті, це буде URL-адреса)
  2. KeyWord (індексоване ключове слово)
  3. Вага (це числове значення від 1-100, чим вище це число, тим більш значущим (вагою) є ключове слово) * PK = ItemID + KeyWord

Перше, що я роблю, - це збирати окремі слова з будь-якого місця, яке є релевантним. Для свого клієнта я витягну слова таблиці продуктів. Зокрема з полів Itemid, ItemName, ItemShortDescription, ItemLongDescription, виробник, виробникSKU, категорія1, категорія2, категорія3 тощо. Якщо ви індексуєте веб-сторінки, ви можете витягнути дані з тексту сторінки, назви сторінки, URL-адреси або посилань на інших сторінках, які посилаються на індексовану сторінку.

Значення ваги визначається тим, звідки походить ключове слово. Наприклад, у моєму випадку артикул артикулу виробника отримав би вагу 100, а слово з назви предмета може мати вагу 25. Слово з ItemLongDescription може отримати вагу 5. Якщо ви індексуєте веб-сторінки, слова з назви сторінки може набиратись вагу 75, а слово, виділене жирним шрифтом із тексту сторінки, може набирати вагу 10. Якщо слово повторюється більше одного разу або \ і в більш ніж одному місці, ви додаватимете вагу кожного разу це відбувається. Наприклад, якщо слово "Сорочка" походить з двох місць для ItemId = 12345, TheNameName (вага 25) і з’являється двічі в ItemLongDescription (Вага 5 x2 = 10), слово "сорочка" матиме загальну вагу 35 для ItemId = 12345.

Якщо хтось шукає "рожеву сорочку", я шукаю в таблиці всі екземпляри слів "Рожевий" або "Сорочка" та "Загальна вага". Показ предметів з найбільшою загальною вагою зверху.

SQL:

Select Itemid, sum(weight) as totWeight from tblKeywords
group by itemId having keyword in ('pink','shirt')

Тож ось у вас його є, основна (і швидка) пошукова система. Зрозуміло, що можна зробити ще, як-от викреслити пунктуацію, HTML-код та негідні ключові слова, такі як "і", "якщо", "чи". Це не стосується пошуку ключових фраз, але ви можете використовувати подібну систему для фраз, якщо зможете з’ясувати, де вони починаються та закінчуються.


дякую приємну відповідь. що б ви також запропонували для групування продуктів. я маю на увазі, що вам подобається 1 мільйон сканованих сторінок продуктів з різних веб-сайтів. ви хочете згрупувати
одні й ті

@Monster - Як щодо виробника товару \ SKU комбінації?
Морон

Ви також можете придбати (орендувати) ці дані у таких компаній, як Etilize
Morons

чи можете ви пояснити це трохи більше, тому що я цього не отримав. Дякую.
MonsterMMORPG

3
"Ок" практична відповідь. Однак це ігнорує всю сферу дослідження, яка називається "Пошук інформації". З точки зору "Вказівки в правильному напрямку" ІР було б краще, на мій погляд.
Темна ніч


3

Пошукові системи побудовані на веб-сканерах , вам доведеться розібратися, як створити один з цих присосок, перш ніж ви зможете розробити веб-сайт для відображення результатів (для цього знадобиться швидка, ефективна база даних).


3
Пошукова система може споживати вихід веб-сканера, але в іншому випадку вони мають дуже мало спільного між собою. Більше того, швидка, ефективна база даних різноманітності SQL навряд чи допоможе в цьому. Пошукові системи, як правило, будуються за допомогою інвертованих схем індексації файлів, які взагалі не відповідають формі SQL.
Марсело Кантос

@Marcelo Cantos: Перевернута індексація файлів звучить складно: -0 - Дякую за допомогу в уточненні моєї відповіді!
palbakulich

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.