personalizirano filtriranje toka s društvene mreže …1 uvod zadatak završnog rada jest...

50
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA ZAVRŠNI RAD br. 4463 Personalizirano filtriranje toka s društvene mreže Twitter Lovro Vidović Zagreb, lipanj 2016.

Upload: others

Post on 11-Jan-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

SVEUČILIŠTE U ZAGREBU

FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

ZAVRŠNI RAD br. 4463

Personalizirano filtriranje toka s društvene

mreže Twitter

Lovro Vidović

Zagreb, lipanj 2016.

Page 2: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje
Page 3: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje
Page 4: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

Sadržaj

Uvod ....................................................................................................................... 1

1. Twitter................................................................................................................ 2

1.1. Povijest Twittera .......................................................................................... 3

1.2. Funkcionalnosti Twittera .............................................................................. 4

1.3 Različitost Twittera u odnosu na druge društvene mreže ............................. 5

1.4. Programska podrška za Twitter API – Twitter4j ........................................... 6

2. Lucene................................................................................................................ 7

2.1 Pregled komponenata aplikacije za pretraživanje ......................................... 8

2.2 Proces indeksiranja .................................................................................... 12

2.2.1 Struktura podataka Documents ............................................................ 13

2.2.2 Postupak analize dokumenta ............................................................... 16

2.2.3 Direktorij spremanja stvorenih indeksa ................................................. 18

2.3 Proces pretraživanja ................................................................................... 19

2.3.1 Izračun koeficijenata sličnosti prilikom pretraživanja ............................ 21

3. Razvijena aplikacija .......................................................................................... 22

3.1 Implementirana aplikacija ........................................................................... 23

3.1.1 Razred TwitterClass ............................................................................. 24

3.1.2 Razred Indexer ..................................................................................... 25

3.1.3 Razred Searcher .................................................................................. 27

3.1.4 Razred Email ........................................................................................ 28

3.1.5 Razred AppConstants .......................................................................... 30

3.2 Funkcionalni zahtjevi sustava ..................................................................... 31

3.3 Primjer rada aplikacije................................................................................. 35

3.4 Upute za instalaciju ..................................................................................... 40

Zaključak .............................................................................................................. 43

Literatura .............................................................................................................. 44

Sažetak ................................................................................................................ 45

Summary .............................................................................................................. 46

Page 5: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

1

Uvod

Zadatak završnog rada jest implementirati programsku podršku koja će

omogućiti korisniku personalizirano filtriranje poruka (tweets) s društvene mreže

Twitter te isporuku samih poruka (tweets) korisniku u njegov sandučić elektroničke

pošte. Filtriranje se vrši na temelju ključnih riječi koje korisnik navodi. Ideja je da

korisnik periodički dobiva poruke s društvene mreže Twitter u sandučić

elektroničke pošte. Poruka će biti isporučena u korisnikov sandučić elektroničke

pošte ako do toga trenutka nije bila isporučena korisniku, a na temelju raznih

parametara je rangirana kao poruka koja odgovara najbolje ključnim riječima

unesenim od strane korisnika sustava. Ako se unutar definiranog vremenskog

perioda ne pojavi niti jedna nova poruka s Twittera koja pripada unutar k-najboljih

poruka (detaljan izračun koeficijenata i način pretraživanja poruka je objašnjen u

poglavlju o Luceneu, drugom poglavlju) ili se pojavi poruka koja je već bila

isporučena korisniku, korisnik ne dobiva nikakvu poruku elektroničke pošte. U

izradi praktičnog dijela rada korištene su Javine programske knjižnice otvorenog

koda Apache Lucene, Twitter4J i javax.mail. Apache Lucene je Javina programska

knjižnica namijenjena indeksiranju i pretraživanju teksta. Twitter4J je Javina

programska knjižnica koja omogućuje integraciju Java aplikacije s društvenom

mrežom Twitter čime je omogućeno dohvaćanje poruka s Twittera, objavljivanje

statusa i brojne druge mogućnosti koje su korisniku omogućene tijekom korištenja

društvenih mreža. Javax.mail je Javina programsku knjižnica za slanje

elektroničke pošte. U prvom poglavlju biti će opisana društvena mreža Twitter i

razne njegove pogodnosti te sama programska podrška (tj. bit će dan detaljniji

uvid u Javinu programsku knjižnicu Twitter4J). U drugom poglavlju biti će pobliže

prikazan sadržaj Javine programske knjižnice Apache Lucene te metode

indeksiranja i pretraživanja koje su korištene. Treće poglavlje daje detaljan uvid u

samu aplikaciju gdje se može vidjeti praktična primjena spomenutih Javinih

programskih knjižnica.

Page 6: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

2

1. Twitter

Twitter je društvena mreža koja omogućuje registriranim korisnicima da

čitaju i objavljuju tekstualne poruke, takozvane tweetove. Tweetovi se mogu

primati preko Web stranice Twittera, SMS-a, elektroničke pošte ili iz određene

aplikacije koja ima mogućnost dohvaćanja tweetova i njihovo slanje. Također

između registriranih korisnika je moguće izmjenjivati direktne poruke koje su

vidljive samo korisnicima između kojih se poruka šalje. Korisnici koji nisu

registrirani imaju mogućnost čitanja tweetova ali nemaju mogućnost objavljivanja

istih niti slanja direktnih poruka drugim korisnicima. Twitter može biti korišten kako

u društvene tako i u poslovne svrhe. Vrlo je jednostavno objavljivanje vlastitih

informacijama o radnjama iz života i posjećenim lokacijama kako bi vaši prijatelji

mogli imati što više informacija o vama. Također, gledajući s poslovne strane,

Twitter kao društvena mreže se može koristiti za razašiljanje raznih novosti o

određenoj kompaniji, za interakciju između zaposlenika čime se na vrlo

jednostavan način postiže nekakva unutarnja integracija kompanije. Twitter

trenutno broji oko tristo milijuna korisnika čime spada u najpopularnije društvene

mreže današnjice [1]. Također, postoji programska podrška za brojne programske

jezike (u koje spada i Java) koji omogućuju integraciju osnovnih funkcionalnosti

Twittera u samu aplikaciju. Sama kompanija Twitter ima sjedište u San Franciscou

te broji oko 3 900 zaposlenika. Broj zaposlenika u zadnjih par godina znatno je

porastao čemu svjedoči rast popularnosti Twittera (Slika 1.2) [2].

Slika 1.1 Logo Twittera [1]

Page 7: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

3

Slika 1.2 Rast zaposlenika kompanije Twitter [2]

1.1. Povijest Twittera

Društvena mreža Twitter je došla na tržište 2006 godine. Osnivači Twittera

su Jack Dorsey, Evan Williams, Biz Stone i Noah Glass [3] tadašnji zaposlenici

kompanije Odeo. Početna ideja je bila implementirati SMS (Short message servis)

koji bi omogućio komunikaciju između jedne osobe i grupe ljudi te je i samim time

bio namijenjen državama koje ne šalju mnogo SMS poruka. Raznovrsnim

istraživanjima i inovacijama pretvorio se u društvenu mrežu s brojnim drugim

funkcionalnostima osim samog slanja poruka. Početno ime društvene mreže je

bilo Status koje se ubrzo promijenilo u Twitter. Originalno ime proizvoda je bilo

twtrr. Prvi tweet je objavljen 21.3.2006 te je glasio: „just setting up my twtrr“.

Prototip Twittera je bio testiran kao poseban unutarnji servis za zaposlenike

kompanije Odeo. Javnosti je predstavljen u sedmom mjesecu 2006. godine. Ubrzo

nakon što je Twitter stekao široku popularnost, osnivači Twittera kao i ostali

zaposlenici kompanije Odeo koji su radili na tome projektu su preuzeli kompaniju

od raznih investitora te je nastala kompanija Twitter.

Page 8: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

4

1.2. Funkcionalnosti Twittera

Tweet je poruka koja se sastoji od maksimalno 140 znakova. Razlog takvog

ograničenja proizlazi iz činjenice što je Twitter u početku bio usmjeren najviše

prema primanju i slanju poruka koristeći prijenosni telefon, te je i samim time u

tome ležala njegova posebnost i različitost od drugih sličnih proizvoda. Kako je

širom svijeta standardna veličina SMS poruka 160 znakova, osnivači Twittera su

se odlučili na takvo ograničenje kako korisnici ne bi dobivali više poruka za samo

