Какво е обърнат индекс? Добре известен факт е, че трябва да изградите индекси, за да внедрите ефективни търсения. Каква е разликата между индекс и обърнат индекс и как се изгражда обърнат индекс?


Отговор 1:

Обърнат индекс

Еластичното търсене използва структура, наречена обърнат индекс, която е проектирана да позволява много бързо търсене в пълен текст. Обърнат индекс се състои от списък на всички уникални думи, които се появяват във всеки документ, и за всяка дума, списък на документите, в които се появява.

Например, да кажем, че имаме два документа, всеки с поле за съдържание, съдържащо следното:

  1. Бързата кафява лисица прескачаше мързеливото куче. Бързите кафяви лисици прескачат ленивите кучета през лятото

За да създадем обърнат индекс, първо разделяме полето на съдържанието на всеки документ на отделни думи (които наричаме термини или маркери), създаваме сортиран списък на всички уникални термини и след това изброяваме, в който документ се появява всеки термин. Резултатът изглежда така:

Срок на Doc_1 Doc_2
-------------------------
Бързо | | х
The | X |
кафяво | X | х
куче | X |
кучета | | х
лисица | X |
лисици | | х
в | | х
скочи | X |
мързелив | X | х
скок | | х
над | X | х
бърз | X |
лято | | х
the | X |
------------------------

Сега, ако искаме да търсим бързо кафяво, просто трябва да намерим документите, в които се появява всеки термин:

Срок на Doc_1 Doc_2
-------------------------
кафяво | X | х
бързо | X |
------------------------
Общо | 2 | 1

И двата документа съвпадат, но първият документ има повече съвпадения от втория. Ако приложим алгоритъм за наивно сходство, който просто отчита броя на съвпадащите термини, тогава можем да кажем, че първият документ е по-подходящ - е по-подходящ за нашето запитване - от втория документ.

Но има няколко проблема с настоящия ни обърнат индекс:

  • Бързо и бързо се появяват като отделни термини, докато потребителят вероятно ги мисли за една и съща дума.фокс и лисици са доста сходни, както и кучетата Те споделят една и съща коренна дума.jumped и скок, но не от една и съща коренна дума, са сходни по значение. Те са синоними.

С предходния индекс търсенето на + Бързо + лисица не би съвпадало с никакви документи. (Не забравяйте, че предходният знак + означава, че думата трябва да присъства.) И терминът Бързо, и терминът лисица трябва да бъдат в един и същ документ, за да задоволят заявката, но първият документ съдържа бърза лисица, а вторият документ съдържа Бърз лисици.

Нашият потребител може разумно да очаква и двата документа да отговарят на заявката. Можем да се справим по-добре.

Ако нормализираме термините в стандартен формат, тогава можем да намерим документи, които съдържат термини, които не са точно такива, каквито е поискал потребителят, но са достатъчно сходни, за да продължат да бъдат уместни. Например:

  • Бързите могат да бъдат с малки букви, за да станат бързи. По същия начин, кучетата могат да бъдат свързани с dog.jumped и скок са синоними и могат да бъдат индексирани като само един термин скок.

Сега индексът изглежда така:

Срок на Doc_1 Doc_2
-------------------------
кафяво | X | х
куче | X | х
лисица | X | х
в | | х
скок | X | х
мързелив | X | х
над | X | х
бърз | X | х
лято | | х
the | X | х
------------------------

Но все още не сме там. Търсенето на + Бързо + лисица все още ще се провали, тъй като вече нямаме точния термин Бързо в индекса си. Ако обаче приложим същите правила за нормализиране, които използвахме в полето за съдържание към нашия низ за заявки, това ще се превърне в запитване за + quick + fox, което би съответствало и на двата документа!

Забележка: - Това е много важно. Можете да намерите само термини, които съществуват във вашия индекс, така че както индексираният текст, така и низът на заявката трябва да бъдат нормализирани в една и съща форма.

Справка: Настоящото ръководство [2.x] | еластичен


Отговор 2:

С прости думи, структура на данни като хешмап ви насочва от дума към документ или уеб страница.

Нека да разгледаме проблема от друга посока. Имате милиони документи или уеб страници или изображения всичко, което може да се наложи да извлечем по-късно. За да помогна повече на интуицията си относно индексирането и извличането на информация, използвайки я, ще ви напомня, че сте виждали обърнат индекс по-рано.

