Što je obrnuti indeks? Poznata je činjenica da trebate izraditi indekse da biste implementirali učinkovita pretraživanja. Koja je razlika između indeksa i obrnutog indeksa i kako se može izraditi obrnuti indeks?


Odgovor 1:

Obrnuti indeks

Elastično pretraživanje koristi strukturu koja se naziva obrnuti indeks, a koja je dizajnirana tako da omogućuje vrlo brzo pretraživanje cijelog teksta. Invertirani indeks sastoji se od popisa svih jedinstvenih riječi koje se pojavljuju u bilo kojem dokumentu, a za svaku riječ je popis dokumenata u kojima se pojavljuje.

Na primjer, recimo da imamo dva dokumenta, svaki sa poljem sadržaja koji sadrži sljedeće:

  1. Brza smeđa lisica preskočila je lijeni pasKuke ljetne smeđe lisice preskaču lijene pse ljeti

Da bismo stvorili obrnuti indeks, prvo podijelimo sadržajno polje svakog dokumenta u zasebne riječi (koje nazivamo pojmovima ili tokenima), kreiramo poredani popis svih jedinstvenih izraza, a zatim popis u kojem se dokumentu pojavljuje svaki izraz. Rezultat izgleda ovako:

Izraz Doc_1 Doc_2
-------------------------
Brzo | | x
The | X |
smeđa | X | x
pas | X |
psi | | x
lisica | X |
lisice | | x
u | | x
skočio | X |
lijeni | X | x
skok | | x
preko | X | x
brzo | X |
ljeto | | x
the | X |
------------------------

Ako želimo brzo pretraživati ​​smeđu boju, trebamo pronaći dokumente u kojima se pojavljuje svaki izraz:

Izraz Doc_1 Doc_2
-------------------------
smeđa | X | x
brzo | X |
------------------------
Ukupno | 2 | 1

Oba dokumenta se podudaraju, ali prvi dokument ima više podudaranja od drugog. Ako primijenimo algoritam naivne sličnosti koji samo broji broj podudaranja pojmova, tada možemo reći da je prvi dokument bolje podudaranje - relevantniji je za naš upit - nego drugi dokument.

Ali postoji nekoliko problema s našim trenutno obrnutim indeksom:

  • Brzi i brzi pojavljuju se kao zasebni izrazi, a korisnik ih vjerojatno misli kao istu riječ. Lisice i lisice prilično su slični, kao i psi i psi; Dijele istu korijensku riječ.umped i skok, iako nisu iz iste korijenske riječi, po značenju su slični. Oni su sinonimi.

S prethodnim indeksom, pretraga + Quick + fox ne bi odgovarala nijednom dokumentu. (Zapamtite, prethodni znak + znači da riječ mora biti prisutna.) I izraz Quick i izraz lisica moraju biti u istom dokumentu da bi se zadovoljilo pitanje, ali prvi dokument sadrži brzu lisicu, a drugi dokument sadrži Quick lisice.

Naš bi korisnik razumno mogao očekivati ​​da će se oba dokumenta podudarati s upitom. Možemo i bolje.

Ako norme normaliziramo u standardni format, tada možemo pronaći dokumente koji sadrže izraze koji nisu potpuno isti kao što je korisnik tražio, ali su dovoljno slični da su i dalje relevantni. Na primjer:

  • Brze se mogu smanjiti u niže i postati brze. Foxe mogu biti stabljike - svedene na korijenski oblik - kako bi postale lisica. Slično tome, psi bi mogli biti povezani sa psom. Skok i skok sinonimi su i mogu se indeksirati kao samo pojedinačni skok.

Sada indeks izgleda ovako:

Izraz Doc_1 Doc_2
-------------------------
smeđa | X | x
pas | X | x
lisica | X | x
u | | x
skok | X | x
lijeni | X | x
preko | X | x
brzo | X | x
ljeto | | x
the | X | x
------------------------

Ali nismo još tamo. Naša potraga za + Quick + fox i dalje neće uspjeti, jer više nemamo točan izraz Quick u svom indeksu. Međutim, primijenimo li ista pravila normalizacije koja smo koristili u polju sadržaja na naš niz upita, to bi postao upit za + quick + fox, koji bi odgovarao oba dokumenta!

Napomena: - Ovo je vrlo važno. Možete pronaći samo izraze koji postoje u vašem indeksu, tako da se indeksirani tekst i niz upita moraju normalizirati u isti oblik.

Reference: Definitivni vodič [2.x] | Elastičan


Odgovor 2:

Jednostavnim riječima, struktura podataka poput hashmapa usmjerava vas od riječi do dokumenta ili web stranice.

Pogledajmo problem iz drugog smjera. Imate milijune dokumenata ili web stranica ili slika bilo čega što bismo možda trebali preuzeti kasnije. Da bi vam pomogla vaša intuicija o indeksiranju i pronalaženju informacija pomoću njih, podsjetit ću vas da ste već vidjeli obrnuti indeks.