jedan tweet. U tih 160 znakova, 20 znakova odlazi na korisničko ime pošiljatelja te

140 znakova za sam tweet [4].

Praćenje (Following)

Ukoliko se želi ući u interakciju s drugim članovima (registriranim

korisnicima) Praćenje je nužno. Ukoliko određeni korisnik „prati“ drugog

korisnika onda mu se pojavljuju raznovrsni tweetovi, koje objavljuje praćen

korisnik, na njegovoj početnoj stranici. Praćenje se izvodi pritiskom na

gumb Prati koji se nalazi na profilnoj stranici traženog korisnika ispod

profilne slike. Kako bi se došlo do traženog korisnika koristi se Twitterova

tražilica gdje se može pretraživati po imenu, prezimenu ili korisničkom

imenu tražene osobe. Također, traženje određenog korisnika može se

izvesti i preko drugih mreža jer Twitter uparuje određeni profil s adresom

elektroničke pošte te se tako mogu pronaći korisnici iz nekih drugih

domena. Možemo pronaći Twitter profil osobe za koju znamo adresu

elektroničke pošte ako je ujedno i ta adresa korištena prilikom registracije

na društvenu mrežu Twitter.

Odgovaranje (@ Replies)

Korisniku je omogućeno odgovaranje i sudjelovanje u diskusiji ukoliko

pročita zanimljiv (za njega) tweet. Normalni odgovori su korisnikova

mogućnost da sudjeluje u javnoj raspravi oko određenog tweeta. Mogu se

izvesti na dva načina. Korisnik može objaviti tweet koji započinje sa

@korisničkoime_autora_tweeta čime se referencira na određen tweet te

autor tweeta dobiva obavijest o referenciranju na njegov tweet te mu se taj

tweet pojavljuje na početnoj stranici. Također, kako bi se odgovorilo na

Page 9: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

5

tweet može se pritisnuti na sivu strelicu na desnoj strani ispod tweeta.

Druga vrsta odgovora na tweet jest ugrađeni odgovor. Ugrađeni odgovor je

kombinacija normalnog tweeta i normalnog odgovora. Počinje sa tekstom

(kao običan tweet), a ne sa @korisničkoime_autora_tweeta. Unutar samog

teksta odgovora nalazi se @korisničkoime_autora_tweeta samo nije na

početku.

Slanje direktnih poruka (Direct Messages)

Direktne poruke predstavljaju privatne poruke koje su dostupne samo

pojedincima između kojih se šalju. Ne mogu se slati privatne poruke onim

korisnicima kaj nas ne prate.

Prosljeđivanje tweet-ova (Retweeting)

Retweeting se koristi ako želimo proslijediti određen tweet vlastitim

pratiteljima. Može se izvesti pritiskom na ikonu ili kopiranjem cijelog

tweeta i stavljanjem RT na početak.

Hashtags

Hashtag je posebna oznaka koja započinje sa znakom #. Twitter koristi

hashtagove kako bi se kategorizirali tweetovi te se samim time omogućuje

lakša pretraga tweetova koristeći Twitterovu tražilicu. Pritiskom na riječ koja

se nalazi odmah iza hashtag simbola prikazuju se svi drugi tweetovi

označeni s tom ključnom riječi. Hashtag se može naći bilo gdje unutar

tweeta (početak, kraj ili sredina) [5].

1.3 Različitost Twittera u odnosu na druge društvene mreže

Twitter, kao društvena mreže, je puno otvoreniji od ostalih društvenih

mreža, točnije, korisnici nisu ograničeni samo na one korisnike koji vežu iste

aktivnosti i poznanstva. Vrlo je lagano doći do informacija o bilo kojoj osobi koja je

registrirana na Twitteru, svejedno je radi li se o nekoj poznatoj ličnosti ili o nekom

Page 10: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

6

drugom korisniku Twittera. Twitter predstavlja više nekakav profesionalan nego

osoban prostor za dijeljenje informacija stoga je i poslovna strana izraženija,

točnije mogućnost grupiranja zaposlenika i reklamiranja raznih podataka mnogih

kompanija. Najveća razlika u odnosu na druge društvene mreže je tekstualno

ograničenje od 140 znakova prilikom stvaranja tweeta u čemu leži i jedna od

najvećih posebnosti Twittera. Prilikom slanja privatnih poruka može se poslati

poruka veća od 140 znakova (tek je nedavno uvedeno otklanjanje ograničenja od

140 znakova za privatne poruke).

1.4. Programska podrška za Twitter API – Twitter4j

Kako bi se omogućila integracija funkcionalnosti društvene mreže Twitter u

Java aplikaciju nužno je uključenje Javine programske knjižnice otvorenog koda

Twitter4j u samu aplikaciju. Spomenuta programska knjižnica nudi ostvarenje

mnogobrojnih funkcionalnosti iz same aplikacije bez otvaranje službene početne

stranice Twittera odnosno bez korištenja grafičkog sučelja Twittera koje se

uobičajeno koristi za normalan rad sa Twitterom. Neke od osnovnih

funkcionalnosti koje su nam dostupne uključenjem Javine programske knjižnice u

projekt su: objavljivanje novih osobnih statusa (ne dužih od 140 znakova),

odnosno objavljivanja javnih poruka koje su svima dostupne (tweet), dohvaćanje

određenog broja javnih poruka s korisnikove početne stranice (gleda se zadnjih

nekoliko javnih poruka kronološki raspoređeno), slanje i primanje privatnih poruka

te pretraživanje javnih poruka na temelju unesenih ključnih riječi. Detaljan uvid u

programsku izvedbu spomenutih funkcionalnosti dostupan je na službenoj stranici

za programsku knjižnicu Twitter4j [6].

Prilikom pretraživanja javnih poruka na temelju ključnih riječi važnu ulogu

ima razred Query iz programske knjižnice Twitter4j koji predstavlja upit po kojemu

se pretražuje. Pretraživanje se vrši pomoću instance razreda Twitter koristeći

njegovu metodu search koja kao parametar prima instancu razreda Query. Ako

se ne navedu nikakvi parametri za upit, metoda search razreda Twitter vraća

određen broj javnih poruka (kronološki gledano). Za navedeni upit, osim ključnih

Page 11: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

7

riječi po kojima se pretražuju javne poruke, mogu se postaviti i razni drugi

parametri upita poput: broja javnih poruka koje se mogu vratiti upitom (ograničenje

je na 100 poruka), određivanje krajnjeg datuma do kojeg se gledaju javne poruke

ili određivanje početnog datuma od kojeg se gledaju javne poruke koje se vraćaju.

Za pohranu povratne vrijednosti rezultata pretraživanja koristi se sučelje

QueryResult koje nudi metodu getTweets koja vraća kolekciju javnih poruka

koristeći razred Status (također iz Javine programske knjižnice Twitter4j).

2. Lucene

Lucene je Javina programska knjižnica koja nudi vrlo učinkovit mehanizam

pretraživanja teksta te je omogućena laka integracija samog pretraživanja u

raznovrsne aplikacije (web aplikacije, desktop aplikacije itd.). Mehanizam

pretraživanja i cjelokupni koncept Lucene je pisan u programskom jeziku Java.

Moguća je integracija Lucenea u druge programske jezike (C/C++, C#, Ruby, Perl,

Python itd.). Izuzev vrlo učinkovitog mehanizma pretraživanja Lucene je u

današnje vrijeme vrlo popularan među mnogobrojnim korisnicima zbog

jednostavnosti korištenja API-ja. Korisnik koji u svoju aplikaciju integrira Lucene

može komotno koristiti sve funkcionalnosti API-ja bez poznavanja pozadine

pretraživanja, odnosno bez poznavanja detalja o postupcima indeksiranja i

pretraživanja teksta. Također, Lucene nudi mogućnost pretraživanja raznovrsnih

formata datoteka (PDF, XML, Microsoft Word, HTML, tekstualnih), točnije, mogu

se pretraživati svi oblici datoteka iz kojih se može izvaditi tekstualna informacija.

Lucene je pokrenuo Doug Cutting, poznati programer i promotor tehnologija

otvorenog koda.

Ukoliko želimo unutar velikoga broja datoteka pronaći one datoteke koje

sadrže određene ključne riječi, intuitivan pristup bi bio iterativno prolaženje po

svakoj datoteci i određivanja sadrži li datoteka ključnu riječ ili nekakav izraz.

