Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
ZAVRŠNI RAD br. 6201
Aplikacija za preporučivanje filmova za
operacijski sustav Android
Petar Jukica
Zagreb, lipanj 2019.
3
Sadržaj
1. Uvod ................................................................................................................ 4
2. Algoritmi preporučivanja .................................................................................. 5
2.1. Filtriranje temeljeno na suradnji korisnika ................................................. 5
2.2. Pearsonova korelacija ............................................................................... 6
2.2.1. Primjer dobivanja preporuke za određenog korisnika ......................... 8
2.3. Problem filtriranja utemeljenog na suradnji korisnika ................................ 9
2.3.1. Alternativno rješenje preporučivanja ................................................... 9
3. Primijenjene tehnologije .................................................................................. 9
3.1. XML ........................................................................................................... 9
3.2. JSON ....................................................................................................... 10
3.3. Android .................................................................................................... 10
3.3.1. Aktivnost ........................................................................................... 11
3.3.2. Životni ciklus aktivnosti ..................................................................... 11
3.3.3. Namjera ............................................................................................ 13
3.3.4. Android Manifest ............................................................................... 13
3.4. Grafičko korisničko sučelje ...................................................................... 14
3.4.1. Butterknife......................................................................................... 15
3.5. Komunikacija sa poslužiteljem................................................................. 16
3.5.1. Retrofit .............................................................................................. 16
4. Implementacija aplikacije za preporučivanje filmova ..................................... 17
4.1. Funkcionalnost i organizacija aplikacije ................................................... 17
4.2. Nefunkcionalni zahtjevi aplikacije ............................................................ 18
4.3. Izvedba korisničkog sučelja ..................................................................... 19
4.4. Izvor podataka ......................................................................................... 20
4.5. Spremanje podataka i njihova obrada ..................................................... 21
4.6. Firebase autentifikacija ............................................................................ 22
4.7. Firebase Realtime Database ................................................................... 22
4.8. Dohvaćanje i obrada korisničkih podataka .............................................. 26
4.9. Tijek izvođenja aplikacije ......................................................................... 28
4
5. Zaključak ....................................................................................................... 32
6. Literatura ....................................................................................................... 33
7. Sažetak ......................................................................................................... 35
1. Uvod
Konstantnim povećanjem količine informacija i sadržaja postaje sve
teže i teže pronaći korisniku potrebnu informaciju koja je u skladu s njegovim
preferencijama. Zbog toga mnogi servisi i firme koje pružaju uslugu
distribuiranja sadržaja poput knjiga, filmova, videa i glazbe razvijaju vlastite
sustave za preporučivanje čiji je cilj što efikasnije procijeniti korisnikove
interese te ga uključiti u zanimljive sadržaje. Sustavi za preporučivanje mogu
sadržavati jedan tip ulaznog podatka, poput knjige, ili više tipova ulaznih
podataka u kombinaciji, poput vijesti, knjiga i pretraživanih pojmova prema
kojima se definiraju korisnikovi interesi. Najpoznatiji servisi koji koriste
algoritme za preporučivanje su Google-ov YouTube, Amazon, Netflix i
LinkedIn. Implementacija takvih sustava je nužna za poboljšanje kvalitete
usluge i zbog toga se sve više razvijaju sustavi za preporučivanje. Glavna
ideja većine sustava je procjena interesa korisnika na temelju podataka o
korisnikovom prijašnjem ponašanju, odnosno korisnikovoj povijesti odluka o
ocjenjivanju, pregledavanju ili kupovini određenih sadržaja koje usluga pruža.
Jedan od najpoznatijih sustava za preporučivanje je filtriranje na temelju
suradnje korisnika koje je zasnovano na pretpostavki prema kojoj korisnici
koji se slagali u prošlosti će se vrlo vjerojatno slagati i u budućnosti. U ovome
završnom radu će biti prikazana implementacija algoritma za preporučivanje
utemeljena na korisničkim ocjenama filmova, a koristi pretpostavku suradnog
filtriranja. Završni rad je izveden u obliku aplikacije za operacijski sustav
Android. Glavni razlog korištenja Android platforme je velika raširenost
tehnologije, odnosno broja pametnih telefona, tableta, satova i televizija čiji
je temelj navedeni operacijski sustav. Uz navedeno bitno je dodati da se
Android platforma konstantno poboljšava te se na njoj sve više razvijaju radni
5
okviri i biblioteke koje olakšavaju razvoj aplikacija na platformi Android. Cilj
ovog završnog rada je izraditi Android aplikaciju za preporučivanje filmova
koja koristi sustav preporuka, a koji se temelji na algoritmu za procjenu
preferencija određenog korisnika.
2. Algoritmi preporučivanja
2.1. Filtriranje temeljeno na suradnji korisnika
Filtriranje temeljeno na suradnji korisnika je tehnika koju koriste sustavi za
preporučivanje. Tehnika koristi informacije o korisnicima kako bi povezala slične
korisnike na temelju korelacije njihovih preferencija. U ovom završnom radu je
korišteno filtriranje temeljeno na suradnji korisnika u svrhu povezivanja korisnika koji
imaju slične preferencije. Glavna ideja tehnike je korištenje informacija o korisnicima
kako bi povezali slične korisnike i preporučivali filmove na temelju sličnosti korisnika
koji su ih ocjenjivali. Pretpostavka tehnike je da će ljudi koji su dali približno iste
ocjene istim filmovima imati sličan ukus. Nakon pronalaženja sličnih korisnika
probiru se odlično ocijenjeni filmovi od jednog korisnika te se preporučuju njemu
sličnom korisniku koji te filmove još nije gledao. [1]
Prva zapreka je način računanja korelacije slučajnih varijabli X i Y koje
predstavljaju ocijenjene filmove od strane korisnika A odnosno korisnika B.
Potrebno je obraditi filmove iz X i Y koji se nalaze u oba skupa kako bi se mogla
procijeniti sličnost korisnika. Najpoznatije mjere pronalaženja sličnosti profila
korisnika:
Tehnika kosinusne sličnosti
Tehnike Pearsonove korelacije
Euklidska udaljenost
Tanimoto koeficijent
Log-vjerojatnost
Yuleova mjera Q
6
2.2. Pearsonova korelacija
Pearsonova korelacija je tehnika računanja sličnosti dvaju slučajnih varijabli
X i Y te se izvodi kao kvocijent kovarijance dvaju varijabli X i Y s umnoškom dvaju
standardnih devijacija navedenih varijabli. [2]
Formula Pearsonove korelacije:
𝑟𝑋𝑌 =𝑐𝑜𝑣(𝑋, 𝑌)
𝜎𝑋 ∗ 𝜎𝑌
𝑟𝑋𝑌 =𝑐𝑜𝑣(𝑋, 𝑌)
√ ∑ (𝑋𝑖 − �̿�𝑛𝑖=1 )2 ∗ √ ∑ (𝑌𝑖 − �̿�𝑛
𝑖=1 )2
𝑟𝑋𝑌 =∑ (𝑋𝑖 − �̿�)(𝑛
𝑖=1 (𝑌𝑖 − �̿�)
√ ∑ (𝑋𝑖 − �̿�𝑛𝑖=1 )2 ∗ √ ∑ (𝑌𝑖 − �̿�𝑛
𝑖=1 )2
U brojniku formule se nalazi kovarijanca dvaju varijabli kojom se određuje
sličnost dvaju slučajnih varijabli. Kovarijanca raste svakim parom vrijednosti za koji
vrijedi da su obije varijable u paru veće od srednjih vrijednosti slučajnih varijabli. U
nazivniku se nalazi umnožak standardnih devijacija dvaju slučajnih varijabli X i Y.
Za Pearsonovu korelaciju vrijedi: 𝑟𝑋𝑌 ∈ [−1 , 1]
Dobiveni koeficijent nam govori u kakvoj su korelaciji dva korisnika, odnosno u kojoj
su mjeri ocjene dvaju korisnika usklađene s obzirom na prosječnu vrijednost svih
danih ocjena. Možemo kategorizirati korelacije s obzirom na porast ocjene jednog
korisnika:
7
Pozitivna korelacija -> ocjena drugog korisnika je također u porastu pa vrijedi
𝑟𝑋𝑌 > 0
Negativna korelacija -> ocjena drugog korisnika opada 𝑟𝑋𝑌 < 0
Bez korelacije -> ocjena drugog korisnika se ne mijenja 𝑟𝑋𝑌 = 0
Slika 2.1 Grafovi s pripadajućim korelacijama [3]
Rubni slučajevi korelacije:
Kada vrijedi 𝑟𝑋𝑌 = 1, onda je najjača pozitivna linearna korelacija što znači
da se poklapaju vrijednosti ocjena oba korisnika. Takav slučaj je optimalan
jer pokazuje identičnu sličnost prilikom ocjenjivanja pa se može pretpostaviti
da korisnici imaju sličan ukus.
𝑟𝑋𝑌 = −1 označava najjaču negativnu linearnu korelaciju. Ekstreman slučaj
u kojemu su vrijednosti ocjena dvaju korisnika suprotne, odnosno trendovi
ocjenjivanja su u potpunoj suprotnosti.
Snagu korelacije možemo opisati:
𝑟𝑋𝑌 ∈ [0.00 , 0.19] -> „vrlo slaba korelacija“
𝑟𝑋𝑌 ∈ [0.20 , 0.39] -> „slaba korelacija“
𝑟𝑋𝑌 ∈ [0.40 , 0.59] -> „srednje jaka korelacija“
𝑟𝑋𝑌 ∈ [0.60 , 0.79] -> „jaka korelacija“
𝑟𝑋𝑌 ∈ [0.80 ,1.00] -> „vrlo jaka korelacija“
8
2.2.1. Primjer dobivanja preporuke za određenog korisnika
Imamo četiri korisnika A, B, C i D koji su ocijenili četiri ista filma svaki sa svojom
ocjenom. Od tih četiriju korisnika odaberu se dva korisnika te njihove ocjene
predstavljamo slučajnim varijablama X i Y. Zatim se ocijene filmova stavljaju u
Pearsonovu jednadžbu i dobivamo korelaciju dvaju korisnika.
Matrica
Korisnik –
Film
(ocjena)
Film Q Film W Film E Film R Film T
Korisnik A 4.5 8.4 7.4 6.4 -
Korisnik B 5.5 6.4 4.4 4.4 7.5
Korisnik C 4.7 8.7 7.9 6.8 8.4
Korisnik D 6.0 7.5 8.2 4.5 3.5
Recimo da se traži preporuka za korisnika A. Potrebno je naći korelaciju
korisnika A s ostalim korisnicima te izabrati onoga s jakom korelacijom.
Uvrštavanjem u Pearsonovu formulu dobivamo sljedeće rezultate.
𝑟𝐴𝐵 0.186869
𝑟𝐴𝐶 0.997976
𝑟𝐴𝐷 0.559120
Iz tablice se može vidjeti da su najsličniji korisnici A i C jer je 𝑟𝐴𝐶 veći od svih
ostalih koeficijenata korelacije te pripada kategoriji „jake korelacije“. Zbog
izračunate korelacije možemo pretpostaviti da je film T dobra preporuka za korisnika
A koji ga još nije pogledao.
9
2.3. Problem filtriranja utemeljenog na suradnji korisnika
Glavni problem kod filtriranja utemeljenog na suradnji korisnika je nužnost
postojanja informacija po kojima bi sustav mogao preporučivati. Ako sustav nema
dovoljno informacija za izradu preporuke onda se mora naći privremeno alternativno
rješenje koje će se iskoristiti u početku ili u ekstremnim slučajevima. Alternativno
rješenje preporučivanja se koristi kada ne postoji korisnik u bazi podataka koji je u
odnosu „jake korelacije“ ili „vrlo jake korelacije“, s obzirom na korisnika za kojeg se
traži preporuka. Nepostojanje sličnog korisnika može biti posljedica manjka
korisnika u bazi podataka ili manjka ocijenjenih filmova postojećih korisnika u bazi
podataka.
2.3.1. Alternativno rješenje preporučivanja
Manjak informacija o korisnicima u bazi podataka možemo razriješiti upitom
korisnika o njegovim/njenim najdražim žanrovima. Znanje najdražih žanrova
korisnika nam omogućuje pretragu baze podataka TMDb s obzirom na ocjenu i žanr
što nam omogućuje dohvat filmova koji bi mogli biti po korisnikovom ukusu.
Informaciju o omiljenim žanrovima korisnik daje pri izradi vlastitog korisničkog
računa.
3. Primijenjene tehnologije
3.1. XML
XML je oznaka za proširivi jezik za označavanje podataka i dokumenata
(engl. EXtensible Markup Language) čija je svrha čitljivost i razumijevanje od
strane računala i korisnika. Sličan je HTML jeziku koji je isto deklarativan jezik,
10
ali XML ne sadrži unaprijed definirane elemente, već se moraju odrediti konkretni
nazivi elemenata i njihova struktura. Prilikom razvijanja aplikacije za operacijski
sustav Android se XML koristi za različite svrhe, od kojih su glavne definiranje
izgleda korisničkog sučelja i uređivanje i pohranjivanje važnih informacija koje
se nalaze u Android Manifest datoteci. Korisničko sučelje se određuje
stvaranjem i spremanjem XML datoteka s opisom rasporeda elemenata unutar
„layout“ mape izvornog koda, dok ostale datoteke navedenog formata koriste za
opisivanje bitnih informacija, poput „strings.xml“ unutar kojeg se definiraju nizovi
znakova koji se koriste prilikom izrade korisničkog sučelja.
3.2. JSON
JavaScript Object Notation, poznatiji kao JSON je format koji se koristi za
pretvorbu i slanje podataka putem internetske veze. Puno jednostavniji i čitljiviji
format u odnosu na XML, primarno zbog svoje strukture koja se sastoji od parova
imena sa vrijednostima. JSON format se koristi za opisivanje hijerarhije podataka te
ga je lakše sintaksno analizirati i pretvoriti u objekt. Zato se sve više koristi u
komunikaciji između poslužitelja i web aplikacije, tako je i u slučaju ove aplikacije
koja komunicira s Firebase i TMDb poslužiteljem preko JSON formata. Prilikom
primanja podataka s navedenih poslužitelja se deserijalizira dobiveni podatak u
objekt pomoću Gson pretvarača.
3.3. Android
Android je operacijski sustav namijenjen mobilnim uređajima, te je trenutno
najzastupljeniji u mobilnoj industriji. Iako je inicijalno razvijen za pametne telefone i
tablete, ubrzo su razvijane dodatne inačice poput Android TV, Android Auto i Wear
OS koje služe kao operacijski sustavi za pametne televizore, automobile i pametne
satove. Sve inačice Android operacijskog sustava se temelje na jezgri Linux.
11
Ova aplikacija je namijenjena uređajima koji imaju minimalno 21. verziju Android-
ovog aplikacijskog programskog sučelja (engl.application programming interface).
Najstarija verzija operacijskog sustava Android koja podržava ovu aplikaciju je
Android 5.0, također poznat po kodnoj riječi „Lollipop“. Prema Google Dashboard
podacima ovu aplikaciju podržava 89.3% uređaja koji pokreću Android OS.[4]
3.3.1. Aktivnost
Aktivnost je razred čija instanca enkapsulira jedan ekran na koji se koncentrira
korisnik. Aktivnosti rade u interakciji s korisnikom te stvaraju prozor unutar kojeg se
postavljaju elementi korisničkog sučelja. Programski kod se pokreće pomoću više
Callback metoda koje se izvode u skladu s trenutnim stanjem aktivnosti unutar
životnog ciklusa (engl. Life cycle). Svaka aplikacija ima glavnu aktivnost s kojom
počinje rad. Prijelazi u sljedeće aktivnosti definirane su pomoću mehanizama
namjera tako da trenutna aktivnost pokreće sljedeću.[5]
3.3.2. Životni ciklus aktivnosti
Operacijski sustav upravlja aktivnostima pomoću stoga aktivnosti. Prilikom
pokretanja aktivnosti, ista se stavlja na vrh stoga i postaje trenutna aktivnost, dok je
prethodna aktivnost uvijek ispod trenutne u stogu i neće se ponovno pokrenuti dok
trenutna ne završi. Pojedina aktivnost se sastoji od četiriju aktivnosti:
Aktivnost se trenutno izvodi.
Aktivnost je vidljiva, ali je prekrivena s aktivnošću neke druge aplikacije.
Aktivnost je potpuno prekrivena drugom aktivnošću te onda operacijski
sustav može izbrisati prozor aktivnosti iz memorije jer je aktivnost izgubila
prioritet.
Aktivnost završava s radom ili se gasi njen proces te se tako uništava
aktivnost. U slučaju ponovnog pokretanja aktivnosti moraju se izvesti sve
operacije kao da je aktivnost pokrenuta prvi put.
12
Slika 3.1 Životni ciklus aktivnosti [6]
Prilikom pokretanja aktivnosti se pokreću redom metode: onCreate(), onStart() i
onResume. Unutar metode onCreate() odrađuje se povezivanje podataka te se
nakon nje pokreće metoda onStart() koja se poziva kada je aktivnost vidljiva
korisniku. Metoda onResume() se pokreće čim korisnik dobije mogućnost djelovati
na elemente korisničkog sučelja aktivnosti. Metode onStop() i onDestroy() se
pokreću kada aktivnost više nije vidljiva, odnosno kada se aktivnost uništava. U
slučaju da se korisnik želi vratiti na aktivnost, a da nije uništena, onda se pokreće
metoda onRestart(). [4]
13
3.3.3. Namjera
Namjera (engl. Intent) je razred koji opisuje operaciju koja će se izvesti, a
moguće je instancu razreda Intent koristiti za pokretanje aktivnosti, komuniciranje s
pozadinskim uslugama (engl. Service) i pokretanje vlastitih usluga te za slanje
poruka između aktivnosti. Postoje dva tipa namjera: implicitne i eksplicitne, pritom
su implicitne one namjere omogućavaju pozivanje bilo koje druge aplikacije
instalirane na uređaju u svrhu izvršavanja određene funkcionalnosti. Korisniku se
daje na izbor koju će aplikaciju pokrenuti za izvršenje funkcionalnosti. Eksplicitni tip
namjere poziva specifičnu komponentu operacijskog sustava Android poput
pokretanja sljedeće aktivnosti koja se treba izvoditi. Namjera se unutar ove
aplikacije koristi za pokretanje aktivnosti i slanje vrijednosti iz trenutne u sljedeću
aktivnost.
3.3.4. Android Manifest
Svaka Android aplikacija u korijenu svojeg izvornog koda sadrži
AndroidManifest.xml datoteku koja opisuje osnovne informacije o aplikaciji koje su
nužne operacijskom sustavu, alatima za izgradnju (engl. build) i Google Play-u.
Android Manifest datoteka mora sadržavati:
Paket (engl. package) u kojemu se nalazi izvorni kod na koji se referira
Android Manifest. Android alati koriste informaciju kako bi definirali lokaciju
važnih razreda i aktivnosti prilikom izgradnje projekta. Prilikom prevođenja i
izgradnje aplikacije vrijednost paketa se zamjenjuje s identifikacijskim
ključem aplikacije koji se koristi kao jedinstveni ključ za Google Play, kao i za
sam operacijski sustav na kojemu se aplikacija pokreće.
Komponente aplikacije poput aktivnosti, usluga, pružatelja usluga i primatelja
poruka. Svaka komponenta mora imati definirano ime razreda koji opisuje
navedenu komponentu. Uz navedeno, komponente mogu imati definirani
filtar namjere (engl. intent filter) čija je svrha definiranje kako komponenta
počinje s radom. Na primjer, početna glavna aktivnost ima zadani filtar
14
namjere kojim je zadano da se s tom aktivnošću započinje aplikacija,
odnosno prilikom pokretanja aplikacije korisnik tu aktivnost vidi prvu.
Ikonu i naziv po kojoj korisnik može raspoznati aplikaciju tijekom korištenja
mobilnog uređaja.
Osim navedenih osnovnih informacija koje mora sadržavati manifest, također je
moguće navesti dopuštenja i sklopovska ili programska svojstva koja su potrebna
za izvođenje aplikacije na uređaju. Kada je potrebno pristupiti korisničkim podacima
ili određenim sustavskim komponentama, onda se koriste dopuštenja (engl.
permissions) koja traže od korisnika pristup resursu. Svaki permission je definiran
jedinstvenom labelom. Od operacijskog sustava Android 6.0 korisnika se traži
dopuštenje za određeni resurs prilikom pokretanja aplikacije. Konkretno, u ovom
završnom radu se traži dopuštenje za pristup internetu. Sklopovska i programska
svojstva su potrebna u slučaju da aplikacija koristi određene komponente ili
funkcionalnost koju uređaj mora imati. Svojstva se navode labelom pod nazivom
„uses-feature“ te imenom konkretnog svojstva, i informacijom koja definira je li
funkcionalnost nužna. Takav mehanizam omogućava sprječavanje instalacije
aplikacija na uređaje s kojima nije kompatibilna, odnosno s uređajima koji nemaju
traženu funkcionalnost. Navedene informacije nisu nužne, ali su potrebne, ako
aplikacija koristi određeni resurs operacijskog sustava ili traži pristup korisničkim
podacima. [7]
3.4. Grafičko korisničko sučelje
Grafičko korisničko sučelje je pisano deklarativno u XML kodu pomoću kojeg se
definira raspored elemenata na ekranu prilikom pokretanja određene aktivnosti, ali
je moguće i dinamički mijenjati izgled grafičkog korisničkog sučelja pisanjem koda
u Javi kojim se dodaje novi objekt. Razredi „View“ i „ViewGroup“ služe za definiranje
korisničkog sučelja dodavanjem instanci navedenih razreda. [8]
Objekt razreda „View“ predstavlja osnovnu komponentu grafičkog sučelja s
kojom korisnik može međudjelovati te je odgovoran za iscrtavanje i pokretanje
funkcionalnosti s obzirom na određeni događaj (engl. event handling). Izgled ekrana
15
određene aktivnosti je određen stablastom strukturom objekata koji se postavljaju
unutar jednog ili više XML datoteka te je njima moguće manipulirati preko
jedinstvenog „android:id“ ključa koji omogućuje pokazivanje na točno određeni
element. Dodavanje „android:id“ vrijednosti je opcionalno, ali može biti nužno ako je
potrebno dodavati funkcionalnost određenom elementu. Moguće je definirati
dodatne atribute određenog elementa koji pobliže određuju poziciju elementa u
spremniku ili mijenjaju izgled samog elementa.[9]
Razred ViewGroup preuzima navedene funkcionalnosti od razreda View preko
nasljeđivanja. Pritom ViewGroup služi za definiranje spremnika (engl. container) i
rasporeda elemenata (engl. layout) unutar kojeg se mogu spremati dodatni
ViewGroup objekti ili widgeti koji su također podrazredi razreda View. Postoje
različiti spremnici elemenata koji se koriste ovisno o tome kakva se funkcionalnost
želi postići, ali je potrebno paziti na izvedbu layout-a jer može doći do sporijeg
izvođenja aplikacije u slučaju korištenja i kombiniranja elemenata koje ne
preporučuje dokumentacija. [10]
3.4.1. Butter Knife
Za podatkovno povezivanje (engl. Data binding) se koristi Butter Knife biblioteka
čija funkcionalnost zamjenjuje funkciju findViewById() i dodatni programski kod.
Butter Knife biblioteka služi primarno kao konvencija koja se koristi za podatkovno
povezivanje u programskom jeziku Java u svrhu boljeg i preglednijeg programskog
koda te predstavlja efikasan način mapiranja varijable i određenog elementa u XML
datoteci. Mapiranje je izvedeno pomoću vrijednosti „id“ pojedinog elementa koji se
povezuje s varijablom tipa razreda funkcionalnosti koja je sukladna elementu na koji
se veže. Korištenje Butter Knife biblioteke gubi na popularnosti pojavom
programskog jezika Kotlin koji omogućava podatkovno povezivanje bez pozivanja
funkcije, već uz direktno upravljanje elementima preko njihove „id“ vrijednosti. [11]
16
3.5. Komunikacija sa poslužiteljem
3.5.1. Retrofit
Retrofit je radni okvir napisan u Javi koji omogućava jednostavno razvijanje
REST klijenta za Android aplikaciju. Praktičan je za korištenje jer pruža
funkcionalnost konverzije podatka iz POJO-a (engl. Plain Old Java Object) u
strukturirani tip podatka koji je naveden pri pokretanju klijenta. Pri konverziji se
najčešće koristi JSON tip podatka, odnosno njemu pripadni pretvarač Gson, iako
korisnici mogu napisati vlastiti pretvarač podataka ili koristiti XML ili Protocol Buffers
pretvarač podataka. Naravno, prije dohvaćanja podataka potrebno je napraviti
sučelje s metodama koje sadrže prikladnu HTTP anotaciju poput „@GET“,
„@POST“, „@DELETE“ ili „@PUT“ kojima se određuje zahtjev te razred koji služi
kao predložak za stvaranje objekta koji nastaje konverzijom iz dobivenog odgovora.
Retrofit klijent se temelji na OkHttp biblioteci za komunikaciju s HTTP zahtjevima.
[12]
17
4. Implementacija aplikacije za preporučivanje
filmova
4.1. Funkcionalnost i organizacija aplikacije
Slika 4.1 Dijagram obrazaca uporabe
Prikazani obrazac uporabe pokazuje koje su funkcionalnosti omogućene korisniku i
kakva je organizacija aplikacije za preporučivanje. Donja slika (4.2) objašnjava
18
slijednu komunikaciju između sudionika sustava unutar obrasca uporabe za
zatraživanje preporuke filma.
Slika 4.2 Sekvencijski dijagram obrasca obrade podataka
4.2. Nefunkcionalni zahtjevi aplikacije
Više korisnika može unositi informacije o ocjenama filmova u isto vrijeme
Aplikacija mora biti kontinuirano spojena internetskom vezom sa servisom
koji sadrži bazu podataka s filmovima kako bi aplikacija radila
U slučaju kratkotrajnog gubitka internetske veze, podaci se moraju naknadno
pohraniti u Firebase bazu podataka
19
4.3. Izvedba korisničkog sučelja
Na slici 5.1 je prikazan primjer hijerarhijske ovisnosti razreda View i
ViewGroup te je slikom 5.2 prikazan rezultat prikazane hijerarhije. Primjer prikazuje
izvedbu koja je definirana statički preko XML-a i dinamički pomoću Java koda koji u
ovome slučaju služi za dodavanje elemenata. Statički dio je na lijevoj strani strukture
hijerarhijske ovisnosti te se odnosi na sve elemente razreda View, dok je dinamički
dio napravljen dodavanjem elementa unutar spremnika RecyclerView. Dinamičko
dodavanje se pokušava optimizirati prilikom prikazivanja podataka na ekranu. Zbog
toga se stvaraju vlastiti podrazredi razreda Adapter i ViewHolder. Adapter
popunjava listu s elementima, dok ViewHolder inicijalizira vrijednosti određenog
elementa. Na slici 5.2 se može vidjeti primjer dinamičkog dodavanja elemenata
pretraživanjem filmova po nazivu ili generiranjem popularnih filmova gumbom
„Popular movies“.
Slika 4.3 Hijerarhijska struktura elemenata
20
Slika 4.4 Rezultat prikazane hijerarhije
4.4. Izvor podataka
Prvi uvjet za rješavanje problema preporučivanja filmova je pristup bazi
podataka velikog broja filmova iz koje ćemo dohvaćati informacije koje prikazujemo
korisniku. Baza podataka korištena u rješenju problema je u sklopu internetskog
servisa TMDb s pozamašnom količinom upisanih filmova kao i funkcionalnosti koja
omogućuje dohvat po različitim parametrima. Dohvat filma se definira po upitu s
parametrima prikazanim na slici. Povratna informacija koja se dobiva od GET
zahtjeva je u JSON formatu. Slika 6.1 pokazuje kako je definiran odgovor na zahtjev
te kakvu je informaciju moguće dobiti.
21
Slika 4.5 Parametri po kojima se dohvaćaju podaci sa TMDb [13]
Slika 4.6 Informacije koje se vraćaju klijentu sa TMDb poslužitelja [13]
4.5. Spremanje podataka i njihova obrada
Sve je veći broj Android aplikacija kojima je potrebna informacija o identitetu
korisnika. Znanje o identitetu korisnika može poslužiti na puno načina, primarno za
povezivanje određenog korisnika s njegovim sadržajem koji je pohranjen u bazi
podataka. Tako se teži personaliziranju aplikacije prema korisniku koji ju koristi. U
ovom slučaju spremanje podataka o korisnicima je nužno kako bi se mogle raditi
22
procjene ovisno o prikupljenim podacima koje korisnik unosi ocjenjivanjem filmova.
Prethodno navedeni uvjet o potrebi spremanja podataka rezultira korištenjem
poslužitelja koji će upravljati korisničkim podacima unutar vlastite baze podataka.
Pri rješavanju problema autentifikacije korisnika i spremanja podataka o korisniku
se koristila Firebase tehnologija koja sadrži sučelje za komunikaciju Android klijent
aplikacije sa Google-ovim poslužiteljem koji sprema i autentifikacijske podatke
korisnika i koji stvara račun unutar navedene aplikacije. Za spremanje podataka se
koristi Firebase Realtime Database koja automatski mijenja podatke prilikom slanja
s android klijenta te ih pohranjuje u JSON formatu. Podaci unutar baze su
strukturirani od korisničkog identifikacijskog ključa koji sadrži listu filmova i njihovih
pripadajućih ocjena. [14]
4.6. Firebase autentifikacija
Firebase autentifikacija je sučelje za povezivanje Android klijenta s Firebase
poslužiteljem. Korisnikovim podatcima se dodaje posebni znakovni niz koji
označava jedinstveni korisnikov identifikacijski ključ. Ono što čini Firebase
autentifikaciju praktičnom je izravni pristup usluzi Firebase pomoću jednostavnog
upita koji dohvaća trenutnog korisnika koji koristi aplikaciju na određenom uređaju
u tom trenutku. Autentifikacija se može izvesti na više načina tako da se postojeće
sučelje nadograđuje s vlastitim mehanizmima. Na ovoj aplikaciji je Firebase
autentifikacija izvedena jednostavnim stvaranjem računa pomoću Email adrese i
lozinke. [15]
4.7. Firebase Realtime Database
Firebase Realtime Database je NoSQL baza podataka koja se nalazi na Google
oblaku. Izvedba Firebaseove baze podataka rezultira automatskim preslikavanjem
promjena koje poziva Android klijent što omogućava brže izvođenje aplikacije te
izbjegavanje dohvaćanja zastarjelih podataka. Uz navedeno, Firebase sadrži
mehanizam koji čini aplikaciju otpornom na zatajenja, odnosno osigurava naknadno
23
slanje podataka u slučaju kratkotrajnog gubitka internetske veze. Ponovnim
povezivanjem na poslužitelja se osvježavaju podatci u bazi podataka bez obzira na
to što je korisnik pozvao navedenu funkcionalnost tijekom gubitka povezanosti s
Firebase poslužiteljem. Svi podatci u Firebase bazi podataka se spremaju u JSON
formatu, te se pohranjuju u stablastu strukturu. Struktura počinje od ključa koji
označava glavni čvor (čvor roditelj) unutar kojeg se spremaju podatci (čvorovi
djeca). Korištenje baze podataka je izvedeno na način navođenja čvorova po kojima
se putuje te je time određeno mjesto u strukturi baze podataka gdje će se nalaziti
određeni objekt. Prilikom spremanja se šalje POJO (plain old java object) koji se
pretvara u JSON format te sprema.
Stablasta struktura baze podataka zahtjeva način oblikovanja čiji je cilj smanjiti
redundanciju i odvojiti zasebne entitete u vlastite strukture. Najpoznatije dobre
prakse spremanja u Firebase bazu podataka su:
Izbjegavanje ugniježđenih podataka
Povezivanje dvaju struktura dupliciranjem podatka (radi jednostavnosti
pretraživanja)
Podijeliti podatke u zasebne strukture kako bi se ubrzalo povlačenje
podataka sa poslužitelja
Slika 4.7 Struktura podataka
Slika 7.1 prikazuje glavni čvor „moviepick-b31d6“ i njegove djeca čvorove
„user-data“ i „movie-data“ koji sadrže informacije o korisničkim preferencijama,
odnosno informacije o filmovima. Među njima je naveden i čvor „genre_data“ koji
povezuje određenog korisnika sa žanrom kojeg taj korisnik preferira.
24
Slika 4.8 Struktura podataka
Slika 7.2 prikazuje čvorove-djecu koja određuju pojedini element unutar
hijerarhije. Pritom su elementi unutar „movie_data“ čvora identifikacijski ključevi
filmova koji su dobiveni sa TMDb servisa, dok su unutar „genre_data“ i „movie_data“
definirani identifikacijski ključevi korisnika dobiveni sa Firebase autentifikacijske
usluge.
Slika 4.9 Struktura podataka o žanru
Čvor pojedinog korisnika unutar „genre_data“ prikazuje listu sa identifikacijskim
ključevima pojedinog žanra koji su dohvaćeni sa servisa TMDb.
25
Slika 4.10 Struktura podataka o filmu
Slika 7.4 prikazuje hijerarhijsku strukturu podataka o filmovima koje su
korisnici pogledali. Kada se ocijeni određeni film onda se dodaje u prikazanu
strukturu. Struktura filma se sastoji od njegovog identifikacijskog ključa te općih
informacija o filmu poput datumu izlaska filma, nazivu filma, prosječna ocjena
korisnika sa TMDb baze podataka.
Na slici 7.5 su prikazani temeljni podatci o filmovima koje je korisnik ocijenio.
Polje elemenata filmova je definirano identifikacijskim ključem korisnika. Unutar
svakog elementa koji opisuje filmove stoji identifikacijski ključ filma, ocjena koju je
dao korisnik i prosječna ocjena korisnika iz TMDb baze podataka.
26
Slika 4.11 Struktura podataka ocjene filma korisnika
4.8. Dohvaćanje i obrada korisničkih podataka
Komunikacija s poslužiteljem TMDb je izvedena pomoću radnog okvira
Retrofit, dok je komunikacija s Firebase poslužiteljem izvedena pomoću alata za
razvoj programske potpore Firebase. Aplikacija komunicira sa TMDb
poslužiteljem kako bi se dohvatili podatci o filmovima koje će korisnik ocjenjivati
ili pregledavati. Prilikom ocjenjivanja se podaci šalju na poslužitelj Firebase.
Obrada korisničkih podataka je izvedena preko instance zasebnog razreda
koji dohvaća podatke o korisnicima iz Firebase baze podataka i traži korisnike
koji imaju ocijenjene iste filmove. Na temelju izračuna se dobiva korelacija
između korisnika pa se može zaključiti postoji li sličan korisnik onome koji je
zatražio preporuku filma. Obrada završava uspješno, ako postoji dovoljno jaka
korelacija između dvaju korisnika te se po završetku pronalazi film koji je sličan
korisnik ocijenio s 7.5 ili više. Identifikacijski ključ pronađenog filma se šalje kao
27
rezultat koji se koristi za dohvaćanje informacija o filmu. Obrada može završiti
neuspjehom, u slučajevima kada:
Nema drugih korisnika u bazi podataka.
Postojeći korisnici nisu ocijenili dovoljan broj istih filmova.
Ne postoji korisnik sa zadovoljavajućom korelacijom s obzirom na
korisnika koji je zatražio preporučivanje
Korisnik koji je zatražio preporučivanje nije ocijenio dovoljan broj
filmova
U slučaju neuspjeha, algoritam vraća null vrijednost koja daje do znanja da je
potrebno koristiti alternativni način preporučivanja.
Slika 4.12 Pozivanje metoda za računanje korelacije između dvaju korisnika
Traženog korisnika se uspoređuje s ostalim korisnicima u bazi podataka tako
da se uzimaju jedan po jedan i te se za svaki par računa korelacija. Ako nema drugih
korisnika u bazi onda nije moguće provesti algoritam. Korelaciju je moguće
izračunati samo ako su korisnici ocijenili minimalan broj istih filmova. Izračunata
korelacija se uspoređuje s minimalnom vrijednosti jake korelacije i ovisno o
vrijednosti se šalje ili Prvim pronalaskom korisnika sa „jakom“ korelacijom se poziva
metoda za preporučivanje filma. Nakon pronalaska sličnog korisnika se poziva
metoda koja pokušava pronaći film koji je taj korisnik ocijenio 7.5 ili više, a da ga
pritom nije ocijenio drugi korisnik.
28
Slika 4.13 Računanje Pearsonove korelacije unutar metode calculateCorelation()
4.9. Tijek izvođenja aplikacije
Aplikacija počinje s izvođenjem tako da se prvo pokreće aktivnost za prijavu koja
traži od korisnika upisivanje E-mail adrese i lozinke s kojom je izradio račun. Nakon
upisivanja podataka se stišće gumb s natpisom „Log in“ kojim se otvara aktivnost
za prikaz glavnog izbornika. U slučaju da korisnik nema izrađen korisnički račun
onda stišće na plavi natpis „Create an account“ te se onda prebacuje na aktivnost
za registraciju.
29
Slika 4.14 Prijava i glavni izbornik
Glavni izbornik je središte aplikacije s kojeg je moguće dalje pokretati
funkcionalnosti za preporučivanje, pretraživanje baze podataka, pregled ocijenjenih
filmova i gumb za odjavu iz sustava. Aktivnost za preporučivanje filmova se pokreće
pritiskom na gumb pod nazivom „Recommend a movie“, pretraživanje filmova
pomoću „Search movie database“, pregled ocijenjenih filmova preko „Watched
movies“ te odjava preko gumba „Log out“.
Slika 8.2 prikazuje registraciju koja se sastoji od dvaju aktivnosti, koje služe
za spremanje podataka o korisniku na bazu podataka Firebase. Prva aktivnost traži
od korisnika unos E-mail adrese, korisničkog imena i lozinke koju će imati njegov
račun. Osim navedenih informacija korisnik mora obavezno označiti barem jedan
žanr tako da označi kućicu pored imena žanra.
30
Slika 4.15 Dvije aktivnosti registracije
Druga aktivnost za registraciju traži od korisnika pretraživanje i ocjenjivanje
filmova. Filmovi se mogu pretraživati po naslovu filma te se pritom dohvaćaju svi
filmovi naziva sličnog navedenom. Alternativa pretraživanja po naslovu je
generiranje trenutno popularnih filmova. Pritiskom na gumb „Popular movies“ se
dohvaćaju trenutno aktualni filmovi sa servisa TMDb. Aktivnost za ocjenjivanje filma
otvara se pritiskom na sliku određenog filma u listi ispod gumba „Continue“.
Gumbom „Continue“ se spremaju podatci, završava registracija te se pokreće glavni
izbornik.Aktivnost za ocjenjivanje filmova sadrži sliku i osnovne informacije o filmu
na temelju kojih korisnik može znati je li gledao film ili ne. Pritiskom na zvjezdice se
određuje ocjena filma i pritiskom na tipku „Save rating“ se sprema ocjena u bazu
podataka. Na slikama 7.4 i 7.5 su prikazane aktivnost pretraživanja filmova i
aktivnost davanja preporuke korisniku.
31
Slika 4.16 Aktivnost za ocjenu filma Slika 4.17 Aktivnost za pretraživanje filmova
Slika 4.18 Aktivnost preporučivanja filma
32
5. Zaključak
Aplikacija za preporučivanje filmova je uspješno napravljena uz korištenje
tehnologija koje se široko primjenjuju prilikom razvoja aplikacija za operacijski
sustav Android. Trenutna aplikacija osigurava osnovnu funkcionalnost za
pretraživanje, ocjenu filmova te dobivanje preporuke. Moguće je i daljnje
nadograđivanje koje bi omogućilo pretraživanje filmova po različitim drugim
kriterijima kao prema prezimenu glumca, ocjeni i slično. Pisanjem ovog rada sam
stekao osnovna znanja o tehnologijama i razvoju aplikacija za Android operacijski
sustav koja će iznimno poslužiti u daljnjem obrazovanju i poboljšanju.
33
6. Literatura
[1] Recommender Systems — User-Based and Item-Based Collaborative Filtering,
https://medium.com/@cfpinela/recommender-systems-user-based-and-item-
based-collaborative-filtering-5d5f375a127f,
lipanj 2019.
[2] Pearsons correlation,
http://www.statstutor.ac.uk/resources/uploaded/pearsons.pdf,
lipanj 2019.
[3] Pearson correlation,
https://statistics.laerd.com/statistical-guides/pearson-correlation-coefficient-
statistical-guide.php
lipanj 2019.
[4] Distribution dashboard,
https://developer.android.com/about/dashboards/,
lipanj 2019.
[5] Activity
https://developer.android.com/reference/android/app/Activity,
lipanj 2019.
[6] Activity Lifecycle,
https://developer.android.com/guide/components/activities/activity-lifecycle,
lipanj 2019.
[7] App Manifest Overview,
https://developer.android.com/guide/topics/manifest/manifest-intro,
lipanj 2019.
[8] Layouts,
https://developer.android.com/guide/topics/ui/declaring-layout,
34
lipanj 2019.
[9] View,
https://developer.android.com/reference/android/view/View,
lipanj 2019.
[10] ViewGroup,
https://developer.android.com/reference/android/view/ViewGroup.html,
lipanj 2019.
[11] Say goodbye to findviewbyid with data binding - Butterknife
https://inthecheesefactory.com/blog/say-goodbye-to-findviewbyid-with-data-
binding-library/en,
lipanj 2019.
[12] Retrofit,
https://square.github.io/retrofit/,
lipanj 2019.
[13] Getting movie details – TMDb,
https://developers.themoviedb.org/3/movies,
lipanj 2019.
[14] Introduction to Firebase,
https://hackernoon.com/introduction-to-firebase-218a23186cd7,
lipanj 2019.
[15] Firebase Authentication,
https://firebase.google.com/docs/auth,
lipanj 2019.
[16] Firebase Realtime Database,
https://firebase.google.com/docs/database,
lipanj 2019.
35
7. Sažetak
Naslov : Aplikacija za preporučivanje filmova za operacijski sustav Android
Sažetak:
Završni rad opisuje osnovne komponente, njihovo značenje i korištenje u
svrhu pisanja aplikacije za operacijski sustav Android. Ukratko su objašnjene
tehnologije Butter Knife, Retrofit i Firebase koje su olakšale izradu završnog rada.
Aplikacija MoviePick omogućava korisniku izradu računa, pretraživanje filmova po
nazivu ili popularnosti te ocjenjivanje istih. Na temelju prikupljenih informacija se
korisniku šalje preporuka. Ova aplikacija je pisana u programskom jeziku Java.
Ključne riječi: Android, Korisničko sučelje, Filmovi Sustavi za preporučivanje,
Filtriranje temeljeno na suradnji korisnika, Firebase
Summary:
Title: An Android Application for Recommending Movies
Abstract:
Themes of the paper are technologies such as Butterknife, Retrofit and
Firebase which are used in order to create an Android application with primary
function of grading and recommending movies. Application MoviePick provides
functionality for creating accounts, grading movies and receiving recommendations
based on user information which are stored in Firebase Realtime Database.
Application is written in Java.
Keywords: Android, Movies, User interface, Recommender system, Collaborative
filltering, Firebase