Ovo je primjer iz nekog slučajnog udžbenika. Ako vam trebaju neke informacije o nekoj temi, recimo, energijama aktiviranja, otvorit ćete indeks i otkriti je li ta riječ. Obrnuti indeks reći će vam brojeve stranica na kojima je ta riječ objasnjena velikim brojem od tisuću stranica.

Vidiš! Ako biste obavljali redovnu linearnu pretragu, trebate satima da stignete na tu stranicu. Ali sada su to bile samo nekoliko sekundi.

Pa kako izgleda obični indeks?

Naravno, upravo suprotno od toga. To preslikava broj stranice u teme. I lako možete reći da nisu toliko korisne u području pretraživanja i vađenja informacija. (Možda imaju sreću negdje drugdje). U slučaju pretraživanja na Facebooku, oni se upotrebljavaju u svrhe rangiranja (bodovanja) tako da postignete najrelevantnije rezultate.

Kako izgraditi obrnuti indeks? Izgradnja obrnutog indeksa za održavanje bilo koje vrste pretraživačkog sustava zahtijeva da izvršite niz koraka tijekom raščlanjivanja stranica ili dokumenata. Idemo malo kroz izradu vlastite tražilice.

Želim stvoriti tražilicu za sve dokumente na svom računalu. Znam što tražim. Stoga ću pokrenuti program koji će u mom tvrdom disku proći cijelo stablo i prikupiti željene stranice. Znam da mi mp3 datoteke i jpegs nisu od koristi. Zatražit ću od mog programa da preuzme datoteke txt, doc i pdf. Dakle, čim dobijem dokument, prelazim na sljedeći korak.

1. Dohvaćanje dokumentaZa posao je vrlo jednostavan ako dobijem tekstualnu datoteku (.txt). Ali ako je to bio dokument ili pdf, morat ću ih raščlaniti pomoću nekih knjižnica da bih mogao preuzeti njihov tekst. Recimo da sam uspješan u čitanju teksta. Što dalje?

2. Uklanjanje riječi W StopConsider zadnji odlomak. Koje su važne riječi mogle tražiti? "tekst", "knjižnice", "doc", "pdf", "dohvaćanje", "uspješno". Ali većina ostalih riječi su samo otpad. Označavamo najčešće pojavljujuće riječi kao "zaustavite riječi" i uklonimo ih tako da ne dobijem indekse za riječi poput "ja", "the", "we", "is", "an". U redovnoj uporabi imamo popis od 500-1000 riječi. Ali može se razlikovati ovisno o uporabi.

3. Stavite u korijenu WordThen dolazi Stemming. Sada kad god želim potražiti "preuzimanje", želim vidjeti dokument koji sadrži podatke o njemu. Ali riječ prisutna u dokumentu naziva se "dohvaćanje" umjesto "dohvaćanje". Da biste povezali obje riječi, usitnit ću vam dio svake riječi koje sam pročitao kako bih mogao dobiti "korijensku riječ". Dohvat može postati "retriev". Tako će biti i "dohvaćanje". Moramo biti sigurni u pravilima koja koristimo za sjeckanje riječi. Postoje standardni alati za izvođenje ove slike poput "Porterovog štruca". Ovdje se možete poigrati s nosačem nosača: Porter Stemmer Online

4. Snimite ID-ove dokumentaSada se pripremite za glavni zadatak - indeksiranje. Svaki dokument imam jedinstveni ID dokumenta. Kad naiđem na non-stop riječ koja je sada zaustavljena, spremam je u svoju memoriju u obliku: retriev ==> docID104007

Ako dobijem istu riječ u nekom drugom dokumentu, mogu napisatiretretv ==> docID104007retriev ==> docID154033

Ali vrlo brzo moram ih kombinirati u jedan listretriev ==> docID104007 & docID154033

Mogu se dodatno poboljšati tako što ću napisati koliko je vremena došlo u dokument da bismo mogli rangirati važnije dokumente prilikom dohvaćanja. retriev ==> docID104007 | 5 | & docID154033 | 2 |

5. Spajajte i pohranite UvjeteFinally, sve ih spremamo u datoteke diskova. Izvrsno je ako indeks sortiramo na temelju riječi za brzo i lako dohvaćanje.

Ovo sve očito treba neke posebne strukture podataka koje pojednostavljuju vaš posao.

Možemo izraditi daljnje sekundarne indekse za poboljšanje pretraživanja. Puno je pitanja koja se odnose i na rangiranje.

Nadam se da vam je ovo objasnilo kako se stvaraju obrnuti indeksi. Ako želite pročitati više, pogledajte referentnu knjigu Uvod u pronalaženje informacija koju je napisao Chris Manning, a koja je besplatno dostupna na internetu.