Naravno, takav pristup je vrlo neučinkovit i dugotrajan ukoliko imamo velik broj

datoteka za koje moramo odrediti sadrže li ključnu riječ ili ne. Mehanizam

pretraživanja teksta koji nudi Lucene je znatno napredniji od ovog intuitivnog

Page 12: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

8

pristupa. Pretraživanje možemo podijeliti u dva osnovna djela, točnije u procese

indeksiranja i pretraživanja. Prilikom indeksiranja potrebno je doći do samog teksta

zapisanog u datotekama te ga pretvorit u oblik dokumenta koji je pogodan za rad

Lucenea. Indeksiranjem se pretvara tekst unutar datoteka u posebnu podatkovnu

strukturu koja omogućuje brzo pretraživanje čime se eliminira (intuitivan) proces

iterativnog pretraživanja sadržaja datoteka Proces pretraživanja je moguće raditi

nakon što je indeksiranje završeno. Lucene, prilikom pretraživanja, koristi

raznovrsne algoritme kako bi izračunao koeficijente sličnosti dokumenata koji

sadrže tekstualni sadržaj. Na temelju izračunatih koeficijenta Lucene izdvaja one

dokumente koji imaju najveću sličnost gledavši prema unesenim ključnim riječima

odnosno izrazima. Procesi indeksiranja i pretraživanja su detaljno opisani u

poglavljima 2.2 i 2.3.

2.1 Pregled komponenata aplikacije za pretraživanje

Slika 2.1 prikazuje „lanac“ komponenti i aktivnosti koje svaka aplikacija, koja

koristi mehanizam pretraživanja teksta implementiran u Javinoj programskoj

knjižnici Apache Lucene, mora implementirati.

Page 13: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

9

Slika 2.1 Temeljne komponente mehanizma pretraživanja [8]

Dohvaćanje sadržaja dokumenata (Acquire Content)

Tijekom ove faze nužno je skupiti sve datoteke iz korisnikovog datotečnog

sustava koje trebaju proći proces indeksiranja, a samim time i proces

pretraživanja. Proces dohvata navedenih datoteka može biti jednostavan

ako su datoteke za koje se radi indeksiranje pohranjene u istom direktoriju

u datotečnom sustavu. U suprotnom slučaju (datoteke su raspršene na

raznim mjestima u datotečnom sustavu ili je za pristup određenim

Page 14: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

10

datotekama i direktorijima potrebna autentifikacija) ova faza je dosta

složena za implementaciju. Lucene kao alat za pretraživanje teksta nema

ulogu u prikupljanju dokumenata iz datotečnog sustava koji će se indeksirati

već o tome mora voditi brigu ostatak aplikacije.

Stvaranje strukture podataka nužne za indeksiranje (Build Document)

Razred Document predstavlja strukturu podataka odnosno posebnu

jedinicu koju koristi Lucene prilikom indeksiranja. Svaka datoteka čiji tekst

se pretražuje mora prije procesa indeksiranja biti pretvoren u instancu

razreda Document. Struktura podataka tipa Document sastoji se od

posebnih polja koja specificiraju dodatna usmjerenja prilikom procesa

pretraživanja odnosno indeksiranja. Neka važnije polja su contents,

filename, filepath i title. Prilikom izvršavanja procesa indeksiranja,

ako se drugačije ne specificira, Lucene gleda polje contents koje

predstavlja tekstualni sadržaj dokumenta.

Postupak analize teksta koji je izložen indeksiranju (Analyze

Document)

Zadnji korak prije izvršavanja procesa indeksiranja je rastavljanje

tekstualnog sadržaja datoteke (sadržaj polja contents u strukturi

podataka Documents) na manje dijelove koje nazivamo tokeni. Svaki token

predstavlja riječ jezika u kojem je pisan dokument te se za svaki token

pamti redni broj riječi u dokumentu (position), redni broj početnog znaka

riječi odnosno tokena (offset) te duljina tokena (length). Postupak

određivanja riječi koja se smatra tokenom ovisi o vrsti „analizatora“ koji se

koristi prilikom analize teksta.

Proces indeksiranja dokumenata (Index document)

Tijekom indeksiranja stvara se posebna struktura podataka indeks u koju se

stavlja dokument. Indeks je posebna struktura podataka koju Lucene koristi

Page 15: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

11

kako bi se omogućilo brzo pretraživanje teksta dokumenta. Detaljan

postupak indeksiranja je opisan u poglavlju 2.2.

Korisničko sučelje za pretraživanje (Search user interface)

Korisničko sučelje je vrlo važan dio aplikacije koja ima omogućen

mehanizam pretraživanja. Sučelje bi trebalo biti što jednostavnije

napravljeno kako bi korisnik uz što manje probleme mogao koristiti

aplikaciju za pretraživanje. Lucene ne nudi nikakvo osnovno korisničko

sučelje za pretraživanje već se korisničko sučelje mora izgraditi koristeći

neke druge metode Jave ili nekog drugog programskog jezika.

Izgradnja upita za pretraživanje (Build query)

Korisnik aplikacije unosi ključne riječi prema kojima se vrši pretraživanje.

Na temelju unesenih ključnih riječi stvara se instanca razreda Query koji za

Lucene predstavlja upit. Postupak parsiranja odnosno prevođenja unesenih

ključnih riječi izvršavaju metode razreda QueryParser čime se dobiva

Query odnosno upit kakvog ga vidi Lucene.

Pretraživanje na temelju upita (Search query)

Prilikom izvršavanja procesa pretraživanja Lucene koristi strukture

podataka izgrađene procesom indeksiranja te se na temelju upita (Query) i

njegovih ključnih riječi vrši pretraživanje. Lucene koristi dva teorijska

modela pretraživanja. Jednostavniji model, čisti Boolean model (engl. Pure

Boolean model) je onaj u kojem se određeni dokument prihvaća ako

zadovoljava upit ili ne prihvaća ako ne zadovoljava upit, nema nikakvih

izračuna koeficijenata sličnosti. Složeniji model pretraživanja je model

vektorskog prostora

(engl. Vector space model) gdje su upit i dokument modelirani kao vektori

te se sličnost vektora upita i vektora dokumenta računa kao udaljenost

Page 16: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

12

između ta dva vektora. Lucene nudi mogućnost izbora korištenog modela

tijekom pretraživanja.

Prikaz rezultata korisniku (Render results)

Faza koja predstavlja prikaz dokumenata (koji zadovoljavaju upit) korisniku.

Dokumente dobivene procesom pretraživanja je pogodno sortirati po

koeficijentu sličnosti (ako se koristi model vektorskog prostora).

2.2 Proces indeksiranja

Slika 2.2 prikazuje postupak indeksiranja razdvojen u osnovne dijelove.

Prvo se tekstualni sadržaj dokumenta uzima iz datoteka i stavlja u polje (Field)

razreda Document. Zatim se provodi postupak analize dokumenta, odnosno

postupak razdvajanje teksta na tokene te se na kraju stvoreni tokeni dodaju u

indeks.

Slika 2.2 Tijek procesa indeksiranja [8]

Page 17: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

13

2.2.1 Struktura podataka Documents

Kao što je već navedeno, ako želimo pretraživati datoteke datotečnog sustava,

odnosno njihov tekstualni sadržaj, proces indeksiranja je nužan. Kod indeksiranja

vrlo važnu ulogu ima struktura podataka tipa Document koja sadrži više

raznovrsnih polja (Field), ta polja sadrže tekstualni sadržaj dokumenata koji se

pretražuju. Lucene može učiniti 3 stvari sa svakim poljem unutar strukture

Document.

1. Indeksirati sadržaj polja (samo tekstualna polja se mogu indeksirati)

2. Ako je polje indeksirano, može sadržavati vektore pojmova (engl. Term

Vector) za dokument. Samim time se omogućuju neke naprednije

mogućnosti od izdvajanja dokumenata koji sadrže određenu riječ. Može se

gledati sličnost dokumenata računajući koeficijente sličnosti (računanje

koeficijenata je detaljno objašnjeno u poglavlju 2.3.1).

3. Odvojeno se zapisuje kopija sadržaja polja dokumenta u inačici koja nije

prošla proces analize (proces razdvajanja teksta na tokene). Ova

mogućnost je pogodna za ona polja dokumenta koja se prikazuju korisniku

nepromijenjena (npr. polje titles).

Polje unutar dokumenta, odnosno razred Field, je jedan od najvažnijih dijelova