Това е пример от някакъв случаен учебник. Ако имате нужда от информация за някаква тема, да речем, енергии за активиране, ще отворите индекса и ще разберете дали тази дума. Инвертираният индекс ще ви каже номерата на страниците, където тази дума е обяснена в голяма група от хиляди страници.

Ще видиш! Ако трябваше да извършвате редовно линейно търсене, ще ви отнеме часове, за да стигнете до тази страница. Но сега едва ли бяха въпрос на секунди.

И така, как изглежда редовен индекс?

Разбира се, точно срещу него. Той картографира номера на страницата към темите. И лесно можете да кажете, че те не са толкова полезни в областта на търсенето и извличането на информация. (Може би имат късмет някъде другаде). В случай на търсене във Facebook, те се използват за целите на класирането (оценка), така че да получите най-подходящите резултати по-високи.

Как да изградите обърнат индекс? Изграждането на обърнат индекс за поддържане на всякакъв вид система за търсене изисква да извършите серия от стъпки, докато анализирате страниците или документите. Нека да направим подробна информация, докато конструираме собствена търсачка.

Искам да създам търсачка за всички документи в моя компютър. Знам какво търся. Така че ще пусна програма, която ще мине през цялото дърво в моите твърди дискове и ще събера страниците, които искам. Знам, че mp3 файлове и jpegs не са ми от полза. Ще помоля програмата ми да извлече txt, doc и pdf файлове. И така, след като получа документ, пристъпвам към следващата стъпка.

1. Извличане на документа Задачата е наистина проста, ако получа текстов файл (.txt). Но ако това беше документ или pdf, ще трябва да ги разбера с помощта на някои библиотеки, за да извлека текста им. Да речем, че съм успешен в четенето на текста. Какво следва?

2. Премахване на Stop WordsConsider последния параграф. Кои бяха важните думи, които може да търсим? "текст", "библиотеки", "док", "pdf", "извличане", "успешно". Но повечето от другите думи са просто загуба. Ние обозначаваме най-срещащите се думи като „стоп думи“ и ги премахваме, така че да не получа индекси за думи като „аз“, „the“, „we“, „is“, „a“. При редовна употреба имаме списък от 500-1000 думи. Но може да се различава в зависимост от употребата.

3. Стъблото до корена WordThen идва Stemming. Сега, когато искам да търся „извличане“, искам да видя документ, който има информация за него. Но думата, присъстваща в документа, се нарича „извличане“ вместо „извличане“. За да свържа и двете думи, ще нарязвам част от всяка прочетена дума, за да мога да получа „коренната дума“. Извличането може да стане „retriev“. Така ще бъде и „извличането“. Трябва да сме сигурни в правилата, които използваме за нарязване на думите. Съществуват стандартни инструменти за извършване на това като "Портър на стъблото". Можете да играете наоколо с портиерен стъбъл тук: Porter Stemmer Online

4. Запишете идентификатори на документ, сега се пригответе за основната задача - индексирането. Всеки документ имам уникален идентификационен номер на документ. Тъй като срещам непрекъсната дума, която е заложена сега, я записвам в паметта си под формата: retriev ==> docID104007

Ако получавам една и съща дума в някой друг документ, мога да напишаretretriev ==> docID104007retriev ==> docID154033

Но много скоро трябва да ги комбинирам в един единствен listretriev ==> docID104007 & docID154033

По-нататък мога да подобря, като напиша колко време е възникнала думата в документа, така че да можем да класираме по-важните документи, докато извличаме. retriev ==> docID104007 | 5 | & docID154033 | 2 |

5. Обединяваме и съхраняваме Условията Накрая, ние ги запазваме в дискови файлове. Чудесно е, ако подредим индекса въз основа на думите за бързо и лесно извличане.

Това очевидно се нуждае от някои специфични структури от данни, които опростяват работата ви.

Можем да изградим допълнителни вторични индекси, за да подобрим извличането. Има много проблеми, свързани и с класирането.

Надявам се това да ви обясни как се създават обърнати индекси. Ако искате да прочетете повече, можете да се обърнете към страхотна книга Въведение в извличането на информация, написана от Крис Манинг, достъпна онлайн безплатно.