Как търсачката “вижда” уеб страниците
Търсачките на практика “виждат” страниците в Интернет подобно на хората, разбира се, когато умишлено не е представено друго и/или скрито съдържание на търсачката. Има обаче няколко различия относно това как хората и търсачките отсяват ценната информация от страницата. Ще се опитам да представя процеса структуриран във времето.
1. Търсачката сваля файла на страница.
Това най-често е файл с HTML структура, но може и да е използван друг език за форматиране, като XML, примерно. Възможно е търсачката да индексира и други видове файлове (документи), но в тази статия ще говоря за страници, форматирани с markup езици.
2. Извличане на съдържанието от страницата.
Общо взето всички markup езици са създадени с цел съдържанието от тях лесно да бъде извлечено. В общия случай това е текстът между символите “>” и “<”. Всичко останало се смята за код или “meta” данни. В зависимост от търсачката може да се извличат и данни от “meta” данните.
3. Премахване на специалните символи от съдържанието.
До тук от страницата е останал само текстът и то форматиран на един ред. Следващата стъпка е търсачката да се отърве от всички специални символи, които не носят никаква полезна информация. Такива са, примерно: точки, тирета, удивителни, въпросителни, знак за процент и т.н. Специалните символи се заместват с интервали при някои търсачки.
4. Премахване на “Stop Words”.
До тук имаме съдържание на един ред, което представлява само думи, разделени с интервали. Време е да се отървем от думите, които не носят никаква информация. Такива са, примерно, английските: and, or, if, about и т.н. В зависимост от търсачката могат да се премахват и “Stop Words” на кирилица.
5. Определяна на ключовите думи от текста.
До тук имаме само подбрани думи, разделени с интервали. Време е да се определи кои от тях са ценни и кои по-малко. За целта се сравняват думите всяка със всяка и се създава списък на повтарящите се думи, като тези, които се срещат най-често, са в началото на списъка.
В зависимост от търсачката, може да се изследват думите за положение, гъстота, подчертаване и т.н. Също така при сайтове с много страници, се отделя уникалната за всяка страница информация от тази, която се повтаря. Същото се прави и с изходящите връзки от страницата.
Оттук нататък всяка търсачка подхожда индивидуално с информацията, с която разполага. Един ефикасен метод е всички думи да се сортират в списък спрямо повторенията им. Така съдържанието на всяка страница ще е един вертикален списък с думи, всяка с индекс на повторенията й в текста.
Подобна структура е много лесно да бъде представена в релационна база данни. Оттам релационния модел подпомага бързото и лесно структуриране на информацията. Процеси, като търсене и сортиране при подобен списък в релационна база данни, са максимално бързи.
Някъде между всички тези точки се анализират изходящите връзки на страницата, за да може роботът да стигне и до други страница от конкретния или друг сайт. Този процес е по-сложен от процесът на “Data Mining” (отсяване на ценното в съдържането) и ще бъде предмет на друга статия.
Интересна и полезна статия, поне ако искаш да разбереш нещата “отвътре”. :))
Мерси!
Изключително полезна статия. Едно голямо благодаря, въпреки че знаех всичко с изключение на точка 3 и 4.
Поздрави и молба за още подобни
Радвам се, че ви е харесало, момчета. Ако ми дойде музата, ще напиша и нещо за това как търсачките и в частност Google третират изходящите връзки.
“Подобна структура е много лесно да бъде представена в релационна база данни.”
Лесно може да бъде представен, но се съмнявам, че search engine-ите използват класическа релационна база данни.
Преди година си бях направил малък и глупавичък spider, който да индексира съдържанието на сайтове свързани с PHP. Тестовете минаха успешно, но когато го отвързах да “опасе” предефиниран списък от сайтове, базата данни (MySQL) за няколко часа се напълни с 300MB. Въпреки наличието на индекси опитите дори за елементарни SELECT отнемаха 10-20 секунди. По-сложните търсия въобще не минаваха, заради time_limit-а на PHP.
Много ми е интересно как Google са си организирали тяхната разпределена DB и как въобще успяват да връщат резултати за част от секундата.
Това разбира се е тайна, но има няколко концепции, които при всяко положение спазват.
Базата данни може да бъде релационна, обектно-ориентирана или хибридна. От тези три типа единствено релационния модел поддържа висока скорост на заявките, така че не смятам че е друг.
Тайната е в алгоритъма на търсене. Според мен се базира на някакви предварителни сортировки, като после чрез двоично търсене се намира желания елемент за много кратко време.
Нещо просто стои в основата, но въпросът е да знаем какво е.