procesa indeksiranja jer izravno sadrži vrijednosti koje će se indeksirati. Razred

Field nudi niz konstanti koji predstavljaju opis načina na koji će se tekstualni

sadržaj indeksirati.

Field.Index.ANALYZED

Konstanta navedena prilikom stvaranja objekta razreda Field koja

specificira analizatoru da rastavi tekstualni sadržaj dokumenta na tokene

koji se koriste za pretraživanje.

Field.Index.NOT_ANALYZED

Page 18: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

14

Konstanta koja specificira da se radi indeksiranje teksta dokumenta ali da

se ne provodi tekst kroz postupak analize (rastavljanje na tokene) već da se

cjelokupni sadržaj polja gleda kao jedan token.

Field.Index.ANALYZED_NO_NORMS

Značenje ove konstante se poistovjećuje sa značenjem konstante

Field.Index.ANALYZED izuzevši spremanje informacija o važnosti

određenih polja, te informacije se ne spremaju u indeks.

Field.Index.NOT_ANALYZED_NO_NORMS

Značenje ove konstante se poistovjećuje sa značenjem konstante

Field.Index.NOT_ANALYZED izuzevši spremanje informacija o važnosti

određenih polja, te informacije se ne spremaju u indeks.

Field.Index.NO

Konstanta koja specificira da se polje ne može pretraživati.

Prilikom stvaranja indeksa Lucene (ako mu se drugačije ne specificira) zapisuje

sve informacije kako bi se stvorio model vektorskog prostora (broj pojavljivanja

traženog izraza i njegova pozicija u dokumentu). U slučaju izrade mehanizma

pretraživanja koji koristi čisti Boolean model nije potrebno zapisivati komponente

bitne za model vektorskog prostora što se može jednostavno specificirati u radu

Lucenea.

Prilikom stvaranja objekta razreda Field možemo odrediti da li želimo da se

vrijednost teksta koji se nalazi u polju zapiše u indeks. Za to su zaslužne

konstante Field.Store.YES i Field.Store.NO. Ako je vrijednost zapisana u

indeksu (Field.Store.YES), vrijednost se može ujedno i vratiti prilikom procesa

pretraživanja, u suprotnom slučaju originalna vrijednost se ne može vratiti.

Kako kod stvaranja indeksa Lucene koristi model vektorskog prostora za

pretraživanje, kod stvaranja instance razreda Field možemo, pomoću konstanti,

Page 19: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

15

specificirati i način na koji se vektori riječi (engl. Term Vector) računaju, točnije

možemo specificirati što sve ulazi u njihov izračun. Svako polje (Field) ima

vlastiti vektor riječi koji sadrži određenu listu pojmova teksta unutar polja. Svaki

vektor pojmova sadrži identifikacijski broj dokumenta koji se indeksira i izraze,

odnosno tokene koji su nastali postupkom analize. Za svaki token vektor riječi

može sadržavati poziciju u dokumentu, udaljenost od početka dokumenta (engl.

offset) i broj ponavljanja same riječi u dokumentu. Navođenje podataka koje će

sadržavati vektor riječi za svaki token određuje se konstantama razreda Field

navedenih unutar konstruktora.

Field.TermVector.YES

Konstanta koja specificira pamćenje tokena unutar vektora pojmova te

spremanje informacije o broju ponavljanja riječi u dokumentu. Pozicija riječi

i udaljenost od početka dokumenta se ne pamte.

Field.TermVector.WITH_POSITIONS

Konstanta koja specificira pamćenje tokena unutar vektora pojmova te

spremanje informacije o broju ponavljanja riječi u dokumentu i poziciji riječi

unutar dokumenta. Udaljenost od početka dokumenta se ne pamti.

Field.TermVector.WITH_OFFSETS

Konstanta koja specificira pamćenje tokena unutar vektora pojmova te

spremanje informacije o broju ponavljanja riječi u dokumentu i udaljenosti

od početka dokumenta. Pozicija riječi se ne pamti.

Field.TermVector.WITH_POSITIONS_OFFSETS

Konstanta koja specificira pamćenje tokena unutar vektora pojmova te

spremanje informacije o broju ponavljanja riječi u dokumentu, udaljenosti od

početka dokumenta i poziciji riječi unutar dokumenta.

Field.TermVector.NO

Konstanta koja određuje da se ne zapisuje niti jedna informacija unutar

vektora pojmova.

Page 20: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

16

2.2.2 Postupak analize dokumenta

Analiza dokumenta je postupak kojim se tekstualni sadržaj dokumenta rastavlja

na osnovne izraze korištene kod indeksiranja, odnosno tokene. Tokeni dobiveni

postupkom analize dokumenta se koriste prilikom pretraživanja teksta kako bi se

odredilo odgovara li dokument ključnim riječima po kojima se vrši pretraživanje.

Analizator vrši analizu dokumenta izdvajanjem riječi iz teksta, izbacivanjem

interpunkcijskih znakova, brisanjem naglasaka s pojedinih znakova, izbacivanjem

zaustavnih riječi (engl. stopwords, semantički siromašne riječi poput zamjenica,

prijedloga ili veznika) te reduciranjem riječi na korijenski oblik. Tokeni, posebna

struktura podataka dobivena procesom analize, u kombinaciji s imenom polja

(razred Field) dokumenta u kojem se nalaze čine specifičan izraz (engl. term).

Postupak analize odvija se prilikom indeksiranja i pretraživanja dokumenta.

Razdvajanje teksta na tokene je različito od jedne vrste analizatora do druge.

Najčešće korišteni analizatori koje koristi Lucene su:

WhitespaceAnalyzer

Vrsta analizatora koji razdvaja tekst na tokene na temelju razmaka unutar

teksta. Također, ne pretvaraju se sva slova u dokumentu u mala slova

tijekom procesa analize.

SimpleAnalyzer

Vrsta analizatora koji razdvaja tekst na tokene na temelju znakova koji nisu

slova te se tekst svakog tokena prebacuje u mala slova. Tim postupkom se

brojevi izbacuju iz teksta.

StopAnaylzer

Analizator koji na isti način razdvaja tekst kao i SimpleAnalyzer samo

što izbacuje zaustavne riječi (engl. stopwords) iz teksta (zamjenice,

prijedloge, veznike itd.).

StandardAnalyzer

StandardAnalyzer je najsofisticiraniji analizator koji Lucene posjeduje.

Posjeduje određenu logiku pomoću koje identificira specifične tokene poput

Page 21: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

17

imena različitih kompanija ili adresa elektroničke pošte. Također pretvara

tekst svakog tokena u mala slova, briše iz dokumenta zaustavne riječi

(engl. stopwords) i interpunkcijske znakove.

Lucene ne prikazuje proces analize dokumenta korisniku. Token se dodaje u

indeks što prikazuje i slika 2.3.

Slika 2.3 Proces analize [8]

Polja Field 1 i Field 2 su podvrgnuta procesu analize te se stvoreni tokeni zapisuju

u indeks dok polje Field 3 ne prolazi proces analize već se cjelokupna vrijednost

polja indeksira kao pojedinačan token (Slika 2.3).

Kod procesa pretraživanja također se provodi proces analize teksta kojeg čine

ključne riječi prema kojima se vrši pretraživanje. Razred QueryParser koristi

Page 22: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

18

analizator kako bi ključne riječi preveo u specifične strukture podataka koje se

koriste prilikom pretraživanja dokumenta.

Token je osnovna struktura podataka koja je stvorena procesom analize

dokumenta. Analiza dokumenata stvara skup tokena za čiji prikaz i pohranu se

brine razred TokenStream. Primjer rezultata procesa analize teksta „the quick

brown fox“ prikazuje slika 2.4.

Slika 2.4 Primjer tokena nastalih procesom analize [8]

Svaki token predstavlja pojedinačnu riječ teksta. Uz tekst riječi koju predstavlja,

token još sadrži i početak i kraj pozicije riječi u dokumentu (engl. offsets) te

poziciju riječi u dokumentu.

2.2.3 Direktorij spremanja stvorenih indeksa

Apstraktni razred Directory predstavlja programsko sučelje (engl.

Application Programming Interface) koje Lucene koristi za zapis sadržaja u

datoteke na tvrdom disku (engl. Hard Disk). Razredi IndexReader i

IndexWritter koriste programsko sučelje koje nudi Directory. IndexReader

ga koristi kako bi došao do sadržaja nastalog procesom indeksiranja dok ga

