Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
UNIVERZITET U BANJOJ LUCI
ELEKTROTEHNIČKI FAKULTET
KATEDRA ZA OPŠTU ELEKTROTEHNIKU
MULTIMEDIJALNI SISTEMI
Projektni zadatak Pretraživanje baza punog teksta
Studenti: Nastavnik: prof. dr Zdenka Babić Vanja Dardić 9/06 Asistent: mr Vladimir Risojević Nemanja Vujanić 10/06
2
Sadržaj
Uvod ....................................................................................................................................................................................... 3
Algoritmi pretraživanja .................................................................................................................................................. 4
Algoritam bulovog pretraživanja .......................................................................................................................... 4
Algoritam slobodnog pretraživnja ........................................................................................................................ 4
Baza podataka .................................................................................................................................................................... 6
Strukture podataka .......................................................................................................................................................... 8
Analiza memorijskih i procesorskih zahtijeva ..................................................................................................... 9
Uputstvo za instalaciju i upotrebu .......................................................................................................................... 10
Literatura .......................................................................................................................................................................... 13
3
Uvod
Istraživanja iz 1990-ih su pokazala da su ljudi za pronalaženje informacija radije kontaktirali
druge ljude nego koristili neke sisteme za pretraživanje informacija. Ali tokom posljednje dvije
decenije napredak tehnologije i optimizacija efikasnosti sistema za pretraživanje informacija
omogućila je razvoj i napredak internet pretraživača do tog nivoa, da je većina ljudi zadovoljna
većinom vremena, tako da su internet pretraživači postali standardan i prioritetan izvor
informacija.
U našoj aplikaciji su implementirana dva algoritma za pretraživanje baza punog teksta1, bulovo
pretraživanje i slobodno pretraživanje. Razlika u ovim algoritmima za krajnjeg korisnika je u
načinu pisanja upita. Kod bulovog pretraživanja upit se sastoji od ključnih riječi ili fraza koje su
razdvojene logičkim operatorima (AND, OR, AND NOT), dok se kod slobodnog pretraživanja upit
sastoji samo od ključnih riječi, pa su takvi sistemi jednostavniji za korištenje.
Dokumenti koji se pretražuju sastoje se od više dijelova, odnosno sastoje se od polja i zona. U
poljima se nalaze neki podaci o dokumentu, odnosno metapodaci, a to mogu biti npr. ime autora,
naslov dokumenta, ili datum izdavanja. Skup svih mogućih vrijednosti određenog polja treba da
bude konačan. Zona je slična kao i polje, stim što njen sadržaj može da bude bilo kakav tekst.
Tako npr. jedna zona u dokumentu može biti njegov sadržaj. U našoj aplikaciji implemetirane su
zone „naslov” i „sadržaj”.
Sama aplikacija je realizovana u programskom jeziku JAVA2, a za razvoj je korišteno razvojno
okruženje NetBeans IDE3. Kao sistem za upravljanje bazom podataka korišten je MySQL4, dok je
za povezivanje aplikacije i baze podataka korišten JPA (Java Persistance API), odnosno njegova
implementacija Hibernate5. Za pomoć pri timskom radu korišteni su programi LogMeIn
Hamachi6, TeamViewer7, VisualSVN Server8 i TortoiseSVN9.
1Baza punog teksta je kolekcija dokumenata i drugih informacija u vidu baze podataka, u kojoj je tekst svakog referenciranog dokumenta dostupan za čitanje, štampanje ili preuzimanje. 2 http://java.sun.com/ 3 http://www.netbeans.com/ 4 http://www.mysql.com/ 5 https://www.hibernate.org/ 6 https://secure.logmein.com/products/hamachi2/ 7 http://www.teamviewer.com/ 8 http://www.visualsvn.com/server/ 9 http://tortoisesvn.net/
4
Algoritmi pretraživanja
U ovoj sekciji je dat kratak teorijski uvod u kojem su opisana dva algoritma pretraživanja koja su
implementirana u našoj aplikaciji
Algoritam bulovog pretraživanja
Da bi uopšte imalo smisla pretraživati bulovim algoritmom, prije svega je potrebno izvršiti
indeksiranje dokumenata u bazi. Pojam indeksiranja u ovom zadatku predstavlja parsiranje
dokumenata iz baze, izdvajanje različitih riječi iz dokumenata i uparivanje tih riječi sa
dokumentima u kojima se nalaze. Lista uparenih dokumenata i termina naziva se posting lista.
Nakon izvršavanja ovog procesa spremni smo za pretraživanje. Algoritam bulovog pretraživanja
ćemo objasniti na nekoliko primjera.
Primjeri korištenja operatora AND, OR i AND NOT:
Upit pretraživanja: Brutus (AND, OR, AND NOT) Calpurnia. Ako je riječ o operatoru AND, Brutus
i Calpurnia su termini za koje treba naći dokumente u kojima se pojavljuju oba termina. Ti
dokumenti će se nalaziti u presjeku posting lista za termine Brutus i Calpurnia. Za operator OR
rezultat će se nalaziti u uniji pomenutih posting lista, a ukoliko je riječ o operatoru AND NOT,
rezultat će se nalaziti u razlici Brutusa i Clapurnije. Operator AND NOT nije komutativan.
Primjer kompleksnijeg upita:
Upit pretraživanja: Caesar AND Calpurnia AND NOT Brutus OR Cleopatra. Algoritam će se
izvršavati s lijeva u desno. Ne postoji prioritet operatora, tako da će se prvo pronaći presjek
posting lista u kojima se nalaze Caesar i Calpurnia. Zatim će se iz tog skupa izbaciti svi
dokumenti u kojima se pojavljuje termin Brutus i na kraju će se novo dobijenom skupu dodati
svi dokumenti u kojima se pojavljuje termin Cleopatra.
Algoritam slobodnog pretraživnja
Kod ovog algoritma svaki dokument, odnosno svaka zona dokumenta, se predstavlja u
vektorskom prostoru dokumenata, tako da svaki termin u dokumentu određuje pravac i smjer
vektora, a određena vrijednost, koja se zove težina, se pridružuje vektoru i određuje njegovu
dužinu. Prije bilo kakavog pretraživanja, potrebno je izvršiti indeksiranje svih dokumenata u
bazi podataka, a to je ustvari proces određivanja vektorske reprezentacije dokumenata.
Pretraživanje se sastoji od određivanja vektorske reprezentacije upita, i poređenja te
reprezentacije sa svim dokumentima korištenjem kosinusne metrike. Ovim poređenjem dobija
se rezultat od 0 do 1, koji označava sličnost upita sa određenim dokumentom, tako da je nakon
pretraživanja potrebno sortirati dokumente prema rezultatima u opadajućem poretku.
Postoji više različtih težina koje se mogu pridruživati terminima. U ovoj implementaciji
korištena je težina TF-IDF (Term Frequency – Inverse Document Frequency). Ona se definiše
kao:
5
𝑡𝑓-𝑖𝑑𝑓𝑡,𝑑 = 𝑡𝑓𝑡,𝑑 × 𝑖𝑑𝑓𝑡.
(1)
𝑡𝑓𝑡,𝑑 se naziva frekvencija termina, odnosno to je broj pojavljivanja termina t u dokumentu d.
𝑖𝑑𝑓𝑡 se naziva inverzna frekvencija dokumenta, a definiše se kao:
𝑖𝑑𝑓𝑡 = 𝑙𝑜𝑔𝑁
𝑑𝑓𝑡
,
(2)
gdje je N ukupan broj dokumenata u bazi podataka, a 𝑑𝑓𝑡 frekvencija dokumenata, odnosno to je
broj dokumenata u kojima se pojavljuje termin t.
Sličnost između dva dokumenta d1 i d2, se definiše pomoću kosinusne metrike nad njihovim
vektorskim reprezentacijama 𝑉 (𝑑1) i 𝑉 (𝑑2):
𝑠𝑖𝑚 𝑑1 ,𝑑2 =𝑉 (𝑑1)∙𝑉 (𝑑2)
𝑉 (𝑑1) 𝑉 (𝑑2) ,
(3)
gdje brojilac predstavlja skalarni proizvod vektora, a imenilac proizvod njihovih Euklidskih
dužina, odnosno njihovih modua. Uloga imenioca u ovoj jednačini je da normalizuje vektore
𝑉(𝑑1) i 𝑉(𝑑2) na jedinične vektore 𝑣 𝑑1 = 𝑉 (𝑑1)/ 𝑉 (𝑑1) i 𝑣 (𝑑2) = 𝑉 (𝑑2)/ 𝑉 (𝑑2) , tako da
sada jednačinu (3) možemo napisati u obliku:
𝑠𝑖𝑚 𝑑1 ,𝑑2 = 𝑣 (𝑑1) ∙ 𝑣 (𝑑2).
(4)
Slično tako, pošto je i upit ustvari dokument, možemo i rezultat upoređivanja upita q sa
dokumentom d predstaviti kao:
𝑠𝑐𝑜𝑟𝑒 𝑞, 𝑑 = 𝑣 (𝑞) ∙ 𝑣 (𝑑).
(5)
6
Baza podataka
Za modelovanje baze podataka korišten je program MySQL Workbench10. Model baze podataka
prikazan je na slici (6).
(6)
Baza podataka sastoji se od 3 cjeline. U dijelu naznačenom sa DOCUMENT nalaze se 3 tabele,
gdje se nalaze svi podaci o dokumentima u bazi. U tabeli document nalaze se, pored primarnog
ključa, još četiri kolone. Kolone status i old_status označavaju stanje dokumenta, tj. da li je
dokument validan (V), ili obrisan (D), što se koristi prilikom indeksiranja da se odredi da li je
dokument koji se indeksira novi dokument, da li je izmjenjen dokument ili da li je obrisan
dokument. Kolone bool_indexed i free_indexed označavaju da li je dokument indeksiran od strane
bulovog odnosno algoritma slobodnog pretraživanja respektivno. U tabeli zone nalazi se spisak
zona koje neki dokument može da ima. U toj tabeli, pored primarnog ključa, postoji još jedan
identifikator id, koji ima iste vrijednosti kao i odgovarajuće konstante u aplikaciji koje služe za
uniformniji pristup zonama dokumenta. Trenutno je implementirana podrška za dve zone,
naslov i sadržaj dokumenta. U tabeli document_zone nalazi se tekstualni sadržaj zone nekog
dokumenta, odnosno tu se nalazi tekst koji se indeksira.
10 http://wb.mysql.com/
7
U dijelu naznačenom sa BOOL SEARCH nalaze se dve tabele, bool_term i bool_zone_term. U tabeli
bool_term, nalaze se svi termini koji su rezultat parsiranja dokumenata iz baze. Tabela
bool_zone_term je vezna tabela koja povezuje termine i dokumente u kojima se ti termini
pojavljuju.
U dijelu naznačenom sa FREE SEARCH nalaze se dve tabele koje služe za vektorsku
reprezentaciju dokumenata. U njima se praktično nalaze vrijednosti koje su opisane izrazima
(1) do (5). Tako se u tabeli free_term nalazi kolona document_freq koja predstavlja vrijednost
𝑑𝑓𝑡 iz izraza (2), a kolona inverse_df predstavlja vrijednost izraza (2). U tabeli free_zone_term
nalazi se kolona term_freq koja predstavlja vrijednost 𝑡𝑓𝑡,𝑑 iz izraza (1), i kolona normal_tf_idf
koja predstavlja vrijednost izraza (1), ali u normalizovanom obliku.
8
Strukture podataka
Budući da je aplikacija razvijana u OOP, to znači da sigurno ima mnogo klasa i interfejsa koji su
korišteni da bi se kasnije lakše vršila nadogradnja aplikacije i implementacija novih funkcija. Sve
klase i interfejsi se mogu naći u dokumentaciji koja je generisana alatom javadoc, a koja se
nalazi u projektnom direktorijumu. U ovoj sekciji će biti opisane samo one klase ili promjenljive
koje su bitne za implementaciju odgovarajućih algoritama.
U aplikaciji se posebno ističe jedna promjenljiva koja služi za lagan i brz pristup relevantnim
podacima vezanim za termin, na osnovu samog termina. Ti podaci su dokumenti u kojima se taj
termin pojavljuje, i neki numerički podaci potrebni za određivanje i rangiranje rezultata
pretraživanja. Ta promjenljiva je ustvari jedna lista u kojoj svaki element predstavlja jednu
mapu koja je vezana za određenu zonu, odnosno indeks te mape u listi odgovara koloni id iz
tabele zone. Te mape služe za pristup tabelema bool_term i free_term, odnosno one mapiraju
termine predstavljene kao string u objekte klase net.etfbl.search.entities.BoolTerm ili
net.etfbl.search.entities.FreeTerm koji ustvari predstavljaju objektno mapiranje navedenih
tabela.
Od ostalih klasa ističu se JavaBean11 klase koje mapiraju odgovarajuće tabele u bazi podataka.
Takođe, pošto su dva studenta učestvovala u izradi aplikacije, bilo je potrebno naći način da se
posao razdvoji na dva dijela. Zbog toga su prvo napravljeni odgovarajući interfejsi i apstraktne
klase, koji su kasnije implementirane na dva načina, tj. korištenjem dva zahtjevana algoritma. To
je takođe olakšalo integraciju ova dva različita algoritma u GUI dio ove aplikacije.
11 JavaBean je softverska komponenta koja se može višestruko koristiti i kojom se može vizuelno manipulisati razvojim alatima
9
Analiza memorijskih i procesorskih zahtijeva
Pošto je ovo aplikacija u kojoj se praktično u svakom trenutku mijenjaju operativni podaci,
dodaju, brišu i izmjenjuju, teško je tačno izvršiti analizu potrebnih zahtjeva. Jedino je moguće
dati neke okvirne zahtjeve koji su potrebni da bi se ova aplikacija izvršavala u koliko-toliko
realnom vremenu.
Prilikom razvoja i testiranja aplikacije sa manjom bazom podataka (do 50 dokumenata) nije bilo
nikakvih problema. Međutim, sa porastom broja dokumenata u bazi podataka (oko 1000
dokumenata) povećali su se i zahtjevi za memorijom. Tada je dolazilo do problema sa
nedostatkom memorije, odnosno aplikacija je „pucala“. Ti problemi su riješeni boljim
upravljanjem listama i mapama koje sadrže mnogo podataka, odnosno njihovim periodičnim
čišćenjem, kao i povremenim pozivima Garbage Collector12-a. Ali to može da dovede do pada
performansi indeksiranja, odnosno do pada performansi dolazi kada zahtjevi za memorijom
puno porastu i kada se aktiviraju mehanizmi za alokaciju dodatne memorije.
Tako su na računaru sa dvojezgrenim procesorom na 2,53GHz i 2GB operativne memorije
izvršena određena testiranja. Rezultati su predstavljeni u siljedeće dve tabele. U tabeli (7) se
nalaze rezultati testova kada je java virutelnoj mašini dodjeljeno maksimalno 64MB memorije, a
u tabeli (8) kada je dodjeljeno 256MB memorije.
broj dokumenata vrijeme indeksiranja maksimalno korišteno memorije
50 0:03 19,86MB
500 1:39 59,17MB
1000 3:47 64MB
2000 greška greška
(7)
broj dokumenata vrijeme indeksiranja maksimalno korišteno memorije
50 0:03 20,24MB
500 1:35 58,93MB
1000 3:41 106,96MB 2000 11:55 180,56MB
(8)
12 Garbage Collector je dio sistema koji vrši reciklažu memorije koju zauzimaju objekti koji više nisu u upotrebi od strane programa
10
Uputstvo za instalaciju i upotrebu
Da bi se pokrenula aplikacija prvo je potrebno instalirati odgovarajući softver. To je JRE (JAVA
Runtime Environment), i MySQL Server. Linkove za preuzimanje i uputstvo za instalaciju ovih
programa moguće je naći na njihovim službenim stranicama. Zatim je potrebno izvršiti sql
skriptu koja će kreirati odgovarajuće unose u bazi podataka koji su potrebni za ispravno
funkcionisanje programa. Aplikacija se može pokrenuti direktim izvršavanjem arhive
SearchEngine.jar, kada je po podrazumjevanim postavkama java virtuelnoj mašini dodjeljeno
64MB memorije. Ako je potrebno više memorije, tada je aplikaciju potrebno pokrenuti iz
komandne linije, korištenjem određenih parametara, npr.:
java –Xmx256m –jar SearchEngine.jar
gdje 256 označava memoriju koja će biti dodjeljena java virtuelnoj mašini.
Kada se pokrene aplikacija prvo se izvršava inicijalizacija, odnosno indeksiranje od strane
odgovarajućih algoritama. To je prikazano na slici (9).
(9)
Upotreba programa sastoji se od dve funkcionalnosti. To su modifikacija dokumenata u bazi
podataka, i pretraživanje dokumenata. Modifikacija dokumenata se izvršava preko registra
Document, što je prikazano na slici (10).Tu se nalaze sljedeće funkcije:
Add – dodavanje dokumenta u bazu;
Add X – dodavanje dokumenta u bazu određen broj puta;
Save – snimanje modifikacija na postojećem dokumentu;
Delete – brisanje dokumenta (dokument se samo označava kao obrisan);
Undelete all – povratak svih obrisanih dokumenata;
Copy All X – kopiranje svih dokumenata u bazi određen broj puta;
Clear indexes – brisanje svih indeksa iz baze;
Reinitialize – ponovno indeksiranje dokumenata u bazi.
11
(10)
Pretraživanje dokumenata može se izvršavati na dva načina. Prvi način je korištenjem algoritma
bulovog pretraživanja. Upit se sastoji od termina i operatora. Da bismo kreirali upit potrebno je
napraviti kombinaciju termina i operatora tako da se operator nalazi između termina.
Dozvoljeni skup operatora je: AND, OR i AND NOT, koji se reprezentuju sa '&', '|' i '!',
respektivno. Upit se mora sastojati bar od jednog termina. Ako se sastoji od više termina,
između svaka dva susjedna termina se mora nalaziti tačno jedan operator. U slučaju da nema
operatora između susjednih termina, program izmađu njih ubacuje operator OR. Primjer
validnog upita:
Brutus & Cleopatra ! Calpurnia
12
(11)
Drugi način pretraživanja je korištenjem algoritma slobodnog pretraživanja, kojem se može
pristupiti preko registra Free engine. Za pretraživanje je potrebno napisati željeni upit u
tekstualno polje i kliknuti na dugme Search. Kada se pretraživanje završi u tabeli ispod će se
prikazati rezultati pretraživanja koji se sastoje od ocjene dokumenta i njegovog naslova.
Dvoklikom na neki dokument otvara se novi prozor gdje je moguće pročitati sadržaj dokumenta.
(12)
13
Literatura
[1] Christopher D. Manning, Prabhakar Raghavan and Hinrich Schütze, Introduction to
Information Retrieval, Cambridge University Press. 2008.
http://nlp.stanford.edu/IR-book/information-retrieval-book.html
[2] http://www.google.com/
[3] http://www.wikipedia.org/