IndexWritter koristi za zapis novostvorenih indeksa. Postoji više vrsta

direktorija za pohranu indeksa: SimpleFSDirectory, NIOFSDirectory,

MMAPDirectory, RAMDirectory i FileSwitchDirectory. Najveća razlika

između RAMDirectory-a i ostalih je u tome što su kod RAMDirectory-a indeksi

Page 23: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

19

pohranjeni u radnu memoriju, a kod ostalih inačica direktorija na tvrdome disku.

Takvim načinom pohrane podataka RAMDirectory ima puno brži pristup

indeksima kod procesa pretraživanja. Ako je potrebno proučavanje i prikaz

sadržaja indeksa (koristeći razne Javine programske knjižnice) nakon izvršavanja

programa onda RAMDirectory nije pogodan zbog gubitka podataka u indeksima.

2.3 Proces pretraživanja

Proces pretraživanja ulazi u drugu fazu cjelokupnog koncepta efikasnog

pretraživanja teksta. Nakon što je tekstualni sadržaj dokumenata indeksiran,

pretraga određenog pojma na temelju stvorenih indeksa zaprima zamjetnu brzinu

izvođenja. Središnji razred Javine programske knjižnice Apache Lucene za

pretragu po indeksima je IndexSearcher te on sadrži metode za pretraživanje.

Treba uzeti u obzir da je tekstualni sadržaj dokumenata koji se pretražuju već

prošao proces analize te su prisutne neke promjene u odnosu na originalni

dokument (izbačene su zaustavne riječi, riječi su prepisane u mala slova itd.).

Proces analize je potreban i u fazi pretraživanja. Ključne riječi prema kojima se

vrši pretraživanje moraju biti prevedene u oblik pogodan za proces pretraživanja,

taj oblik opisan je razredom Query. Prilikom parsiranja unesenih ključnih riječi

glavnu ulogu ima razred QueryParser čije akcije rezultiraju oblikovanjem upita

(razred Query) koji se dalje koristi za efikasno pretraživanje teksta.

QueryParser mora koristiti analizator kako bi razdvojio unesene ključne riječi na

posebne jedinice koje se koriste u daljnjem procesu pretraživanja. Vrste

analizatora koje može koristiti QueryParser su jednake onima koji se koriste

prilikom procesa analize kod indeksiranja teksta (opisano u poglavlju 2.2.2).

Page 24: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

20

Slika 2.5 Proces stvaranja upita za pretraživanje [8]

Prilikom stvaranja razreda IndexSearcher potrebno je doći do indeksa stvorenih

tijekom procesa indeksiranja. Kako bi došli do tih indeksa potrebni su nam razredi

Directory i IndexReader. Metoda search razreda IndexSearcher vraća

objekt tipa TopDocs koji predstavlja rezultat pretraživanja.

Slika 2.6 Prikaz odnosa između spomenutih razreda kod pretraživanja [8]

Page 25: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

21

2.3.1 Izračun koeficijenata sličnosti prilikom pretraživanja

Prilikom svakog izvođenja procesa pretraživanja Lucene računa koeficijente

sličnosti dokumenata i unesenih ključnih riječi prema kojima se vrši pretraživanje.

Izračunati koeficijent određuje koliko je upit sličan dokumentu koji se pretražuje,

veći koeficijent sličnosti predstavlja veću sličnost dokumenta i upita. Računanje

koeficijenta sličnosti kod Lucenea bazirano je na TF - IDF (engl. term frequency –

inverse document frequency) vektorima. TF komponenta predstavlja broj

pojavljivanja ključne riječi u dokumentu koji se pretražuje, a IDF komponenta

predstavlja mjeru koja govori koliko je ključna riječ jedinstvena, točnije, koliko je

riječ važna za semantiku dokumenta. Riječ je manje važna za semantiku

dokumenta što se češće pojavljuje u drugim dokumentima. Izraz (1) prikazuje

formulu koju Lucene koristi za određivanje koeficijenata sličnosti između

dokumenta i upita.

∑ (𝑡𝑓(𝑡 𝑖𝑛 𝑑) × 𝑖𝑑𝑓(𝑡)2 × 𝑏𝑜𝑜𝑠𝑡(𝑡. 𝑓𝑖𝑒𝑙𝑑 𝑖𝑛 𝑑) × 𝑙𝑒𝑛𝑔𝑡ℎ𝑁𝑜𝑟𝑚(𝑡. 𝑓𝑖𝑒𝑙𝑑 𝑖𝑛 𝑑))𝑡 𝑖𝑛 𝑞

× 𝑐𝑜𝑜𝑟𝑑(𝑞, 𝑑) × 𝑞𝑢𝑒𝑟𝑦𝑁𝑜𝑟𝑚(𝑞) (1)

𝑡𝑓(𝑡 𝑖𝑛 𝑑) – broj pojavljivanja ključne riječi u dokumentu

𝑖𝑑𝑓(𝑡) – komponenta koja govori koliko je ključna riječ jedinstvena. Riječi

koje se često ponavljaju imaju nizak parametar IDF, dok riječi koje se rijetko

pojavljuju imaju visok parametar IDF.

𝑏𝑜𝑜𝑠𝑡(𝑡. 𝑓𝑖𝑒𝑙𝑑 𝑖𝑛 𝑑) - parametar povećanja važnosti određenih polja u

dokumentu.

𝑙𝑒𝑛𝑔𝑡ℎ𝑁𝑜𝑟𝑚(𝑡. 𝑓𝑖𝑒𝑙𝑑 𝑖𝑛 𝑑) – normalizacijska vrijednost (engl. Normalization

value) polja dokumenta koja je izračunata tijekom procesa indeksiranja na

temelju broja riječi u polju.

𝑐𝑜𝑜𝑟𝑑(𝑞, 𝑑) – koordinacijski faktor (engl. Coordinate factor) baziran na broju

riječi upita koje se pojavljuju u dokumentu. Onaj dokument koji sadrži veći

broj riječi upita imat će veći koordinacijski faktor.

𝑞𝑢𝑒𝑟𝑦𝑁𝑜𝑟𝑚(𝑞) - normalizacijska vrijednost (engl. Normalization value)

upita.

𝑡 𝑖𝑛 𝑞 – riječ upita za koju se računa koeficijent sličnosti.

Page 26: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

22

Koeficijent sličnosti je realan broj koji je veći ili jednak 0.0. Luceneov osnovni način

rada vraća dokumente sortirane silazno prema koeficijentu sličnosti (od najvećeg

koeficijenta do najmanjeg). Faktori povećanja važnosti određenih polja

dokumenata (engl. Boost factors) su uključeni u formulu izračuna koeficijenta

sličnosti kako bi polja dokumenta s većom važnosti imala veći utjecaj na izračun

koeficijenta sličnosti. Ako nije zabilježen nikakav faktor povećanja važnosti

određenih polja dokumenta, faktor 𝑏𝑜𝑜𝑠𝑡(𝑡. 𝑓𝑖𝑒𝑙𝑑 𝑖𝑛 𝑑) jednadžbe izračuna

koeficijenta sličnosti ima vrijednost 1.0. Svrha normalizacijske vrijednosti je

pridruživanje veće važnosti onim dokumentima za koje je riječ upita relevantnija.

Ako imamo dva dokumenta (sa različitim brojem riječi) za koje se provjerava

sličnost na temelju ključne riječi upita i oba dokumenta sadrže tu ključnu riječ,

veću normalizacijsku vrijednost će imati onaj dokument sa manjim brojem riječi jer

je za njega ta riječ „važnija“. Također, moguće je i povećanje važnosti specifičnih

dokumenata u odnosu na druge. U tome slučaju se svakom polju dokumenta

povećava važnost za Boost factor dokumenta.

3. Razvijena aplikacija

Razvijena aplikacija omogućuje personalizirano filtriranje poruka s

društvene mreže Twitter. Poruke koje se dohvaćaju s Twittera filtriraju se na

temelju ključnih riječi koje korisnik unosi prilikom pokretanja aplikacije. Za

dohvaćanje toka s društvene mreže Twitter korištena je Javina programska

knjižnica Twitter4j. Prilikom svakog dohvata toka podataka (javnih poruka) uzima

se zadnjih 100 poruka objavljenih od trenutka poziva programa. Dohvat toka može

ići u prošlost par minuta (ako se dohvaćaju neke javne poruke koje sadrže

poznate ključne riječi poput „New York“) jer je vrlo velika frekvencija objavljivanja

takvih javnih poruka. Također, dohvaćanje toka može ići i puno više u prošlost ako

se javne poruke filtriraju po ne toliko poznatim ključnim riječima. Dohvaćene javne

poruke se spremaju u kolekciju i parsiraju na korisniku pregledniji način (sam

prikaz parsirane javne poruke vidljiv je u poglavlju 3.3 Primjer rada aplikacije).

Page 27: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

23

Nakon dohvata i parsiranja javnih poruka slijedi filtriranje poruka koje najviše

odgovaraju korisnikovom unosu, tu glavnu ulogu ima Javina programska knjižnica

Apache Lucene. Kolekcija dohvaćenih javnih poruka prvo se indeksira te potom

pretražuje i izdvaja se onih 10 javnih poruka (iz kolekcije) koje imaju najveći

koeficijent sličnosti sa samim upitom (ključne riječi koje je korisnik unio kako bi

filtrirao poruke koje će mu biti isporučene). Izdvojene poruke se isporučuju

korisniku u njegov sandučić elektroničke pošte. Dohvaćanje tweetova se odvija

periodički tijekom definiranog intervala (to vrijeme je moguće odrediti po izboru).

Kako bi se smanjila redundancija poslanih poruka, odnosno kako bi se spriječilo

slanje već poslanih javnih poruka, poslane poruke se pamte.

Princip rada aplikacije je sljedeći. Dohvaća se 100 javnih poruka s

društvene mreže Twitter te se poruke dodaju u kolekciju svih tweetova,

računanjem koeficijenta sličnosti izabire se 10 tweetova koji najbolje odgovaraju

korisnikovom unosu. Svaki tweet se šalje korisniku u sandučić elektroničke pošte

ako već nije bio poslan. Nakon definiranog vremenskog perioda dohvaća se novih

100 tweetova. Tweetovi se dodaju u kolekciju svih tweetova te se iz cjelokupne

(povećane) kolekcije dohvaća 10 tweetova koji najbolje odgovaraju korisnikovom

unosu. Za svaki od dobivenih 10 tweetova gleda se je li već poslan korisniku u

sandučić elektroničke pošte ili nije. Ako nije poslan šalje se, u suprotnom se ne

šalje. Ako je vremenski period između dohvaćanja tweetova kratak (manji od

minute) može se dogoditi da korisnik ne dobije nikakvu poruku elektroničke pošte

zbog česte frekvencije istih (već poslanih) tweetova koji prema izračunu spadaju u

najsličnije korisnikovom upitu. Nakon određenog broja dohvata tweetova (može

biti nakon pola dana, cijelog dana ili nekog drugog perioda) kolekcija tweetova se

briše i postupak počinje ispočetka.

3.1 Implementirana aplikacija

Slika 3.1 prikazuje Dijagram razreda, dijagram koji spada u statičke UML

dijagrame (ne razmatra se vremenska komponenta). Dijagramom je prikazana

čitava struktura sustava.

Page 28: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

24

Slika 3.1 Dijagram razreda

Sa slike vidimo da se aplikacija sastoji od razreda: Indexer, TwitterClass,

Searcher, LuceneConstants, SMTPAuthenticator i Email.

3.1.1 Razred TwitterClass

TwitterClass je razred koji predstavlja „mozak“ aplikacije. Dohvaća

tweetove, pokreće procese indeksiranja, pretraživanja i slanja poruka elektroničke

pošte. Posjeduje privatne članske varijable kako bi pamtio direktorij čuvanja

indeksa, direktorij čuvanja kolekcije javnih poruka koje se indeksiraju, unesene

ključne riječi prema kojima se vrši pretraživanje, broj poslanih poruka elektroničke

pošte i kolekciju poslanih tweetova. Također, TwitterClass posjeduje logiku

periodičkog pokretanja rada programa. Za periodičko pokretanje programa koristi

razred Timer i njegovu metodu run. Slika 3.2 prikazuje inicijalizaciju Timer-a.

Slika 3.2 Inicijalizacija Timera

Page 29: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

25

Metoda schedule prima vremenske parametre u milisekundama, točnije isječak

koda sa slike 3.2 specificira da će se program izvoditi svakih 30 sekundi. Ako

želimo da se program izvodi svakih 30 minuta umjesto 30000 ćemo napisati 1 800

000.

TwitterClass implementira postupak autentifikacije kako bi se omogućilo

dohvaćanje javnih poruka sa Twittera (postupak autentifikacije je detaljno

objašnjen u poglavlju 3.4 Upute za instalaciju).

Slika 3.3 predstavlja vrlo jednostavan isječak koda za dohvaćanje javnih poruka s

društvene mreže Twitter.

Slika 3.3 Dohvaćanje javnih poruka

Query je razred koji predstavlja upit prema kojemu se filtriraju javne poruke

Twittera. Metoda setCount specificira broj tweetova koje ćemo dobiti pozivom

metode search razreda Twitter. Također, ovaj razreda priprema direktorij s

kolekcijom javnih poruka koje će alat Lucene koristiti za indeksiranje i

pretraživanje teksta.

3.1.2 Razred Indexer

Razred Indexer, kao što njegovo ime govori, ima glavnu ulogu u indeksiranju

teksta koji se pretražuje, za aplikaciju to predstavlja niz dokumenata koji čine

javne poruke društvene mreže Twitter. Stvara posebnu strukturu podataka, indeks,

Page 30: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

26

korištenu kod efikasnog pretraživanja teksta pomoću Lucenea. Razredi Javine

programske knjižnice Apache Lucene korišteni kod indeksiranja su:

IndexWriter

Razred koji predstavlja centralnu komponentu procesa indeksiranja. Služi

sa stvaranje novog indeksa (ili otvaranja već postojećeg) te za dodavanje

dokumenata u indeks. Za zapis novostvorenih indeksa na tvrdi disk (ili u

radnu memoriju ako je tako specificirano) koristi razred Directory.

Directory

Razred koji predstavlja programsko sučelje alata Lucene za zapis indeksa

unutar datoteka na tvrdom disku. Aplikacija koristi FSDirectory koji

zapisuje novostvorene indekse unutar datotečnog sustava. Navedena

inačica Directory-a se koristi kako bi mogli pregledati sadržaj direktorija

indeksa nakon završetka izvođenja programa (prikazano u poglavlju 3.3

Primjer rada aplikacije).

Analyzer

Prije samog procesa indeksiranja dokument mora proći kroz proces analize

(rastavljanja teksta na tokene). Unutar aplikacije korišten je

StandardAnalyzer.

Document

Razred koji predstavlja kolekciju polja (Field) koji izravno sadrže tekst koji

se indeksira.

Field

Razred unutar kojeg je izravno pohranjen sadržaj koji se indeksira.

Aplikacija koristi tri polja kod stvaranja indeksa: polje koje sadrži ime

datoteke, polje koje sadrži putanju do datoteke te polje koje sadrži sam

tekst koji se indeksira. Taj tekst predstavlja „čisti“ tekst javne poruke bez

korisničkog imena autora i poveznica sadržanih u javnoj poruci.

Page 31: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

27

Slika 3.4 Odnos razreda kod procesa indeksiranja [8]

3.1.3 Razred Searcher

Razred Searcher ima glavnu ulogu kod pretraživanja indeksa i

specificiranju koji dokument najbolje odgovara unesenim ključnim riječima. U

pozadini koristi vektorski model pretraživanja. Razredi Javine programske

knjižnice Apache Lucene korišteni kod pretraživanja su:

IndexSearcher

Centralna komponenta kod procesa pretraživanja (poput razreda

IndexWriter kod indeksiranja) koja omogućava izravan pristup indeksima

kod pretraživanja.

Query

Razred koji izravno predstavlja upit kojeg Lucene koristi za pretraživanje.

QueryParser

Razred koji služi za parsiranje unesenih ključnih riječi u oblik upita koji

koristi Lucene (Query)

TopDocs

Page 32: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

28

Razred koji predstavlja skup pokazivača na najbolje rangirane dokumente

prema izračunu koeficijenta sličnosti između upita i dokumenta. Za svaki

vraćeni dokument TopDocs sadrži identifikacijski broj dokumenta.

Slika 3.5 Isječak koda u kojem se vrši pretraživanje

Slika 3.5 prikazuje isječak koda u kojem se obavlja pretraživanje teksta na temelju

unesenih ključnih riječi (searchQuery). QueryParser koristi svoju metodu

parse kako bi parsirao upit u oblik kojeg koristi Lucene. Metoda search razreda

IndexSearcher obavlja pretraživanje, a kao parametre prima upit i broj najbolje

rangiranih dokumenata koji se vraćaju kao povratna vrijednost metode search.

3.1.4 Razred Email

Razred Email ima glavnu ulogu u slanju javnih poruka, koje najbolje

odgovaraju unesenim ključnim riječima, u korisnikov sandučić elektroničke pošte.

Za slanje poruka elektroničke pošte koristi se Javina programska knjižnica

javax.mail. Kako bi se poslala poruka mora se proći autentifikacija pošiljatelja, tu

ulogu obavlja razred SMTPAuthenticator koristeći metodu

getPasswordAuthentication (Slika 3.6) gdje se provjerava lozinka

(senderPassword) za danu adresu elektroničke pošte (senderEmail).

Slika 3.6 Autentifikacija pošiljatelja

Page 33: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

29

Za slanje poruka elektroničke pošte koristi se SMTP protokol (Simple Mail

Transfer Protocol), odnosno SMTP poslužitelj i njegova vrata 587, (Slika 3.7).

Slika 3.7 Inicijalizacija SMTP poslužitelja

Slika 3.8 prikazuje metodu koja je odgovorna sa slanje elektroničke pošte u

korisnikov sandučić elektroničke pošte

Slika 3.8 Slanje elektroničke pošte

Page 34: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

30

Za pohranu parametra elektroničke pošte koristi se razred Properties. Potrebno

je stvoriti novu sjednicu za što se brine razred Session i njegova metoda

getInstance. Poruka elektroničke pošte koja se šalje predstavljena je razredom

MimeMessage koji implementira apstraktne metode razreda Message i nudi

mogućnost definiranja vrste sadržaja koji se šalje elektroničkom poštom. Metoda

setText definira sadržaj poruke. Kao argumente prima sam tekst poruke i kodnu

stranicu koja se koristi (UTF-8). Kodnu stranicu je potrebno navesti kako bi se

mogli prikazati znakovi koji ne ulaze u osnovan skup ASCII znakova. Razred

InternetAddress predstavlja adresu elektroničke pošte s koje se šalje odnosno

prima poruka. Metodom setFrom određujemo adresu pošiljatelja dok metodom

addRecipient određujemo adresu primatelja. Kako bi poslali poruku

elektroničke pošte koristimo razred Transport (koji modelira transport poruke) i

njegovu statičku metodu send.

3.1.5 Razred AppConstants

Razred AppConstants predstavlja konstante korištene u aplikaciji. Korištene

konstante su:

CONTENTS – ime polja dokumenta koje izravno sadrži sadržaj za

indeksiranje

FILE_NAME – ime polja dokumenta koje sadrži ime datoteke koje se

indeksira

FILE_PATH - ime polja dokumenta koje sadrži putanju do indeksirane

datoteke

MAX_SEARCH – broj dokumenata koji se vraćaju metodom search razreda

IndexSearcher

Page 35: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

31

SENDER_EMAIL – adresa elektroničke pošte pošiljatelja

SENDER_PASSWORD – lozinka elektroničke pošte pošiljatelja

EMAIL_SMTP_SERVER – korišteni SMTP poslužitelj

EMAIL_SMTP_PORT – korištena vrata SMTP poslužitelja

DATA_DIR – direktorij za pohranu podataka koji će se indeksirati

INDEX_DIR – direktorij za pohranu indeksa

3.2 Funkcionalni zahtjevi sustava

Osnovna zadaća aplikacije je personalizirano filtriranje toka s društvene

mreže Twitter i isporuka javnih poruka korisniku u pretinac elektroničke pošte.

Koristi se alat Lucene kako bi se filtrirale one javne poruke koje najviše odgovaraju

korisnikovom unosu.

Kako bi se omogućilo dohvaćanje toka s društvene mreže Twitter potrebno

je proći autentifikacijski proces (Slika 3.9)

Page 36: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

32

Slika 3.9 Proces autentifikacije

Nakon što se uspostavila veza s Twitterom slijedi unos ključnih riječi i

dohvat javnih poruka društvene mreže Twitter koje sadrže te ključne riječi.

Page 37: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

33

Slika 3.10 Dohvat javnih poruka

Nakon dohvata javnih poruka potrebno je pomoću alata Lucene filtrirati 10

tweetova koji najbolje odgovaraju korisnikovom unosu, točnije pronalaze se oni

tweetovi za koje je izračunati koeficijent sličnosti s unosom korisnika najveći.

Page 38: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

34

Slika 3.11 Filtriranje javnih poruka

Zadnji korak aplikacije je slanje elektroničke pošte korisniku.

Slika 3.12 Slanje elektroničke pošte

Page 39: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

35

3.3 Primjer rada aplikacije

Kako bi se omogućio rad aplikacije potrebno je projekt uvesti u Eclipse ili

NetBeans (platforme za pokretanje koda pisanog u programskom jeziku Java).

Nakon pokretanja programa u konzoli se nalazi ispis o broju indeksiranih datoteka

(svaka javna poruka spremljena je u jednu datoteku), broju datoteka koje u samom

sadržaju javne poruke sadrže ključne riječi (broj pronađenih datoteka), vrijeme

potrebno za rad alata Lucene (za indeksiranje i pretraživanje) te informacija o

uspješnosti poslane elektroničke pošte (Slika 3.13).

Slika 3.13 Konzolni ispis

Sa slike 3.13 vidimo da broj datoteka koje se indeksiraju nije jednak broju datoteka

koje je Lucene pronašao nakon procesa pretraživanja. Razlog tome leži u

parsiranju javne poruke i izdvajanju sadržaja javne poruke koji će biti indeksiran.

Slika 3.14 Primjer parsirane javne poruke (tweet)

Parsirana poruka sadrži vrijeme objave poruke, korisničko ime autora poruke,

poveznicu koju sadrži javna poruka te sam tekst javne poruke. Indeksiranje i

pretraživanje se vrši isključivo po tekstu javne poruke (u to ne spada korisničko

ime autora poruke ili naziv poveznice poruke). Metoda search razreda Twitter

radi pretraživanja prema unesenim ključnim riječima tako da pretražuje cjelokupan

sadržaj javne poruke (u što ulazi i korisničko ime autora i naziv poveznice koju

Page 40: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

36

javna poruka sadrži). Zbog te razlike između načina pretraživanja metode search

razreda Twitter i implementiranog načina pretraživanja alata Lucene broj javnih

poruka koje se indeksiraju i broj javnih poruka koje su vraćene procesom

pretraživanja nije jednak.

Slika 3.15 Primjer parsirane javne poruke koja ne sadrži poveznicu

Nakon što su dohvaćene javne poruke parsirane i filtrirane pomoću računanja

koeficijenta sličnosti alata Lucene šalje se poruka elektroničke pošte.

Slika 3.16 Primjer primljene elektroničke pošte

Ako želimo vidjeti sadržaj vektora pojmova ili izračunate koeficijente sličnosti

dokumenata koji se pretražuju i upita potreban je alat luke [9]. Potrebno je skinuti

JAR datoteku te ju pokrenuti iz komandne linije (Slika 3.17).

Page 41: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

37

Slika 3.17 Pokretanje JAR datoteke

Nakon pokretanja alata Luke potrebno je specificirati putanju do direktorija s

indeksima (Slika 3.18).

Slika 3.18 Određivanje putanje do direktorija s indeksima

Alat Luke možemo koristiti za pretraživanje dokumenata (istih dokumenata koji se

pretražuju u aplikaciji) uz unos ključnih riječi. Prije pretraživanja možemo

specificirati vrstu analizatora (Slika 3.19).

Page 42: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

38

Slika 3.19 Izbor korištenog analizatora

Unosom ključnih riječi (New York) te pritiskom na gumb Search (Slika 3.19)

prikazuje se lista datoteka s najboljim koeficijentima sličnosti (Slika 3.20).

Slika 3.20 Rezultat pretraživanja

Za svaki dokument koji je ušao u skup najbolje rangiranih dokumenata prikazuje

se vrijednost koeficijenta sličnosti, identifikacijski broj dokumenta, sadržaj

dokumenta te ime datoteke i putanja do datoteke. Sadržaj dokumenta

(contents), ime datoteke (filename) te putanja do datoteke (filepath)

Page 43: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

39

predstavljaju polja dokumenta razred Field. Za svaki dokument je moguće vidjeti

sadržaj i vektor pojmova (Slika 3.21 i 3.22).

Slika 3.21 Osnovne informacije o dokumentu

Slika 3.22 Vektor pojmova za odabrani dokument

Page 44: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

40

3.4 Upute za instalaciju

Kako bi se aplikacija pokrenula na vlastitom računalu potrebno je napraviti

nekoliko jednostavnih koraka:

1. Instalacija platforme Eclipse ili NetBeans

2. Uvođenje cjelokupnog projekta u jednu od navedenih platformi

3. Napraviti korisnički račun na društvenoj mreži Twitter

4. Pokrenuti Application Management koji se nalazi na sljedećoj poveznici:

https://apps.twitter.com/

5. Pritisnuti na gumb Create New App (Slika 3.23)

Slika 3.23 Application Management

Page 45: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

41

6. Popuniti potrebne informacije (Slika 3.24).

Slika 3.24 Ispuna potrebnih informacija

7. Pronaći informacije po pitanju autentifikacije (kartica Keys and Access

Tokens): Consumer Key, Consumer Secret, Access Token, Access Token

Secret. Pronađene informacije je potrebno dodati u sam kod

(autentifikacijske vrijednosti nisu prikazane na slici, Slika 3.25).

Slika 3.25 Unos autentifikacijskih vrijednosti

Page 46: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

42

8. Specificiranje putanje do direktorija s datotekama koje se pretražuju te do

direktorija koji sadrži indekse. Putanja se određuje postavljanjem vrijednosti

varijabli DATA_DIR i INDEX_DIR u razredu AppConstants (Slika 3.26).

Slika 3.26 Određivanje direktorija pohrane podataka i indeksa

9. Određivanje ključnih riječi i adrese elektroničke pošte primatelja u datoteci

uvjeti.txt (Slika 3.27).

Slika 3.27 Određivanje ključnih riječi i adrese elektroničke pošte

10. Skidanje alata Luke s poveznice:

https://github.com/DmitryKey/luke/releases

Page 47: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

43

Zaključak

Društvene mreže su postale svakodnevnost ljudskih života kako na

društvenoj tako i na poslovnoj sceni. Brojni portali i programi u svom radu se

oslanjaju na prikaz obavijesti i događanja diljem svijeta koristeći društvene mreže.

Razlog tome leži u velikoj popularnosti društvenih mreža te u cjenovno jeftinoj

platformi za prikaz obavijesti što i društvena mreža predstavlja. Kao posljedica

velike popularnosti društvenih mreža, brojni programski jezici nude laku integraciju

programskog sučelja koje omogućava obavljanje osnovnih funkcija društvenih

mreža iz samog koda programa bez korištenja ikakvog grafičkog sučelja. Mnoge

novorazvijene aplikacije imaju poveznicu s nekom od najpoznatijih društvenih

mreža zbog jednostavnosti implementacije osnovnih funkcionalnosti unutar

programske podrške aplikacije.

Današnje vrijeme karakterizira „eksplozija“ količine podataka koji se mogu

naći na internetu. Kao posljedica toga nastali su brojni alati za efikasno

pretraživanje velike količine teksta (među koje ubrajamo i Lucene). Svi alati za

pretraživanje teksta vide osnovni cilj u brzom lociranju određene informacije unutar

velike količine podataka. Algoritmi efikasnog pretraživanja (na nižoj razini

apstrakcije) mogu se naći i u našim računalima prilikom lociranja datoteka unutar

datotečnog sustava. Prilikom implementacije vlastitog algoritma za efikasno

pretraživanje najviše se mora paziti na vremensku komponentu izvršavanja upita

jer je korisnicima sustava najbitnije koliko će čekati da dobiju traženu informaciju.

Lucene je jedan od najučinkovitijih alata za pretraživanje teksta. U svom radu

(radi efikasnijeg pretraživanja) koristi indekse čime postiže zamjetne brzine

dohvata informacija. Važno je napomenuti da Lucene ne predstavlja gotovu

aplikaciju koju ćemo samo pokrenuti bez napisane ijedne linije programskog koda

već Lucene nudi niz razreda i metoda koji se jednostavno integriraju u većinu

današnjih aplikacija. Zbog svoje efikasnosti prilikom pretraživanja velikih količina

podataka i jednostavnosti integracije unutar programske podrške, Lucene postaje

jedan od poželjnijih alata za pretraživanje velikih količina podataka.

Page 48: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

44

Literatura

1. About Twitter company, https://about.twitter.com/company

2. Number of Twitter employees from 2008 to 2015,

http://www.statista.com/statistics/272140/employees-of-twitter/

3. Twitter History, https://en.wikipedia.org/wiki/Twitter#History

4. Twitter Basic: Why 140 characters and how to write more,

http://www.adweek.com/socialtimes/twitter-basics-why-140-characters-and-

how-to-write-more/442608

5. Using hashtags on Twitter, https://support.twitter.com/articles/49309

6. Twitter4j code examples, http://twitter4j.org/en/code-examples.html

7. What is term vector in Lucene, http://makble.com/what-is-term-vector-in-lucene

8. Lucene in Action, Second Edition, https://www.manning.com/books/lucene-

in-action-second-edition

9. Luke, https://github.com/DmitryKey/luke/releases

Page 49: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

45

Sažetak

Personalizirano filtriranje toka s društvene mreže Twitter

Lucene je jedan od najpoznatijih alata za pretraživanje teksta. Tijekom svog

rada koristi dva teorijska modela pretraživanja: čisti Boolean model (engl. Pure

Boolean model) i model vektorskog prostora (engl. Vector space model). Rad

Lucenea se može podijeliti u dva osnovna dijela: indeksiranje teksta i pretraživanje

koristeći stvorene indekse. Indeks je posebna struktura podataka koja omogućuje

brzo pretraživanje tekstualnog sadržaja dokumenata. Prije samog procesa

indeksiranja potrebno je obaviti analizu tekstualnog sadržaja dokumenta. Proces

analize je postupak razdvajanja teksta na posebne jedinice, tokene. Svaki token

predstavlja pojedinačnu riječ teksta. Uz tekst riječi koju predstavlja, token još

sadrži i početak i kraj pozicije riječi u dokumentu (engl. offsets) te poziciju riječi u

dokumentu. Prilikom pretraživanja računa se koeficijent sličnosti između upita

kojeg čine unesene ključne riječi i tekstualnog sadržaja dokumenata. Kao rezultat

procesa pretraživanja dobivaju se oni dokumenti koji su najsličniji ključnim riječima

upita.

Razvijena aplikacija omogućava personalizirano filtriranje toka s društvene

mreže Twitter, određivanje onih javnih poruka koje su najsličnije korisnikovom

unosu koristeći Javinu programsku knjižnicu Apache Lucene te isporuku filtriranih

javnih poruka u korisnikov sandučić elektroničke pošte. Program se poziva

periodički.

Ključne riječi: Lucene, Twitter, tweet, token, indeksiranje, pretraživanje teksta,

Luke, aplikacija za pretraživanje, koeficijent sličnosti, Java

Page 50: Personalizirano filtriranje toka s društvene mreže …1 Uvod Zadatak završnog rada jest implementirati programsku podršku koja će omogućiti korisniku personalizirano filtriranje

46

Summary

Personalized stream filtering from social network Twitter

Lucene is one of the most famous tools for text searching. During its work,

Lucene uses two theoretical models of searching: Pure Boolean model and Vector

space model. Lucene's work can be divided into two primary parts: text indexing

and searching text using created indexes. Index is a special data structure which

enables fast search of document's textual content. Before indexing process starts,

document's textual content must go through analysis process. Analysis process is

a special procedure of dividing text to special units i.e. tokens. Every token

represents one single text's word. Along with a word it represents, every token

contains char number where word starts and char number where the word ends in

document (offset).It also contains position of the word in a document. During the

searching process, similarity coefficient of query and document on which the

search process is applied is calculated. Documents which are the most similar to

the key words of the query are given as the search result.

Developed application enables personalized stream filtering from social

network Twitter, determination of tweets which have the biggest similarity to the

user's key words using search engine library Apache Lucene and delivering e-mail

(electronic mail) to the user. Program is running periodically.

Key words: Lucene, Twitter, tweet, token, indexing, text searching, Luke, search

application, similarity coefficient, Java