Studie van visualisatie-algortimen voor het vinden en selecteren van audiovisuele content Bart Van Hoecke
Promotor: prof. dr. ir. Luc Martens Begeleiders: ir. Tom Deryckere, Toon De Pessemier Scriptie ingediend tot het behalen van de graad van Burgerlijk ingenieur in de computerwetenschappen
Vakgroep Informatietechnologie Voorzitter: prof. dr. ir. Paul Lagasse Faculteit Ingenieurswetenschappen Academiejaar 2007-2008
Voorwoord Deze scriptie is geschreven in het kader van mijn afstuderen als Burgerlijk Ingenieur in de Computerwetenschappen aan de Universiteit Gent.
Mijn eerste dank gaat uit naar mijn promotor prof. dr. ir. Luc Martens en mijn begeleiders ir. Tom Deryckere, ir. Toon De Pessemier en ir. Michiel Ide voor hun advies, praktische hulp en bijstand tijdens de ontwikkeling van dit werk. Graag wil ik ook mijn ouders bedanken die mij met veel begrip en geduld bijgestaan hebben in het proces.
Ik heb altijd een project willen ontwikkelen waarvan ik uiteindelijk een zichtbaar resultaat had. Niets is meer dankbaar dan het opbouwen van een webapplicatie die gebruik maakt van visualisatie methoden om bepaalde zaken voor te stellen. In de eerste weken werd een basisidee grafisch uitgewerkt. Onmiddellijk was mijn enthousiasme gewekt. Daarna ontstond een evolutie met nieuwe ideeën, concepten en volgden de weken elkaar sneller en sneller op. Ik heb veel bijgeleerd tijdens de laatste maanden en ben tevreden over het resultaat.
Ik hoop dat mijn scriptie kan bijdragen in een nieuwe trend naar gebruik van visualisatie systemen bij de ontwikkeling van websites op het internet.
Bart Van Hoecke, januari 2008
i
Toelating tot bruikleen “De auteur geeft de toelating deze scriptie voor consultatie beschikbaar te stellen en delen van de scriptie te kopiëren voor persoonlijk gebruik. Elke ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit deze scriptie.”
Bart Van Hoecke, januari 2008
ii
Overzicht Visualisatie algoritmen worden gebruikt om grote hoeveelheden data overzichtelijk weer te geven. In de context van audiovisuele content zullen we een webapplicatie ontwikkelen waarin films voorgesteld worden. Bepaalde eigenschappen van de films worden gebruikt om relaties te leggen tussen elkaar. Op deze manier wordt een datastructuur opgebouwd die visueel op het beeldscherm weergegeven word. De gebruiker zal in staat zijn vlotter informatie terug te vinden en te selecteren. In hoofdstuk 1 wordt een inleiding gegeven als situering van de scriptie. Hoofdstuk 2 beschrijft welke bronnen we zullen gebruiken als dataleveranciers voor de applicatie. Een overzicht van bestaande visualisatie applicaties wordt gegeven in Hoofdstuk 3, waarna een besluit valt over de voorstelling van film data. Hoofdstukken 4, 5 en 6 geven een beschrijving van de client-server architectuur, per onderdeel worden de functionaliteiten beschreven en wordt een beeld gegeven van de ontwikkelde software. Gebruiksvriendelijkheidtesten die na de ontwikkeling plaatsvonden worden behandeld in het volgende hoofdstuk. Tot slot zal een conclusie de uiteindelijke resultaten bespreken in hoofdstuk 8.
Kernwoorden: visualisatie van data, personalisatie, recommandatie, film, applicatie ontwikkeling
iii
Study of visualization algorithms for finding and selecting audiovisual content. Bart Van Hoecke Supervisor(s): Prof. dr. ir. L. Martens, ir. Tom Deryckere, ir. Toon De Pessemier
Abstract: The idea in this article is to develop a web application on which people can find and select films. To give a better overview, the films are presented as a graph on the computer screen by a visualization algorithm. This algorithm adapts the presentation when a user is browsing the data by adding new films to the graph or by forming a completely new graph. A new graph can also be formed by searching films based on certain properties. These properties are analyzed to determine the behavior of the user. As a personalization of the application, it can help the user in finding recommendations. Keywords: visualization, personalization, recommendation, film
information are available such as Person, Music, Film, etc. And the possibility of using the system through web services makes Freebase[1] a suitable candidate as main source. We will concentrate on the type Film. B. Wikipedia When you search for information the possibility exists that you will encounter one of the thousands articles in the Wikipedia[2] database. DBpedia[3] is an online web service that enables other systems to access the information on Wikipedia. This information will be used in addition to the information from Freebase. C. YouTube
I. INTRODUCTION The internet landscape is constantly changing and evolving. Today audiovisual content is gaining importance because of evolutions in database storage capacities. Sites like YouTube let users upload their own video data and distribute it over the Internet. It is impossible for an internet user to watch all available data. Finding information, you are interested in, brings users to search engines as Google or Yahoo. Other possibilities are specialized sites who try to categorize content and make it easier to browse similar data. The results of such sites are presented to the user in a textual form by a list of links. Browsing the information is possible by following the links. We try to change this way of browsing by giving a visual presentation of the data by using a visualization algorithm. A new trend in the evolution from the classical site that presents information to interactive web applications is changing the way developers construct websites. Web applications give the user the ability to interact with the site so that it will fulfill his needs in a more accurate way. II. INFORMATION RESOURCES Before developing the system, a choice was made which sources would be used. Websites today make it possible to use their data in your own application by using web services. Four such web services will be consulted to gather the information that is presented to the user. A. Freebase Freebase is an open and free online database with the purpose of organizing information. Different types of
B. Van Hoecke is a graduate student at the Ghent University (UGent), Gent, Belgium. E-mail:
[email protected] .
The only free video images from films available online are trailers. A trailer gives a better vision of what the film is about. The availability of trailers on YouTube[4] makes the use of their services a good choice. D. Yahoo Two services of Yahoo[5] will be used: the search engine and spelling suggestions. People that are looking for a certain film don’t always know what the title is, who directed the film or which actors are starring in it. Instead they know some keywords that describe the film. The possibility to find a film based on some keywords gives the user more freedom in finding content. A second service corrects the misspelled terms formulated by the user as a ‘Did you mean’ functionality. III. VISUALIZATION Visualization algorithms have the ability to represent large amounts of data in a clear and well-organized way. On the internet some tools are available for giving a dynamic representation of a graph. We have chosen the SpringGraph[6] Flex component developed by Mark Sheperd. We will use a poster to represent the film and the links between the nodes will be determined by relations. The relations are based on three properties of films: director, actor and genre. The color, thickness and opaqueness of the links between films will be changed according to their relationship. Only films with the highest similarity are presented in the graph. This similarity is calculated by discovering the similar properties between the films and returning an average score of similarity. The weights used to calculate the score of similarity can be adapted according to the users needs. You can find similar applications for music data online.
iv
I. ARCHITECTURE The best choice to develop this application was a clientserver architecture. The client presents the interface to the user as a web page in his browser. This client is responsible for making the calculations and the presentation of the film data. The server is responsible for all personalization functionalities. II. FUNCTIONALITIES A list of the most important functionalities the system delivers is presented in the following paragraphs. A. Search Searching films in a database is inevitable and necessary in this application. Five different searches are presented to the user. The first searches for films based on their title. The three following searches are based on properties of the films. A search can be formulated by giving the name of a director, the name of an actor or the type of a genre. And the last search uses the Yahoo search engine which let the user search the database by keywords. Spelling corrections help the user in finding the correct data. B. Textual representation The visualization algorithm gives the overview of the films by their posters. The extra information (year, director(s), actor(s), genre(s), abstract) become visible when the user clicks on a film in a separate structured window.
The list of films is analyzed and average values are stored for the most important film genres. Based on this information and a history of the user’s actions, recommendations can be given to the user. G. Similar users The list of films has a second purpose. A comparison can be made between the users based on this initial profile. Each user has a list of films that each has a value between 0 and 6. These values form a vector for the each user (1) (2). By calculating the cosine of the angle between the different vectors and presenting the smallest angles, a user can see other users with similar interests (3). v1 = (x1, x2, …., xn) v2 = (x1, x2, …., xn)
(1) (2)
Cosine (v1, v2) = |v1.v2| / ||v1||.||v2||
(3)
H. Rating system You can read the information about the film in the textual representation. A part of this information is a rating of the film. This value is calculated between all the users that have given a score to the film. You are able to change your own rating at any point and the new average will be visible.
C. Settings For improving the overview of the graph, the user can change different settings of the visualization component. The numbers of films presented, the size of the nodes, the size of the links, etc… are properties that can be altered. D. Video content If you want to watch the trailer of a film, just select the film and click ‘trailer’. A search on the YouTube website looks for a video fragment by using the tags: filmtitle + trailer. It is possible that no trailer is available or that a different fragment is loaded but the overall results are acceptable. E. Browsing The only links available in the application are references to other sites in order to find additional information. You can browse the data by clicking on the nodes. An automated search looks for similar films and makes links with the original film based on their relations. Every browse action extends the graph. After a series of actions, the graph can become quite large. By changing the setting or by dragging the graph, the overview can be recovered. Another option is resetting the graph with the clicked node as the center graph. F. User Profile In interactive applications user profiles are used to give a more customized feeling to the users. The first time a user uses the application he is presented with a list of films. He can give each film a rating between 0 and 6. The value 0 meaning that he is not interested in the film and the value 6 that he wants to see the film. The values 1 to 5 represent a star rating.
Figure 1: Graph
III. CONCLUSION After testing the usability of the application, positive comments were given about the ease to work with the program. The use of a visual representation helps the user in finding the correct information. Also the integration of different services into one application gives a surplus value to the system.
REFERENCES [1] [2] [3] [4] [5] [6]
http://www.freebase.com http://www.wikipedia.com http://www.dbpedia.org http://www.youtube.com http://www.yahoo.com Mark Shepherd, SpringGraph shepherd.com/blog/
Flex
Component,
http://mark-
v
Inhoudsopgave Voorwoord ........................................................................................................................... i Toelating tot bruikleen........................................................................................................ ii Overzicht............................................................................................................................ iii Extended Abstract.............................................................................................................. iv Inhoudsopgave ................................................................................................................... vi Figuren ............................................................................................................................. viii Afkortingen ........................................................................................................................ ix Hoofdstuk 1 - Inleiding....................................................................................................... 1 Hoofdstuk 2 - Informatiebronnen ....................................................................................... 5 2.1 2.2 2.3 2.4 2.5
IMDb................................................................................................................... 6 Freebase .............................................................................................................. 7 Wikipedia.......................................................................................................... 11 YouTube ........................................................................................................... 13 Yahoo................................................................................................................ 14
Hoofdstuk 3 - Visualisatie ................................................................................................ 15 Hoofdstuk 4 - High-level Architectuur ............................................................................. 21 Hoofdstuk 5 - Client.......................................................................................................... 23 5.1 Technologie gebruikersinterface....................................................................... 23 5.2 Functionaliteiten ............................................................................................... 26 5.2.1 Relaties.......................................................................................................... 27 5.2.1.1 Gewogen gemiddelde............................................................................ 27 5.2.1.2 Vectorruimte ......................................................................................... 29 5.2.2 Zoekopdrachten............................................................................................. 31 5.2.3 Tekstuele weergave....................................................................................... 34 5.2.4 Grafische weergave....................................................................................... 35 5.2.5 Instellingen.................................................................................................... 38 5.2.6 Videobeelden ................................................................................................ 40 5.2.7 Gebruikersprofiel .......................................................................................... 42 5.2.7.1 Mijn profiel ........................................................................................... 43 5.2.7.2 Gelijkaardige gebruikers....................................................................... 44 5.2.7.3 Suggesties ............................................................................................. 45 5.2.7.4 Beoordelingssysteem ............................................................................ 45 5.2.8 Help............................................................................................................... 46 5.3 Software ............................................................................................................ 48 5.3.1 Klassendiagram............................................................................................. 48 5.3.2 Klassen.......................................................................................................... 49
vi
5.3.2.1 5.3.2.2 5.3.2.3 5.3.2.4 5.3.2.5 5.3.2.6 5.3.2.7 5.3.2.8 5.3.2.9
DisplayItem........................................................................................... 49 DisplayRelated...................................................................................... 50 FreebaseService .................................................................................... 51 WikipediaService.................................................................................. 52 YahooService........................................................................................ 53 YahooServiceKeyword ......................................................................... 54 UserInfoService .................................................................................... 55 User ....................................................................................................... 55 GraphTest.............................................................................................. 56
Hoofdstuk 6 - Server......................................................................................................... 61 6.1 Technologie server............................................................................................ 61 6.2 Functionaliteiten ............................................................................................... 62 6.2.1 Aanmelden .................................................................................................... 62 6.2.2 Mijn profiel ................................................................................................... 62 6.2.3 Vergelijkbare gebruikers............................................................................... 63 6.2.3.1 Gemiddelde ........................................................................................... 63 6.2.3.2 Vectorberekening.................................................................................. 65 6.2.4 Suggesties ..................................................................................................... 66 6.2.5 Beoordelingssysteem .................................................................................... 66 6.3 Database............................................................................................................ 67 6.4 Software ............................................................................................................ 69 6.4.1 Klassendiagram............................................................................................. 69 6.4.2 Klassen.......................................................................................................... 70 6.4.2.1 UserInfoWSBean .................................................................................. 70 6.4.2.2 Filmdata ................................................................................................ 74 6.4.2.3 Userdata ................................................................................................ 74 6.4.2.4 Linker en LinkerPK .............................................................................. 75 6.4.2.5 Userprofilesetup.................................................................................... 76 6.4.2.6 UserFilmInfo en UserFilmInfoCompare............................................... 76 6.4.2.7 UserDistance en UserDistanceCompare ............................................... 77 6.4.2.8 SimilarUsers, User en UserCompare .................................................... 77 Hoofdstuk 7 - Usability..................................................................................................... 79 7.1 7.2 7.3
Resultaten.......................................................................................................... 80 Suggesties door de gebruiker ............................................................................ 81 Uitbreidingen .................................................................................................... 82
Hoofdstuk 8 - Conclusie ................................................................................................... 83 Bijlagen ............................................................................................................................. 84 Bijlage A ....................................................................................................................... 84 Bijlage B ....................................................................................................................... 87 Referenties ........................................................................................................................ 90
vii
Figuren Figure 1: Visualisatie van een graaf.................................................................................... 2 Figure 2: Communicatie met een webservice..................................................................... 6 Figure 3: Voorbeeld van een Topic in freebase .................................................................. 8 Figure 4: Newsmap ........................................................................................................... 16 Figure 5: ThinkmapVisual Thesaurus............................................................................... 16 Figure 6: Musicovery........................................................................................................ 17 Figure 7: MusicMap.......................................................................................................... 18 Figure 8: Maps of Recommendation................................................................................. 19 Figure 9: FilmSpin ............................................................................................................ 20 Figure 10: Architectuur..................................................................................................... 21 Figure 11: Voorbeeld Springgraph Component................................................................ 24 Figure 12: Screenshot van de Applicatie .......................................................................... 26 Figure 13: Zoekopdrachten ............................................................................................... 31 Figure 14: Filmdetails ....................................................................................................... 34 Figure 15: Grafische voorstelling ..................................................................................... 35 Figure 16: Legende van de relaties ................................................................................... 36 Figure 17: Instellingen ...................................................................................................... 38 Figure 18: Video Player .................................................................................................... 40 Figure 19: Login ............................................................................................................... 42 Figure 20: Foutieve Login ................................................................................................ 42 Figure 21: Welkomstbericht ............................................................................................. 42 Figure 22: Gebruikersprofiel............................................................................................. 43 Figure 23:Gebruikers met gelijkaardige interesses........................................................... 44 Figure 24: Help ................................................................................................................. 46 Figure 25: Klassendiagram ............................................................................................... 48 Figure 26: Databank.......................................................................................................... 67 Figure 27: Klassendiagram Server.................................................................................... 69
viii
Afkortingen 2D
Tweedimensionaal
3D
Driedimensionaal
AJAX
Asynchronous JavaScript and XML
API
Application Programmable Interface
Flex
Adobe® Flex™
FLV
Flash Video
HTTP
HyperText Transfer Protocol
IMBd
The Internet Movie Database
JAX-WS
Java API for XML Web Services
JSON
JavaScript Object Notation
MCI
Mens-Computerinteractie
MXML
Macromedia Flex Markup Language
PHP
PHP: Hypertext Preprocessor
REST
Representational State Transfer
RDF
Resource Description Framework
SOAP
Simple Object Access Protocol
SPARQL
SPARQL Protocol and RDF Query Language
SQL
Structured Query Language
URL
Uniform Resource Locator
W3C
World Wide Web Consortium
WSDL
Web Service Description Language
XML
eXtensible Markup Language
XML-RPC
XML-Remote Procedure Call
ix
Hoofdstuk 1 Inleiding Een internetgebruiker wordt vandaag geconfronteerd met het altijd toenemend aanbod van audiovisuele content. Steeds meer webapplicaties proberen het dan ook zo gemakkelijk mogelijk te maken voor een gebruiker om informatie terug te vinden. Wanneer je op zoek bent naar een film waarvan je een acteur of regisseur kent, brengen zoekmachines als Google1 in veel gevallen een oplossing. Toch blijft hun functionaliteit beperkt wanneer je wilt zoeken naar een ‘verwante’ film. Gespecialiseerde sites, zoals IMDb2, voldoen in dit geval beter aan de vereisten van de gebruiker. Ze bieden gespecialiseerde zoekopdrachten aan en kunnen je zelfs helpen bij het ontdekken van nieuwe informatie. De weergave van de gevonden informatie wordt in de meeste gevallen op een gestructureerde wijze weergegeven in vorm van lijsten met tekstuele presentatie. Je krijgt een overvloed aan informatie die onoverzichtelijk is en moeilijk te bevatten is. Een zoektocht naar andere presentatievormen brengt ons bij visualisatiemethodes en algoritmen. Het gaat hier om het voorstellen van grote hoeveelheden data en relaties op een visuele manier in 2D of zelfs 3D. Wanneer een grote hoeveelheid data moet voorgesteld worden, lijkt een graaf een geschikte kandidaat. Het geeft een overzichtelijk beeld van de relaties die tussen de verschillende nodes aanwezig zijn. Specifiek kan je bij een film relaties definiëren op basis van dezelfde acteur, regisseur, genre, populariteit,… Een node stelt in dat geval de metadata voor die de film beschrijven. Metadata worden aanzien als gegevens die een beschrijving geven van bepaalde data. Een film is in dit geval de data met als metadata de regisseurs, de acteurs, een korte 1 2
http://www.google.com http://www.imdb.com
1
inhoud, context, genre, jaartal,… Standaarden worden ontwikkeld om een schema te formuleren dat de structuur van de metadata vastlegt. Het Resource Description Framework (RDF) is een standaard die gebruikt wordt om een vast formaat op te leggen aan audiovisuele content. Deze uniforme beschrijving is nodig om de voorstelling te garanderen in geautomatiseerde web applicaties. Door gebruik te maken van een graaf krijgt de gebruiker inzicht in de structuur van grote hoeveelheden filmdata. Dergelijke visuele representaties zijn reeds ontwikkeld voor muziekdata, maar nog niet voor films.
Figure 1: Visualisatie van een graaf
Het World Wide Web maakt een nieuwe fase in zijn evolutie mee die door sommigen beschreven wordt als Web 2.0. Samengevat gaat het om een verandering van de “klassieke” websites naar dynamische interactieve webapplicaties. Deze stellen je in staat de website te gebruiken als een applicatie met een grafische gebruikersinterface. Ook stellen nieuwe sites informatie ter beschikking via webservices. Een webservice kan omschreven worden als een applicatie die bepaalde diensten levert aan andere applicaties. Het uitvoeren van een berekening, het leveren van gegevens of het
2
bijhouden van gegevens zijn enkel voorbeelden van dergelijke diensten. Een aantal protocollen als SOAP, REST, XML-RPC, JAX-WS,... staan in voor de communicatie tussen de webservice en de applicatie. Het zijn op XML gebaseerde protocollen die zorgen voor de uitwisseling van asynchrone berichten. De mogelijkheid webservices te gebruiken biedt een waaier aan nieuwe diensten en meer uitgebreide applicaties. Nieuwe technologieën als PHP3, AJAX4 en Flex5 geven de ontwikkelaar de mogelijkheid innovatie te brengen op vlak van websiteontwikkeling. Verschillende webservices kunnen nu gecombineerd worden in één webapplicatie. Data die afkomstig zijn van verschillende bronnen worden opgevraagd, verwerkt en weergegeven aan de gebruiker. Op deze manier krijg je een nieuwe webapplicatie die de beste diensten van andere combineert. Een veelgebruikte dienst in de context van mashup is Google Maps. Een website die bijvoorbeeld informatie ter beschikking geeft over restaurants maakt gebruik van deze dienst door een kaart aan te maken met de locaties van de restaurants. In de filmcontext kan een mashup gemaakt worden van metadata, videofragmenten, korte inhoud, gebruikersinformatie,… die door verschillende diensten geleverd worden.
Personalisatie is tegenwoordig niet meer weg te denken als we spreken over het internet. Om het gebruikersgemak te verhogen, houden hedendaagse sites een profiel bij. Op basis van de gebruikersgeschiedenis worden de zoekresultaten bijgestuurd en kunnen er recommandaties gedaan worden. Deze recommandaties moeten de gebruiker helpen in het ontdekken van nieuwe informatie[2].
3
PHP: scripttaal, die bedoeld is om op webservers dynamische webpagina’s te creëren AJAX: Asynchronous Javascript And XML 5 Flex: Adobe ® Flex http://www.adobe.com/nl/products/flex/ 4
3
De bedoeling is nu een gebruiker toe te laten op een grafische manier te browsen door een filmdatabase met eventuele bijsturing op basis van zijn gebruikersprofiel. Bijsturing kan gebeuren door de gebruiker recommandaties te geven
4
Hoofdstuk 2 Informatiebronnen Uit de overvloed aan informatie, die over het internet verspreid is, volgt nu de opdracht de nuttige gegevens te filteren en overzichtelijk weer te geven. Een teveel aan informatie leidt tot een onoverzichtelijk geheel. Te weinig informatie kan leiden tot een nieuwe zoekopdracht naar meer. Wat nu relevant is en wat niet, als je spreekt over een film, is een vraag die door iedereen verschillend ingevuld kan worden. Uiteindelijk is de beslissing gevallen om vooral over de inhoud van de film zelf gegevens op te halen. Die kunnen gebruikt worden om relaties te leggen tussen verwante films. Volgende eigenschappen zullen verder gebruikt worden om een zo volledig en relevant mogelijk beeld te geven van een film: filmtitel, regisseurs, acteurs, genre, jaartal, videofragment, korte inhoud, rating,… Enkele eigenschappen die in deze applicatie buiten beschouwing zijn gebleven zijn: context, producer, lengte van de film, budget, film formaat, schrijvers,… Tijd voor de zoektocht naar informatiebronnen die de gewenste informatie kunnen ter beschikking stellen. Nu een beslissing genomen is, welke informatie we wensen, moet gezocht worden naar diensten, die deze ter beschikking stellen. Om niet zelf een database te moeten ontwikkelen en omdat het gaat om de ontwikkeling van een webapplicatie zullen we op zoek gaan naar bestaande webservices. Deze webservices stellen informatie ter beschikking, die door andere applicaties kan gebruikt worden. De communicatie tussen de webservice en de applicatie verloopt via asynchrone berichten.
5
Figure 2: Communicatie met een webservice
2.1
IMDb
“The biggest, best, most award-wining movie and TV site on the planet”. Dit kan je lezen op de website www.imdb.com. In handen van Amazon.com is dit de grootste commerciële Internet Movie Database (IMDb) die vandaag online is. Het is de ideale bron van informatie over films, acteurs, tv-series, trailers, recensies, ratings, top 250 films,… Natuurlijk moeten de gegevens ook ter beschikking gesteld worden voor andere applicaties. IMDb stelt geen online webservice ter beschikking die je toelaat hun gegevens te gebruiken. Het stelt wel zijn informatie ter beschikking in verschillende tekstuele formaten. Om dit probleem te ontwijken, bestaan een aantal alternatieven. Een eerste methode is alle data downloaden van de site en een eigen systeem gebruiken om deze aan te spreken. Dit zou het onmogelijk maken een applicatie online aan te bieden zonder logica aan de kant van een server. Een tweede mogelijkheid is een Application Programmable Interface (API) die ter beschikking wordt gesteld door andere organisaties zoals Trynt6. Maar de gegevens, die over de film worden weergegeven, zijn te beperkt om als informatiebron te worden gebruikt. Beide alternatieven brengen hun tekortkomingen mee en representeren dus geen aanvaardbare oplossing. Een uitweg is te vinden in een relatief nieuwe community site genaamd Freebase.
6
http://www.trynt.com/trynt-movie-imdb-api
6
2.2
Freebase
Freebase7 is een open en gratis database met als doel het organiseren van informatie van bestaande databases. Een eigen ontologie wordt gegeven voor de organisatie van metadata. Er wordt geen gebruik gemaakt van het Resource Description Framework (RDF) dat metadata een drieledig subject-predicaat-object structuur geeft. Het subject stelt de bron die beschreven wordt voor, het predikaat geeft aan welk kenmerk besproken wordt en het object is de waarde van dat kenmerk. Er zijn echter wel drie belangrijke bouwstenen: Topics, Properties en Types. Een Topic kan om het even wat zijn: een persoon, een idee, een film,… en is gelijkaardig aan het subject uit RDF. De Properties of eigenschappen geven informatie over een Topic, zoals de naam van een persoon of een acteur uit een film. Deze Properties kan je als de predikaten uit RDF zien. Elke Property zal een Property Name hebben met een bijhorende waarde of een lijst van waarden. Deze waarden stellen de objecten voor bij RDF. Maar, wat het verschil maakt, is de aanwezigheid van een Freebase Type. Dit laatste wordt beschreven als een verzameling van Properties. Het bestaan van deze Types en uiteraard in het bijzonder het Type Film, is wat Freebase zo interessant maakt voor dit onderzoek. Als we nu het Topic bekijken van een persoon, worden alle relevante eigenschappen weergegeven. Een persoon kan natuurlijk verschillende Types hebben, zoals een filmacteur, een auteur of een muziek artiest. Een eigenschap kan op zich ook een Topic worden met opnieuw Properties. Op deze manier worden links gelegd tussen de verschillende Topics, Properties en Types. Onderstaande figuur geeft een voorbeeld van een Topic.
7
http://www.freebase.com
7
Figure 3: Voorbeeld van een Topic in freebase
Wat ons nu vooral interesseert is het Type Film. Dit Type maakt deel uit van het domein Film samen met een reeks andere Types. Film actor en Film genre zijn daar twee voorbeelden van. We zullen vanaf nu spreken over het Type Film/Film. Een Topic met als Type Film bevat een aantal eigenschappen waar we gebruik zullen van maken in de toekomst: Initial release date, Directed by, Performances, Genres, IMDb profile page, Poster. Ook daar zullen we de Wikipedia id achterhalen van een bepaalde film en op deze manier een link leggen naar bijkomende informatie. Freebase is in eerste instantie een website waar je moet inloggen om gebruik te maken van de beschikbare gegevens. Het stelt echter ook een krachtige API8 ter beschikking. Een Application Programmable Interface is een verzameling definities op basis waarvan een computerprogramma kan communiceren met een ander programma. Deze interface zal het mogelijk maken om de film metadata op te vragen via een eigen ontwikkelde applicatie. Het bedrijf Metaweb[1] heeft de Metaweb Query API ontwikkeld die aanspreekbaar is via het HTTP protocol met een GET methode naar een bepaalde
8
API: Application Programmable Interface
8
URL9.
In
het
geval
van
freebase
wordt
http://www.freebase.com/api/service/mqlread?queries=
deze
URL
gevolgd
gevormd
door
een
door: correct
geformuleerde query. Om een idee te krijgen van het type query dat moet gevormd worden volgt een klein voorbeeld: http://www.freebase.com/api/service/mqlread?queries={"albums":{"query": {"type":"/music/artist","name":"The Police","album":[]}}}
Vertaald naar het Nederlands wordt dit: “Geef een object uit de database van het type “/music/artist” met de naam “The Police”. Geef vervolgens zijn albums als resultaat”. De database kan via deze weg aangesproken worden met een query waarin gezocht wordt naar gegevens over een film. Net als de structuur van de query zal het resultaat weergeven worden in JSON10 formaat. JSON maakt onderdeel uit van JavaScript. Het wordt gebruikt voor het uitwisselen van datastructuren in webapplicaties die asynchroon gegevens ophalen. Het wordt door zijn eenvoud beschouwd als een alternatief voor XML11. Freebase is een goede kandidaat database waarop de te ontwikkelen applicatie kan gebaseerd worden. Het is vrij, gratis en kan gemakkelijk aangesproken worden via een HTTP request. Wel is, door gebruik te maken van de Metaweb Query API, de intelligentie van de queries beperkt. Bij een SQL12 database bijvoorbeeld, kan je meer functionaliteit geven aan de query. Een van de beperkingen, die gebleken zijn tijdens het onderzoek, is het ontbreken van een OR operator binnen een query. Als gevolg hiervan moeten meerdere asynchrone aanvragen gedaan worden aan de database en gaat kostbare verwerkingstijd verloren. Onvolledige Topics of onbestaande Topic kunnen ook bijdragen tot onvolledige resultaten in het onderzoek. Maar deze zullen dankzij de
9
URL: Uniform Resource Locator JSON: JavaScript Object Notation 11 XML: eXtensible Markup Language 12 SQL: Structured Query Language 10
9
groeiende populariteit van Freebase aangevuld worden en daardoor verminderen in aantal. Ondanks deze opmerkingen is de keuze gevallen om Freebase als database te gebruiken door zijn innovatieve en dynamische structuur.
10
2.3
Wikipedia
Als je vandaag denkt aan informatie en databanken, is Wikipedia13 onvermijdelijk één van je eerste gedachten. Door zijn omvang en populariteit is het dan ook ondenkbaar geen gebruik te maken van zijn beschikbare informatie. Een internetgebruiker die meer over een film te weten wil komen, zal meestal wel terechtkomen bij een van de honderdduizenden artikels van Wikipedia. Ook het feit dat bij Freebase een Wikipedia namespace aanwezig is die voor elk Topic een Wikipedia id bijhoudt, maakt het eenvoudig een link te leggen met de informatie die via Freebase wordt opgehaald. Het is nu de bedoeling via Wikipedia een korte beschrijving van een film op te halen. Een eerste stap is het zoeken van een gepaste API die de nodige gegevens kan opvragen. In eerste instantie lijkt een oplossing gegeven door een API aangeboden op Wikipedia.org: http://en.wikipedia.org/w/api.php. Maar bij nader onderzoek lijkt dit te beperkt om een beschrijving van een film op te halen en worden verwijzingen gegeven naar DBpedia[7][8]. Dit is een alternatief ontwikkeld door een team van Duitse universiteitsonderzoekers. Het laat de gebruiker toe complexe queries te formuleren tegen de datasets die van Wikipedia.org zijn gehaald. DBpedia maakt gebruik van de RDF14 standaard om metadata te structureren. RDF is een universele W3C15 standaard die gebruikt wordt om informatie op het Web voor te stellen. Het definieert een vocabulaire dat bestaat uit Classes, Properties, References,… om de data te structureren. Aan de hand van deze structuur kunnen we een query opstellen die ons de nodige informatie verschaft. De Virtuoso SPARQL Query16 Service stelt de gebruiker een API ter beschikking die via een SPARQL17 Query kan bevraagd worden. SPARQL is 13
http://www.wikipedia.org RDF: Resource Description Framework 15 W3C: World Wide Web Consortium 16 http://dbpedia.org/sparql 17 SPARQL: SPARQL Protocol and RDF Query Language 14
11
de standaard query taal voor RDF en het semantische web. Om een beschrijving van een onderwerp te krijgen, moet de juiste organisatie van de data gekend zijn. Na een studie van de documentatie over SPARQL en DBpedia komen we tot de volgende query waarin Twelve_Monkeys de Wikipedia id voorstelt die via Freebase opgehaald wordt. SELECT ?value WHERE {
?predicate ?value. ?precicate ?value. FILTER (LANG(?value) = 'en') . }
De beschrijving (abstract) van de film zal in het engels opgehaald worden door middel van een filter. Wegens de aanwezigheid van verschillende Wikipedia id’s in Freebase zal dit in sommige gevallen tot lege resultaten leiden, maar algemeen wordt toch goed aan de verwachtingen tegemoet gekomen.
12
2.4
YouTube
Als er onderzoek wordt gedaan rond video content, zijn naast de metadata, die het videofragment beschrijven de bewegende beelden niet te verwaarlozen. Het bekende spreekwoord luidt: “Een beeld zegt meer dan duizend woorden”. Er bestaan tegenwoordig tientallen sites waar je beelden kan bekijken van films. Maar uiteindelijk zijn er maar enkele, die toelaten dat andere webapplicaties hun gegevens gebruiken. Als dan ook nog eens gekeken wordt naar de beschikbaarheid is de keuze snel gemaakt. YouTube18 is een website die gebruikers toelaat videofilms te uploaden, te bekijken en te delen. Dankzij zijn immense populariteit is het dan ook de plaats om te zoeken wanneer je een fragment of een trailer van een film wil bekijken. YouTube stelt een API ter beschikking die het mogelijk maakt om vanuit een andere applicatie een zoekopdracht te doen. Dezelfde resultaten die je zou bekomen op de website www.youtube.com worden weergegeven in een lijst met de bijhorende verwijzingen naar de filmfragmenten. De metadata van de videofilms, die bij YouTube worden aangeboden, worden bijgehouden op basis van tags. “Die tag is een sleutelwoord of term geassocieerd met, toegewezen aan of opgenomen in een digitaal bestand”. Aan de hand van deze tags worden de videofilms geclassificeerd en geïndexeerd. Wanneer nu een zoekopdracht wordt ingegeven, zal gezocht worden naar het bestand dat het meeste overeenkomstige tags heeft. Na tests is gebleken dat de manier die de meest relevante resultaten weergaf een query is die bestaat uit de titel van een film én het woord “Trailer”. Bij de integratie van een YouTube player in de applicatie, moet een omweg gebruikt worden wegens veiligheidsbeperkingen. Hieraan zal verder aandacht worden besteed bij de beschrijving van de applicatie (5.2.6).
18
http://www.youtube.com
13
2.5
Yahoo
Als een gebruiker een zoekactie naar een bepaald onderwerp uitvoert, kan het gebeuren dat de zoektermen fouten bevatten. Deze fouten leiden meestal tot verkeerde of in het slechtste geval geen oplossingen. Grote zoekmachines hebben er zich dan ook in gespecialiseerd de tekortkomingen van de zoeker bij te sturen door suggesties te geven. Iedereen heeft wel eens bij een zoekopdracht de melding gekregen: “Did you mean?”. Spellingssuggesties zijn dan ook onmisbaar geworden op het Web als er naar termen moet gezocht worden waarvan je de correcte spelling niet helemaal weet. Zelf een dienst ontwikkelen die gepaste suggesties aan de gebruiker voorstelt bij het foutief spellen van een woord is een overbodige taak geworden dankzij de Yahoo19 Search Web Services. Een bibliotheek en de nodige informatie over de werking kan je downloaden op de developer site van Yahoo. Deze dienst kan gebruikt worden wanneer een gebruiker op een titel, regisseur, acteur of genre zoekt naar een film.
Een tweede dienst die Yahoo ter beschikking stelt is het gebruik van zijn zoekmachine. Bij het zoeken naar films is het gebruik van een zoekmachine nuttig gebleken[6] wanneer er op basis van kernwoorden gezocht moet worden. Indien de termen ingegeven worden als een zoekopdracht kan je door het bijvoegen van de term “site:imdb.com” de zoekactie beperken tot enkel de site van IMDb. Als je vervolgens enkel de filmtitels filtert uit de resultaten, bekom je een lijst van films die aan de ingevoerde termen voldoet. De opzoeking is hierbij volledig afhankelijk van de juiste keuze van termen en de Yahoo Search Engine.
19
http://www.yahoo.com , http://developer.yahoo.com/search
14
Hoofdstuk 3 Visualisatie Op het internet duiken steeds meer applicaties op die gebruik maken van visualisatietechnieken[4]. Tools worden ter beschikking gesteld om content op een overzichtelijke manier weer te geven. Een evolutie van de traditionele tekstuele presentatie naar een dynamische visuele presentatie vindt plaats. Een onderzoek naar bestaande applicaties is dan ook nodig om een beeld te krijgen van de mogelijkheden die deze nieuwe trend biedt. In alle informatie gebieden zien we reeds dat er onderzoek gedaan wordt naar de meerwaarde die een visuele presentatie aan de gebruiker kan leveren. Eerst zullen we twee voorbeelden bespreken die buiten de context van audiovisuele content vallen maar ons toch de aspecten van een grafische voorstelling van data toelichten. Nieuwsberichten worden niet enkel in kranten die op papier gedrukt worden maar ook op het internet voorgesteld in de traditionele vorm. Een krantenkop geeft de titel weer van het artikel waaronder de bijhorende tekst en eventuele illustratie te vinden is. De koppen worden in grootte aangepast naar gelang hun belangrijkheid. Newsmap20 is een applicatie die het veranderende informatielandschap van Google Nieuws21 visueel weergeeft. Een treemap visualisatiealgoritme helpt bij de voorstelling van een grote hoeveelheid aan informatie door ze voor te stellen als blokken. Een blok bevat een titel, een bepaalde kleur die naar een categorie verwijst en een zekere grootte naargelang de populariteit van het artikel. Bepaalde relaties tussen de verschillende artikels worden gebruikt om de krantenkoppen te groeperen in categorieën.
20 21
http://marumushi.com/apps/newsmap/newsmap.cfm http://news.google.com
15
Figure 4: Newsmap
Een effectieve voorstelling van grote hoeveelheden data die onderlinge relaties bevatten is een weergave als graaf. De nodes stellen in dit geval een dataobject voor en de links stellen de respectievelijke relaties voor tussen de objecten. Een thesaurus kan bijvoorbeeld eenvoudig weergegeven worden door een graafstructuur omdat het opgebouwd is uit woorden en de relaties tussen de woorden. Visual thesaurus22 stelt een applicatie ter beschikking die woorden voorstelt met gelijke betekenis als graaf.
Figure 5: ThinkmapVisual Thesaurus
22
http://www.visualthesaurus.com
16
Om nu terug te komen bij het studiegebied van dit project, zijn een aantal applicaties aanwezig op het Web die de visualisatie doen van audiovisuele content. Een voorkeur gaat voor verschillende ontwikkelaars uit naar audio data. Musicovery23 biedt de gebruiker de mogelijkheid te zoeken naar muziek op basis van voorgedefinieerde genres en deze te beluisteren. Ook een classificatie op basis van stemming, dansmuziek of persoonlijke voorkeur is aanwezig. De presentatie gebeurt op basis van een soort graaf die zal veranderen in vorm wanneer een gebruiker klikt op een bepaald liedje. Relaties tussen verschillende liedjes worden weergegeven door links. Zo ben je klaar om te vertrekken op een verkenningstocht naar nieuwe muziek.
Figure 6: Musicovery
Een gelijkaardige applicatie is MusicMap24. De voorstelling van de muziek gebeurt hier door een echte graafvoorstelling. Op basis van links worden relaties gelegd tussen verschillende muziekalbums. Elke node heeft de mogelijkheid de graaf uit te breiden, de
23 24
http://www.musicdiscovery.com http://www.dimvision.com/musicmap
17
node te verwijderen of extra informatie over het album weer te geven. Ook een zoekopdracht laat de gebruiker toe op zoek te gaan naar muziekalbums.
Figure 7: MusicMap
Maps of Recommendation25 is een andere online muziek applicatie. De functionaliteit verschilt met Musicovery. De bedoeling hier is dat je als gebruiker een lijst met muziektitels ingeeft en dat de applicatie op zoek gaat naar aanbevelingen. De eigen muzieknummers worden weergegeven door oranje nodes en de nieuwe liedjes door groene. Naarmate de afstand van de liedjes is er sprake van meer of minder relevantie. De grootte van de nodes legt dan weer een verband naar de populariteit van het liedje. Dit wordt als geheel weergegeven in een venster met de mogelijkheid de liedjes te beluisteren door erop te klikken. Het visualisatiealgoritme zal ervoor zorgen dat de nodes niet overlappen en dat de afstand tussen de nodes bepaald wordt door de relaties.
25
http://labs.mystrands.com/cgi-bin/recmap.cgi#demo
18
Figure 8: Maps of Recommendation
Een laatste voorbeeld brengt ons dichter bij het eigenlijke doel van dit project. Een applicatie ontwikkeld op basis van informatie afkomstig van Freebase.com. Filmspin26 geeft een voorstelling van filmdata op basis van zijn filmposter. Centraal wordt deze filmposter geplaatst met er rond de acteurs en regisseurs. Als je klikt op een acteur of een regisseur, wordt dit centraal geplaatst en de films waarin deze acteur meespeelt worden er rond weergegeven. Een zoekopdracht geeft de mogelijkheid te zoeken op basis van kernwoorden naar films, acteurs of regisseurs. Een handige applicatie wanneer je op zoek gaat naar filminformatie die enkel afkomstig is van Freebase.com Het systeem legt echter geen relaties tussen verschillende films.
26
http://kidbombay.com/clients/freebase/filmSpin
19
Figure 9: FilmSpin
Door gebruik te maken van een visualisatiealgoritme dat in zal staan voor de voorstelling van de films en de relaties tussen de verschillende films, zullen we een systeem ontwikkelen dat aan de gebruiker verschillende functionaliteiten biedt.
20
Hoofdstuk 4 High-level Architectuur
Figure 10: Architectuur
Het systeem is opgebouwd uit drie hoofddelen. De client kan in zijn browser de webapplicatie laden. Gebruikersgegevens worden opgehaald via de server waarop een databank aanwezig is. Het derde hoofddeel bestaat uit de webservices (Freebase, DBpedia, YouTube en Yahoo!). Er is gekozen voor een fat client27, wat betekent dat de meeste logica op het werkstation van de gebruiker wordt uitgevoerd. Gebruikersgegevens worden verwerkt op de server. De communicatie tussen de server en de client verloopt via het Simple Object Transfer Protocol (SOAP) over HTTP28. Aan de hand van een Web Services Description Language (WSDL) wordt de interface van de webservices aanwezig op de server beschreven. Zodra de client de beschrijving van de webservices leest, kunnen berichten 27 28
Fat client: Rijke functionaliteit wordt geboden door de client, onafhankelijk van de server. HTTP: HyperText Transfer Protocol
21
uitgewisseld worden in het XML gestructureerde SOAP formaat. Andere gegevens, als bijvoorbeeld een trailer, worden opgehaald en bijgehouden op het internet. De Freebase webservice vormt de hoofdbron van informatie en is noodzakelijk voor de werking van het programma. Het is echter mogelijk de applicatie te gebruiken indien enkele andere van de informatiediensten buiten werking zijn. Yahoo!, DBpedia, YouTube bieden de applicatie enkele bijkomende functionaliteiten die beschreven worden in 5.2. De gebruikte technologieën op de client en de server worden beschreven in respectievelijk 5.1 en 6.1.
22
Hoofdstuk 5 Client 5.1
Technologie gebruikersinterface
Het basisidee is een webapplicatie te ontwikkelen die het de gebruiker toelaat op een visuele manier op zoek te gaan naar nieuwe films. Verschillende technologieën geven de mogelijkheid een interactieve gebruikersinterface te creëren en er zal dus een keuze moeten gemaakt worden op basis van de vereisten van de frontend: de communicatie met webservices, het gebruik van een visualisatiecomponent en de mogelijkheid tot voorstelling in een browser. Een overtuigende factor in de technologiekeuze was het bestaan van de SpringGraph Flex Component29. SpringGraph is een Adobe Flex 2.0 component die je toelaat gegevens weer te geven door middel van items en relaties. De component berekent de voorstelling van de graaf door gebruik te maken van een “organic-looking annealing” algoritme gebaseerd op de grootte van de items en de lijnen die de relaties tussen de items voorstellen. De naam van het algoritme is afkomstig van de Engelse term ‘annealing’ (uitgloeien). Het verwijst naar een techniek waarbij metaal verhit wordt en daarna gecontroleerd wordt afgekoeld om de grootte van de kristallen binnen het materiaal te vergroten en daarmee het aantal defecten te verkleinen. Met dit proces in gedachte, werd een combinatorisch optimalisatie algoritme bedacht. Een combinatorisch optimalisatie probleem heeft twee hoofdonderdelen: een groep variabelen die samen de toestandsruimte definiëren en een waardering die aangeeft of een oplossing een goede oplossing kan zijn. In het geval van een visualisatie van een graaf, zal gezocht worden naar de ideale plaats van de nodes om de graaf overzichtelijk te maken. De plaats van de nodes wordt 29
http://mark-shepherd.com/blog/springgraph-flex-component
23
beperkt door de links, die elk dezelfde lengte zullen hebben. Door middel van een aantal iteraties zal een oplossing gevonden worden dat niet noodzakelijk het globale optimum is. Het algoritme dat gebruikt wordt in de Springgraph Flex Component is gebaseerd op de door Alexander Shapiro30 ontwikkelde TouchGraph31. Het is een open source visualisatie interface geschreven in Java. TouchGraph Amazon, TouchGraph Google en TouchGraph facebook zijn drie applicaties ontwikkelt op het visualisatie platform van TouchGraph. Een visualisatie component in flex werd op basis hiervan ontwikkeld door een Senior Computer Scientist aan Adobe in San Francisco, Mark Shepherd. Hij is tevens een lid van het FlexBuilder Engineering Team.
Figure 11: Voorbeeld Springgraph Component
FlexBuilder32 is een programmeeromgeving voor Adobe Flex 2.033. Flex-applicaties kunnen gebouwd worden door middel van de programmeertalen Macromedia Flex Markup Language34 (MXML) en Actionscript 3.035. MXML is een XML gebaseerde taal waarmee je de lay-out van de gebruikersinterface van de applicatie kan neerzetten. 30
http://www.touchgraph.com/management-team.html http://touchgraph.com 32 http://www.adobe.com/flex/flexbuilder/ 33 http://www.adobe.com/products/flex 34 http://www.adobe.com/devnet/flex/mxml 35 http://www.adobe.com/devnet/actionscript/articles/actionscript3_overview.html 31
24
Deze taal zal dus voornamelijk gebruikt worden om visuele componenten te initialiseren. Actionscript is een scripttaal die kan ingevoerd worden in MXML om de eigenlijke logica van de visuele componenten te implementeren. Rich Internet Applications (RIA) kunnen met behulp van deze twee talen ontwikkeld worden. De gebruiker kan dergelijke applicatie bekijken door middel van een Flash Player die aanwezig is in een internetbrowser. Twee mogelijke programmeeromgevingen die ter beschikking worden gesteld zijn Adobe Flex Builder 2 en Eclipse met bijhorende Eclipse Web Tools. Een bijkomende Hotfix zal moeten geïnstalleerd worden die belangrijke fouten verwijdert. Zo treedt er bijvoorbeeld een fout op wanneer je de applicatie laat communiceren met een server over SOAP36.
36
SOAP: Simple Object Access Protocol
25
5.2
Functionaliteiten
Een internetgebruiker kan naar de webapplicatie surfen door het URL37 adres in te geven in zijn browser. De mogelijkheid te registeren en in te loggen is aanwezig en zal nodig zijn voor de aanmaak van een gebruikersprofiel. Het inloggen is niet noodzakelijk om gebruik te maken van de verschillende functionaliteiten die niet gebonden zijn aan een profiel. Het belangrijkste aspect van de applicatie is de manier waarop relaties worden gelegd tussen de aanwezige data.
Figure 12: Screenshot van de Applicatie
37
URL: Uniform Resource Locator
26
5.2.1
Relaties
In de filmcontext moet eerst besloten worden op basis van welke informatie relaties zullen gelegd worden tussen verscheidene films. Hiervoor gaan we terug naar de informatiebron Freebase. Bij deze online database vinden we metadata terug die gebruikt kunnen worden om gerelateerde films te definiëren. Per film zijn de regisseur(s), de hoofdacteur(s) en genre(s) aanwezig. Op basis van deze drie eigenschappen zullen we een coëfficiënt berekenen, die de mate van relevantie tussen films weergeeft. Een bepaalde film zal bijvoorbeeld een verband hebben met een andere film indien er eenzelfde acteur meespeelt. Wanneer we nu een film beschouwen met een regisseur, enkele acteurs en genres, kunnen we op zoek gaan naar een reeks films die minstens één eigenschap gemeenschappelijk hebben. Specifiek wordt gezocht naar alle films van de regisseur van de eerste film, alle films van de acteurs die meespelen en alle films die van hetzelfde genre zijn. Dit gebeurt door een reeks van zoekopdrachten waarvan de resultaten dienen als input voor het bepalen van de relevantie. Om relevantie te berekenen tussen data, op basis van kernwoorden, bestaan er verschillende methodes.
5.2.1.1
Gewogen gemiddelde
De input van deze functie is een lijst met films die op basis van eigenschappen van een zoekfilm38 zijn gevonden. Elke film in deze lijst wordt vergeleken met de zoekfilm en een resultaat wordt bijgehouden. Dit resultaat is een waarde tussen 0 en 1, die de equivalentie tussen beide films weergeeft. Deze waarde wordt berekend met behulp van een gewogen gemiddelde:
38
Zoekfilm: Film waarvan de eigenschappen gebruikt worden voor het zoeken naar relevante films.
27
E(F1,F2) = A(F1,F2) . w1 + D(F1,F2) . w2 + G(F1,F2) . w3
De waarden w1, w2 en w3 zijn aanpasbare gewichten. De functie E(F1,F2) is de equivalentie tussen beide films (F1 en F2). De functie A(F1,F2) geeft het gemiddelde aantal acteurs dat de onderzochte film (F2) heeft die ook terug te vinden waren bij de zoekfilm (F1). De functies D(F1,F2) en G(F1,F2) worden op dezelfde manier berekend voor respectievelijk regisseur en genre. Voorbeeld: •
zoekfilm: D(F1) = {rA}, A(F1) = {aA, aB, aC, aD} en G(F1) = {gA, gB}
•
onderzochte film: D(F2) = {rB}, A(F2) = {aA, aC} en G(F1) = {gA}
•
De verzamelingen A(F), D(F) en G(F) stellen de acteurs, regisseurs en genres voor uit de film F. Ö de waarde A(F1,F2) in het gewogen gemiddelde zal 2/4 zijn Ö de waarde D(F1,F2) = 0 Ö de waarde G(F1,F2) = 1/2
Met gelijke gewichten geeft dit:
1/2 . 1/3 + 0 . 1/3 + 2/4 . 1/3 Na de berekening van deze equivalenties, wordt een lijst gevormd. Enkel de films met de hoogste waarden zullen weergegeven worden door de applicatie. Dat aantal kan bepaald worden door de gebruiker zelf, net als de waarde van de gewichten. De berekeningscomplexiteit zal afhankelijk zijn van het aantal films in de gegevenslijst en het aantal eigenschappen dat elke film bevat. Elke regisseur van de zoekfilm moet vergeleken worden met alle regisseurs van een gerelateerde film. Hetzelfde geldt voor de acteurs en genres. De complexiteit van één vergelijking tussen twee films is: #A(F1) * #A(F2) + #D(F1) * #D(F2) + #G(F1) * #G(F2)
28
#A(F1): aantal acteurs in film 1 #A(F2): aantal acteurs in film 2 #D(F1): aantal regisseurs in film 1 #D(F2): aantal regisseurs in film 2 #G(F1): aantal genres in film 1 #G(F2): aantal genres in film 2
5.2.1.2
Vectorruimte
Een alternatieve berekening van de relaties bestaat uit het opbouwen van een vector per film. Drie dimensies zijn voldoende om de eigenschappen te verdelen in een vectorruimte. De eerste dimensie geeft een waarde terug voor het aantal overeenkomstige acteurs. De tweede en derde dimensie voor respectievelijk regisseur en genre. De berekening van deze waarden gebeurt door weer te geven hoeveel eigenschappen een film heeft die ook terug te vinden zijn bij de zoekfilm. Voorbeeld: •
zoekfilm: A(F1) = {aA, aB, aC, aD} Ö de eerste dimensie van de zoekfilm heeft een waarde 4
•
onderzochte film: A(F2) = {aB, aC,aE}, Ö de eerste dimensie van de onderzochte film heeft een waarde 2
Na de berekening van een vector voor elke film, ontstaat een vectorruimte met drie dimensies (x, y en z). De hoek tussen de vectoren van de gevonden films en de zoekfilm wordt berekend door de volgende formule:
29
De films met de kleinste hoek en dus de grootste cosinus waarde worden voorgesteld aan de gebruiker. Het is echter moeilijk om de gewichten van de verschillende eigenschappen aan te passen.
Bij de implementatie werd gekozen voor het gewogen gemiddelde algoritme wegens de korte berekeningsmethode en de eenvoudige aanpassing van de gewichten. Om nadien duidelijk de verschillende relaties tussen de films voor te stellen door verbindingen met verschillende grafische eigenschappen, wordt bijgehouden wanneer de film een regisseur, een acteur, een genre of een combinatie van deze eigenschappen in overeenstemming heeft met de zoekfilm.
30
5.2.2
Zoekopdrachten
Figure 13: Zoekopdrachten
Een gebruiker die op zoek wil gaan naar informatie over films zal in eerste instantie nood hebben aan enkele zoekopdrachten. De applicatie zal dan ook verscheidene zoekfuncties ter beschikking stellen. De eerste zoekopdracht maakt het mogelijk te zoeken op filmtitel. Niet enkel de film die voldoet aan het zoekcriteria zal weergegeven worden, maar er zal gezocht worden naar gerelateerde films. Dit gebeurt door de berekening van een gewogen gemiddelde (5.2.1.1). De gegevens gebruikt voor de berekening zijn afkomstig van Freebase. Een
31
eerste query die de filmtitel bevat haalt de gegevens van de gezochte film op. De query is gebaseerd op het JSON39-formaat en ziet er als volgt uit: { "qname":{ "query":{ "key":[{ "namespace":{ "id":"/wikipedia/en", "name":"en" }, "value":null }], "genre":[], "directed_by":[], "initial_release_date":[], "id" : null, "imdb_id" : [], "name" : titel, "directed_by" : null, "type" : "/film/film", "starring" : [{ "actor" : null }], "poster" : { "id":null } } } }
Enkele van deze gegevens worden alleen gebruikt voor presentatie. De waarden directed_by, actor en genre worden gebruikt om gerelateerde films op te halen. De queries die films ophalen met dezelfde regisseur, acteur of genre hebben ongeveer dezelfde structuur als voorgaande query. Deze queries worden ook gebruikt om aan de gebruiker de optie te geven films te zoeken van een bepaalde regisseur, acteur of genre. Hier worden enkel de gevonden films weergegeven. Er worden geen gerelateerde gegevens verwerkt. Een laatste zoekopdracht geeft de gebruiker meer vrijheid in het zoeken naar films. In plaats van gebruik te maken van de zoekdiensten van Freebase, zoekt het systeem via de zoekmachine Yahoo!. Dit geeft de optie om niet enkel te zoeken op voorgedefinieerde eigenschappen, maar ook op met de film gerelateerde kernwoorden. 39
JSON: Javascript Object Notation
32
Stel dat je als gebruiker een film in gedachten hebt waarvan je niet direct een acteur of regisseur weet, maar je kunt echter wel een paar kernwoorden formuleren over de film. Op basis van deze termen kan het systeem een zoekopdracht formuleren. Omdat je zeker films als resultaat wilt bekomen, zal een beperking opgelegd worden. De zoekopdracht wordt beperkt tot de site www.IMDb.com. De Internet Movie Database (IMDb) bevat een uitgebreide bibliotheek films. De URL van een film heeft steeds dezelfde structuur: http://www.imdb.com/title/id. De id is een unieke sleutel die een film definieert. Er zullen enkel titels aanvaard worden die teruggevonden zijn op een webpagina met een titelstructuur. Een lijst filmtitels zal als resultaat teruggegeven worden door de Yahoo! Search Api. Per titel wordt informatie opgehaald uit de Freebase databank. Uiteindelijk krijgt de gebruiker een groep films die verband houden met de ingegeven zoektermen.
Bij elke zoekopdracht kan een filter ingesteld worden. De filter beperkt de resultaten tot de ingegeven tijdsperiode. Wil je enkel films zien uit de jaren 90, dan moet je deze periode aanklikken en een zoekopdracht uitvoeren of browsen door de films. Wanneer je de waarde op ‘all’ zet, zullen alle jaartallen beschikbaar zijn.
De zoekopdrachten die gebaseerd zijn op Freebase queries worden eerst gecontroleerd op correcte spelling. Indien de gebruiker een filmtitel, regisseur, acteur of genre ingeeft met een verkeerde spelling, vindt het systeem in eerste instantie geen positief resultaat. Een “Did you Mean?” functie geeft aan de gebruiker een spellingsuggestie waardoor hij een nieuwe zoekopdracht kan uitvoeren. Ook deze dienst wordt verleend door de Yahoo! Search API.
33
5.2.3
Tekstuele weergave
Het belangrijkste aspect bij de grafische weergave van de gegevens is de voorstelling door het visualisatiealgoritme. Er moet echter ook een duidelijke presentatie aanwezig zijn van de tekstuele data die de film beschrijven. Als detailgegevens gebruiken we: titel, jaartal, regisseurs, acteurs, genres, filmposter, beoordeling, IMDb URL en een korte inhoud. De korte inhoud is afkomstig van DBpedia. De community beoordeling wordt berekend op de server en aan de client weergegeven. De overige gegevens worden opgehaald via de Freebase API waaronder een wikipedia id die uniek is voor elke film. Een SPARQL query wordt gestuurd naar DBpedia met de wikipedia id als zoekterm. Het resultaat bestaat uit een Engelstalige korte beschrijving van de film.
Figure 14: Filmdetails
34
De informatie wordt geladen in een apart tabblad wanneer de gebruiker klikt op een poster uit de grafische weergave. Een klik op de filmposter brengt de gebruiker naar de corresponderende IMDb webpagina waar bijkomende informatie terug te vinden is.
5.2.4 Grafische weergave
Figure 15: Grafische voorstelling
Om grote hoeveelheden data overzichtelijk weer te geven, wordt dikwijls gebruik gemaakt van een graafstructuur. Niet de klassieke weergave als, een 2-dimensionale lijst met links maar een grafisch beeld wordt weergegeven. Je krijgt een duidelijk
35
overzicht van welke gegevens aanwezig zijn, en hoe die in relatie staan tot andere. Het algoritme van de grafische component zoek een ideale voostelling van de graaf zodat geen links overlappen. Een film wordt voorgesteld door een filmposter. Bij een zoekopdracht op filmtitel staat de gevonden film centraal en worden rond deze node de gerelateerde films weergegeven. De relatie die een film heeft tot de centrale film wordt berekend door een gewogen gemiddelde dat besproken werd in de paragraaf over relaties (5.2.1). De gebruiker kan nu zien welke relaties bestaan tussen de films. Op basis van drie eigenschappen worden de relaties bepaald: acteur, regisseur en genre. Combinaties van deze eigenschappen zorgen voor bijkomende soorten relaties. Het wel of niet gemeenschappelijk hebben van een acteur geeft de link een rode of zwarte kleur. Eenzelfde regisseur zal de dikte van de link vergroten. Voor een gelijkenis in genre wordt de opaakheid van de link aangepast. Zeven verschillende types links tussen films zijn mogelijk:
Figure 16: Legende van de relaties
Een gebruiker is in staat door de films te browsen. Een enkele klik geeft de detailinformatie over de film weer in het daarvoor bestemde tabblad en het systeem zoekt naar enkele films die gerelateerd zijn aan de aangeklikte film. Deze films worden aan de graaf toegevoegd met links naar de aangeklikte film naargelang de relatie tussen de twee. Door dit proces te herhalen is het mogelijk dat de graaf te groot wordt voor het
36
venster waarin hij wordt weergegeven. Het is dan ook mogelijk de eigenschappen van de graaf aan te passen om de visuele voorstelling overzichtelijk te maken. Dubbel klikken op een node maakt van deze node de centrale film. Een zoekopdracht voegt de meest gerelateerde films toe aan de centrale node. De kleur, dikte en opaakheid van de links wordt ingesteld op basis van hun relatie tot de centrale film. Wanneer je de muis beweegt over een filmposter krijg je een tooltip te zien. De titel, regisseurs, acteurs en genres woorden hierin weergegeven.
De instellingen van de graaf die aangepast kunnen worden zijn gebundeld in een tabblad ‘Settings’.
37
5.2.5
Instellingen
Figure 17: Instellingen
De lengte van de links van de graaf kan je aanpassen door de Repulsion slider te verschuiven. Ook het formaat van de filmposters kan je vergroten of verkleinen door de parameter ‘Size’ te veranderen. Indien de graaf voor een deel buiten het beeld valt, kan je de graaf als geheel verslepen voor betere zichtbaarheid van de films. Het is mogelijk het aantal gerelateerde films, dat weergegeven wordt, aan te passen. Bij de volgende actie zal de nieuwe waarde voor de parameter ‘Number of displayed nodes’ gebruikt worden. Ook het aantal films dat aan de graaf wordt toegevoegd, wanneer er
38
enkel geklikt wordt op een film, kan aangepast worden met een maximum waarde van 10 (Number of extra displayed nodes) en een minimum waarde van 0. Indien deze laatste waarde ingesteld is, zal enkel de detailinformatie geladen worden. Geen bijkomende films worden gezocht. De films die worden toegevoegd aan de graaf worden gezocht op basis van hun relatie tot de aangeklikte film of de film die gezocht wordt op titel. De gebruiker kan de gewichten van deze relaties aanpassen. Initieel hebben de gewichten dezelfde waarde. Een relatie door een gelijkenis in regisseur is even belangrijk als de relatie acteur of genre. Wanneer de gewichten worden aangepast zal de graaf zich automatisch herladen met dezelfde centrale film. De meest gerelateerde films worden nu gezocht met behulp van de nieuwe gewichten. In het ‘Settings’ tabblad is ook een overzicht te zien van de relaties tussen de films.
39
5.2.6
Videobeelden
Figure 18: Video Player
De enige gratis vorm van filmbeelden die je op het internet kan vinden is een trailer of een preview. Het geeft een idee waarover de film gaat en waarom je hem zou willen bekijken. De verspreiding van trailers is echter zo groot dat een dienst die een bundeling van trailers geeft moeilijk te vinden is. Op YouTube is een grote hoeveelheid aan trailers, filmfragmenten, previews,… aanwezig. De applicatie zal de zoekfunctionaliteiten van de YouTube API gebruiken. Als je op de site van youtube.com zoekt naar een filmtrailer zal je de titel ingeven gevolgd door de tag: “Trailer”. Dezelfde zoekopdracht wordt
40
uitgevoerd door het systeem. Een beperking is echter dat YouTube het niet toelaat meerdere videofragmenten te laden in een Flex applicatie. Door zelf een video speler te ontwikkelen, werd deze veiligheidsbeperking omzeild. De basisfunctionaliteiten zijn aanwezig zoals play, stop, pauze, volume beheer en een weergave van het tijdsverloop van het fragment. De component VideoDisplay die aanwezig is in de Flex bibliotheek wordt gebruikt voor het afspelen van de video. In plaats van de YouTube Player te laden aan de hand van de verkregen zoekresultaten moet een URL aanvraag gedaan worden. Je krijgt na de zoekopdracht op basis van een aantal tags een lijst met URL’s van fragmenten. Wanneer je deze rechtstreeks laadt in de Flex applicatie verlies je de controle over de component. Geen nieuwe fragmenten kunnen afgespeeld worden. Als een GET aanvraag wordt uitgevoerd naar de verkregen URL en uit de ontvangen header de nodige informatie gehaald wordt, kan het videobestand rechtstreeks in een VideoDisplay component worden geladen. Het bestand is een .flv40 file. Dit is een Flash bestandstype dat gebruikt wordt voor videostreaming. Een nadeel van deze werkwijze is dat de gevonden resultaten niet altijd de correcte beelden weergeven. Het is mogelijk dat een trailer niet aanwezig is op de website of dat een filmfragment wordt geladen dat aan dezelfde tags voldoet maar niet relevant is. Het percentage foutieve trailers is niet significant genoeg om deze feature te laten vallen. Een mogelijke uitbreiding is het gebruik van meerdere bronnen om betere resultaten te kunnen garanderen.
40
FLV: Flash Video
41
5.2.7
Gebruikersprofiel
Figure 19: Login
Per gebruiker worden gegevens bijgehouden in de databank. Niet enkel login gegevens maar ook gegevens over de interactie van de gebruiker met de applicatie. Deze gegevens beschrijven het profiel van de gebruiker en zullen gebruikt worden om bijkomende functionaliteiten aan te bieden. Aan de gebruiker wordt de mogelijkheid geboden zich aan te melden aan de hand van een gebruikersnaam en paswoord. Deze gegevens worden gecontroleerd op de server met de gegevens uit de database. Twee mogelijke situaties kunnen zich dan voordoen: foutieve aanmelding of een positieve aanmelding. Bij een verkeerde gebruikersnaam of paswoord wordt de mogelijkheid gegeven opnieuw te proberen.
Figure 20: Foutieve Login
Wanneer correcte gegevens worden ingegeven, krijgt de gebruiker een welkomstbericht gepresenteerd. Vier bijkomende diensten van de applicatie zijn nu ter beschikking.
Figure 21: Welkomstbericht
De werking van deze diensten wordt beschreven in het onderdeel over de server. Hier volgt een korte beschrijving van de voorstelling in de gebruikersinterface.
42
5.2.7.1
Mijn profiel
Figure 22: Gebruikersprofiel
Het opstellen van een gebruikersprofiel vereist gegevens over de interesses van de gebruiker. Deze worden verzameld tijdens het gebruik van de applicatie. Er wordt bijgehouden naar welke regisseurs, acteurs of genres de gebruiker zoekopdrachten gedefinieerd werden. Wanneer een nieuwe gebruiker zich de eerste keer aanmeldt, is er nog geen informatie over het zijn gedrag aanwezig in de databank. Het is dan ook onmogelijk suggesties te geven. Om dit probleem van koude start te verhelpen wordt een lijst van 30 films gepresenteerd aan de gebruiker. Een beoordeling kan gegeven worden aan elke film op basis van zes waarden: niet geïnteresseerd, 1 ster, 2 sterren, …, 5 sterren en geïnteresseerd. Het aanklikken van een film geeft een beschrijving van de film zoals besproken in het onderdeel over tekstuele weergave (5.2.3). De mogelijkheid bestaat
43
om een trailer te bekijken van de film. Indien de gebruiker een film niet kent, kan hij aan de hand van deze informatie een waarde geïnteresseerd tot niet geïnteresseerd geven. De beoordelingen worden vervolgens geanalyseerd en de gegevens worden bijgehouden in de databank. Een verdeling van de films per genre houdt een gemiddelde waarde per genre bij.
5.2.7.2
Gelijkaardige gebruikers.
Figure 23:Gebruikers met gelijkaardige interesses
Een graaf met gebruikers met dezelfde interesses kan voorgesteld worden aan de aangemelde gebruiker. Centraal staat deze actieve gebruiker. Met links zijn de gelijkaardige gebruikers verbonden aan de centrale node. Het aantal gebruikers aanwezig in de graaf kan aangepast worden door de gebruiker.
44
5.2.7.3
Suggesties
In het tabblad voor de zoekacties is een bijkomende zoekopdracht aanwezig. Van zodra gegevens over een gebruiker aanwezig zijn in de databank, kan de gebruiker suggesties krijgen. Deze recommandaties worden weergegeven als een graaf waar geen centrale node aanwezig is.
5.2.7.4
Beoordelingssysteem
Een laatste dienst, die door de server wordt ondersteund, is een beoordelingssysteem. In het tabblad waar de informatie over een film weergegeven wordt, is een veld aanwezig voor een waardering van de film. De waarde wordt voorgesteld door een aantal sterren. Het aantal sterren gaat van 1 tot 5 naar gelang de film een slechte of een goede gemiddelde beoordeling heeft. Een gebruiker kan zijn eigen beoordeling toevoegen of aanpassen in de berekening door op het veld te klikken.
45
5.2.8
Help
Figure 24: Help
Om de gebruiker een beeld te geven welke functionaliteiten de applicatie te bieden heeft, is er een Help tabblad aanwezig. Een korte beschrijving van enkele functionaliteiten en hun werkwijze wordt hier beschreven: dubbel klikken: neemt de aangeklikte node als centrale node en er wordt gezocht naar gerelateerde films enkel klikken: voegt bijkomende films toe aan de graaf op basis van hun relatie tot de aangeklikte film. Beide muisfuncties laden de detailinformatie van de aangeklikte film in het Details tabblad. Het Search tabblad laat je toe zoekopdrachten uit te voeren op basis van filmtitel, regisseur, acteur, genre of kernwoorden. Op
46
basis van het gebruikersprofiel kunnen suggesties gegeven worden aan de gebruiker. Als je klikt op de poster in het Details tabblad, wordt doorverwezen naar de IMDb pagina van de voorgestelde film.
je
Om een Trailer te bekijken, moet je eerst de details van een film laden in het Detail tabblad en dan moet je op het Trailer tabblad klikken. Eigenschappen van de graaf kunnen aangepast worden in het Settings tabblad. De verschillende relatietypes zijn beschreven in het Settings tabblad. Je kunt de gewichten van de relaties veranderen door de sliders te verslepen. Twee mogelijkheden bestaan om de graaf te verslepen: - Je kunt de graaf verslepen om een beter overzicht te krijgen door naast de graaf te klikken. - Je kunt de film verslepen door erop te klikken en te verplaatsen.
47
5.3 5.3.1
Software Klassendiagram
Figure 25: Klassendiagram
48
5.3.2
Klassen
5.3.2.1
DisplayItem
Beschrijving: DisplayItem breidt de klasse Item uit. Hierdoor kan een object van deze klasse toegevoegd worden aan de graaf en kan de grafische voorstelling bepaald worden van een Item. Elke film wordt voorgesteld door een variabele van de klasse DisplayItem. Deze klasse bevat een aantal variabelen die de film omschrijven: filmtitel, een filmposter, een link naar IMDb.com, acteurs, regisseurs, genres en abstract. De belangrijkste methode van deze klasse is een functie die twee films met elkaar kan vergelijken. Op basis van de methode bespoken in de paragraaf over relaties, worden films vergeleken in gelijkenis van
regisseurs,
acteurs
en
genres.
Als
resultaat
geeft
deze
functie
een
‘gelijkheidswaarde’ terug. De ‘abstract’ waarde is een korte beschrijving van de film die opgehaald wordt van DBpedia. Variabelen: public var name:String;
//filmtitel
public var site:String;
//imdb site url: imdb_id
public var imageURL:String;
//filmposter url
public var directors:Array = new Array();
//lijst van regisseurs
public var actors:Array = new Array();
//lijst van acteurs
public var genres:Array = new Array();
//lijst van genres
public var date:String;
//jaartal
public var abstract:String;
//korte inhoud
Methodes:
49
public function compare(item:DisplayItem,dW:Number,aW:Number,gW:Number) :Array De berekening op basis van het gewogen gemiddelde tussen twee DisplayItems is het doel van deze functie. De gewichten worden als argumenten weergegeven. Het resultaat is een waarde die de gelijkheid aangeeft en een waarde die aanduidt welke relaties er bestaan. Deze twee waarden zijn later nodig voor de weergave van de films als nodes en de bepaling van het type link tussen de nodes. public function wikiResult(event:ResultEvent):void Deze methode wordt opgeroepen om de korte inhoud die opgehaald is van DBpedia te verwerken.
5.3.2.2
DisplayRelated
Beschrijving: Deze klasse zal instaan voor het ophalen van informatie over films. De data worden opgehaald en in een lijst van DisplayItems bijgehouden. Vervolgens worden de films geordend naar meest gerelateerde film. Er wordt beslist welke films weergegeven worden op basis van hun ‘gelijkheidswaarde’. De gewichten die nodig zijn bij deze berekening worden aan deze klasse doorgegeven. De filmitems worden in een graaf geladen. De bijhorende relaties tussen de films kunnen ook in de graaf gedefinieerd worden. Ook wanneer gezocht wordt op een bepaalde acteur, regisseur, genre of suggesties gevraagd worden op basis van het gebruikersprofiel, worden de resultaten hier verwerkt en bijgehouden in een graaf. Variabelen: public var list:Array = new Array();
// lijst van films
public var g:Graph = new Graph();
//graaf met films
public var directorW:Number = 1/3;
//gewicht regisseur
50
public var actorW:Number = 1/3;
//gewicht acteur
public var genreW:Number = 1/3;
//gewicht genre
Methodes: public function rate():void In deze functie wordt een lijst van films gebruikt als input. De film waarop geklikt wordt of de film waarop je zoekt, wordt gebruikt als referentie film. Alle andere films worden vergeleken met deze film en een gelijkheidswaarde wordt toegevoegd aan elke film. Bij deze vergelijking wordt de Compare-functie gebruikt uit de DisplayItem klasse. Op basis van deze lijst wordt nu beslist welke film weergegeven worden door de applicatie. Het aantal films, dat wordt weergegeven, kan gekozen worden door de gebruiker. public function display(film:Object):void Zes functies hebben dezelfde opmaak. Hierin kan de volgende waarden bevatten: Start, Click, Director, Actor, Genre en Extra. displayStart: wordt gebruikt bij de initiatie van de graaf displayClick: wordt gebruikt wanneer er op een node dubbel geklikt wordt displayExtra: wordt gebruikt wanneer er eenmaal geklikt wordt op een film De andere functies worden gebruikt bij het zoeken naar een regisseur, acteur of genre.
5.3.2.3
FreebaseService
Beschrijving: Alle informatie die via Freebase.com nodig is voor de applicatie wordt via een query aangevraagd. De queries worden opgesteld op basis van een JSON structuur die achter de api-url van Freebase wordt toegevoegd. Een webservice wordt opgesteld aan de hand van de gevormde url. De resultaten worden opgevangen in de klasse waar de methode wordt opgeroepen.
51
Variabelen: private static var urlBase:String = http://www.freebase.com/api/service/mqlread? queries=; Methodes: public static function useWebService(id:String,name:String,client:Object):void public static function filmByTitle(name:String): String public static function filmsByDirector(director:String):String public static function filmsByActor(actor:String):String public static function filmsByGenre(name:String): String De eerste methode stelt een webservice op aan de hand van de methodes die eronder vermeld staan. Elk van deze laatste methodes geven een query in de vorm van een String terug. De id, die als argument wordt meegegeven, bepaalt welk type query er moet gevormd worden. De variabele ‘name’ heeft een waarde voor de titel, de acteur, de regisseur of het genre.
5.3.2.4
WikipediaService
Beschrijving: Een filmbeschrijving kan opgehaald worden aan de hand van zijn wikipedia id. Een HTTPService wordt opgesteld aan de hand van een SPARQL query en de URL van de DBpedia service. Een korte inhoud wordt weergegeven. Variabelen: Methodes: public static function useWebService(wikiId:String,client:Object):void public static function wikiAbstract(wikiId:String):String
52
De eerste methode maakt een HTTPService aan op basis van de url verkregen uit de tweede methode. De resultaten worden opgevangen in de klasse waar de methode werd opgeroepen.
5.3.2.5
YahooService
Beschrijving: Bij elke zoekopdracht is een spellingscorrectie aanwezig. Een flexbibliotheek van Yahoo laat toe functies te gebruiken, die in staat zijn een spellingssuggestie te zoeken bij een ingevoerde zoekterm. Twee klassen worden gebruikt: SearchService en SearchParams. SearchService is een dienst die naar suggesties zoekt op basis van de parameters uit de SearchParams klasse. Variabelen: public var searchService:SearchService = new SearchService(); public var searchParams:SearchParams = new SearchParams(); Methodes: public function YahooService(id:String,title:String,client:Object):void Een webservice wordt opgesteld. Aan de hand van de titel wordt naar spellingsuggesties gezocht. Het resultaat wordt opgevangen in de klasse die de methode aanspreekt.
53
5.3.2.6
YahooServiceKeyword
Beschrijving: Omdat zoekopdrachten op specifieke eigenschappen als titel, regisseur, acteur en genre dikwijls niet voldoen aan de eisen van de gebruiker laat de applicatie toe een zoekopdracht te formuleren op basis van kernwoorden. De flexbibliotheek van Yahoo wordt hierbij gebruikt. Enkele kernwoorden, ingegeven door de gebruiker, vormen hier de zoekopdracht, die beperkt wordt tot de site imdb.com. De resultaten, die door de searchService klasse van Yahoo weergegeven worden, zijn filmtitels. De informatie over deze films wordt vervolgens opgehaald via Freebase.com en toegevoegd aan een graaf. Variabelen: public var g:Graph = new Graph() public var searchService:SearchService = new SearchService(); public var searchParams:SearchParams = new SearchParams(); Methodes: public function YahooServiceKeyword(keywords:String,max:int):void public function displayKeywordOneByOne(name:String):void YahooServiceKeyword maakt gebruik van de searchService klasse. Kernwoorden en een maximum, dat aangeeft hoeveel resultaten weegegeven moeten worden, zijn de argumenten van deze functie. Eens de resultaten bekend zijn, worden de gegevens over de films één voor één opgehaald en toegevoegd aan een graaf. De grafische weergave van de films gebeurt hierna.
54
5.3.2.7
UserInfoService
Beschrijving: Informatie over het gedrag van de gebruiker kan bijgehouden worden in een database. De communicatie voor het opslaan van gebruikersgeschiedenis gebeurt via deze klasse. Een webservice, die communiceert met de server, wordt aangemaakt en verstuurt vervolgens de gegevens over SOAP. Variabelen: public var webServ:WebService = new WebService(); Methodes: public function addLinkerData(userId:int,filmdataname:String,filmdatatype:String, rating:int):void Deze functie heeft als argumenten: -
userId: elke geregistreerde gebruiker krijgt een userId. Aan de hand van deze id worden gegevens bijgehouden op de server.
-
Filmdataname: vb. naam van een regisseur, naam van een acteur,…
-
Filmdatatype: actor, director, title of genre
-
Rating: telkens de gebruiker op dezelfde filmdataname zoekt, wordt deze waarde op de server verhoogd.
Elke zoekopdracht, die de gebruiker uitvoert, wordt bijgehouden op de server aan de hand van deze waarden.
5.3.2.8
User
Beschrijving: Deze klasse heeft tot doel de voorstelling van vergelijkbare gebruikers. De gebruiker die is ingelogd, zal het centrum van de graaf vormen en de andere gebruikers zullen eraan
55
gelinkt worden. De voorstelling van een gebruiker gebeurt door de weergave van zijn naam.
5.3.2.9
GraphTest
Beschrijving: Dit is de hoofdklasse van de applicatie en bevat de grafische componenten. De standaardcomponenten zijn herkenbaar zijn aan de mx-tag. Deze verwijst naar de http://www.adobe.com/2006/mxml standaard namespace voor de mxml componenten. De SpringGraph component die gebruikt wordt voor de visualisatie van een graaf maakt gebruikt van de volgende namespace: http://www.adobe.com/2006/fc. In het script gedeelte is de logica aanwezig voor het functioneren van de applicatie en de visuele componenten. Hierbij wordt gebruik gemaakt van de beschreven flex klassen uit de vorige paragrafen. Grafische Componenten: •
SpringGraph
Dit is de component die instaat voor de grafische weergave van de graaf. De nodes bestaan uit DisplayItems. De links worden aangepast in kleur, dikte en opaakheid naargelang het soort relatie. Een image van de filmposter wordt als grafische component van een DisplayItem gezien en wordt door de itemRenderer weergegeven. •
TabNavigator
Deze component stelt vijf tabbladen ter beschikking aan de gebruiker: -
Search: In dit tabblad zijn de verschillende zoekopdrachten aanwezig. De spellingssuggesties worden weergegeven bij foutieve spelling. De ‘Suggest me something’ knop biedt de mogelijkheid films weer te geven op basis van het gebruikersprofiel.
56
-
Details: De details van een film worden weergegeven in gestructureerde vorm. Een filmposter is aanwezig met een link naar de corresponderende IMDb.com pagina. Via Wikipedia wordt een beschrijving opgehaald en in dit tabblad weergegeven. Bij elke film kan een waardering gegeven worden op basis van een sterrensysteem (meer sterren betekent een hogere waardering).
-
Trailer: Wanneer de detailgegevens zichtbaar zijn in ‘Details’ kan de gebruiker een trailer van de film bekijken in het Trailer tabblad. Een eenvoudige muisklik op het tabblad Trailer laadt de film automatisch in de player. De player zelf is een mxml component, gebaseerd op een Canvas, en is terug te vinden in TrailerTab.mxml.
-
Settings: Alle methodes om de eigenschappen van de graaf aan te passen zijn gebundeld in dit tabblad. Vier componenten kunnen gebruikt worden om de vorm van de weergegeven graaf aan te passen. Een eerste Slider laat je toe de grootte van de filmposters aan te passen. Daaronder is een Slider terug te vinden die de lengte van de links tussen de nodes bestuurt. En tot slot kan je van twee NumericSteppers gebruik maken om het aantal weergegeven nodes in de graaf te bepalen. Ook de sliders waarmee je de gewichten van de graaf kan aanpassen vind je hier terug.
•
LoginCanvas
De gebruiker kan inloggen door zijn naam en passwoord in te geven in het LoginCanvas. Na het inloggen wordt de gebruikersgeschiedenis bijgehouden en kan een filmlijst weergegeven worden op basis van het gebruikersprofiel. Een eerste knop ‘My Profile’ wordt gebruikt om de UserInfoService component te laden. De tweede knop geeft een graaf weer van gebruikers met dezelfde interesses als de aangemelde gebruiker. •
UserinfoService
57
30 films worden in een grid elk grafisch voorgesteld door een FilmRater.mxml. Een knop ‘Hide’ is aanwezig om deze component te verbergen. De ‘Rate’ zal de gegeven waardering van elke film en een gemiddelde per genre opslaan in de databank. •
FilmRater
Een filmposter met bijhorende titel geeft een grafische voorstelling van de film. Daaronder is een ComboBox aanwezig die je toelaat de waardering van de film uit te drukken in een aantal sterren, geïnteresseerd (Want to see) of niet geïnteresseerd (Not interested). Variabelen: public var film:DisplayRelated; private var g:Graph = new Graph(); private var users:Graph = new Graph(); public var LoginUserId:int; Een DisplayRelated object wordt gebruikt om de films bij te houden. Dit object bevat een graaf die doorgegeven wordt aan de Graph g van de hoofdklasse. Op basis van deze graaf wordt de visualisatie verwezenlijkt. De graaf users zal de gebruikers bijhouden met vergelijkbare interesses als de aangemelde gebruiker. Een gebruiker die inlogt, krijgt een userId die bijgehouden wordt in de variabele LoginUserId. Methodes: public function startup():void Bij de initialisatie van het programma wordt de startupfunctie opgeroepen. Een DisplayRelated object wordt aangemaakt op basis van een filmtitel. Deze filmtitel is afkomstig uit een lijst van 30 films die gebruikt wordt bij het gebruikersprofiel. public function oneClickFilm(item:Object):void
58
Een enkele muisklik op een film zal enkele films toevoegen aan de graaf. De toegevoegde films zullen een link hebben met de aangeklikte film. Afhankelijk van de relatie tussen de films wordt de kleur, dikte en opaakheid van de link aangepast. De details van deze film worden geladen in het ‘Detail’ tabblad. Het tabblad zal vervolgens zichtbaar worden. public function doubleClickFilm(item:Object):void Een dubbele muisklik maakt van de aangeklikte film de centrale node. Er wordt gezocht naar gerelateerde films en deze worden toegevoegd aan de graaf met bijpassende link. De details worden geladen in het ‘Detail’ tabblad. public function setWeights():void De graaf wordt opgebouwd op basis van relaties tussen films. Drie eigenschappen worden
beschouwd:
regisseur,
acteur
en
genre.
De
gebruiker
kan
in
de
gebruikersinterface de gewichten van deze relaties veranderen. Als je geïnteresseerd bent in meer films van dezelfde regisseur, verhoog je het gewicht van regisseur door het verplaatsen van een Slider in het ‘Settings’ tabblad. public function startPlayer(t:String):void Deze functie wordt gebruikt om een trailer te laden en het Trailertabblad zichtbaar te maken. Dit kan wanneer de details van een film aanwezig zijn in het Details tabblad. public function userSuggestion(item:DisplayItem):void In het ‘Search’ tabblad bestaat de mogelijkheid films weer te geven op basis van een gebruikersprofiel. Gebruikersgegevens worden eerst opgehaald uit de database en in een fictieve DisplayItem geladen. Op basis van dit object wordt gezocht naar gerelateerde films. public function pushTitleSearch():void public function pushDirectorButton():void public function pushActorButton():void
59
public function pushGenreButton():void Dit zijn de zoekfuncties die je toelaten een film te zoeken op titel, regisseur, acteur of genre. Bij foutieve spelling wordt een suggestie gegeven van de eventuele correcte spelling. Vervolgens kan je de zoekactie opnieuw uitvoeren. De geschiedenis van deze zoekopdrachten wordt bijgehouden nadat er met zekerheid informatie is gevonden in de Freebase databank. public function showUserGraph():void public function showUserProfileSetup():void public function showGraph(ev:Event):void Deze drie functies worden gebruikt voor de keuze van de grafische voorstelling. Er kan gewisseld worden tussen een voorstelling van de filmgraaf, de gebruikersgraaf en ‘Mijn gebruikerprofiel’.
60
Hoofdstuk 6 Server
6.1
Technologie server
De gegevens van de gebruiker moeten bijgehouden worden in een databank. Om het de webapplicatie mogelijk te maken met de database te communiceren moet er tussenliggende logica ontwikkeld worden. JavabeansTM
41
is een platformonafhankelijk
component model geschreven in de Java programmeringstaal. Het stelt de ontwikkelaar in staat klassen te schrijven, namelijk beans, aan de serverzijde. Een bean kan aangesproken worden via andere systemen en maakt het mogelijk data persistent te houden in een opslagmechanisme. Session Beans en Entity Beans42 zijn de belangrijkste componenten. Session Beans kunnen stateless of stateful zijn. Een stateful Session Bean wordt toegekend aan één gebruiker en kan gezien worden als een uitbreiding van de client aan de serverzijde. Stateless Session Beans zijn componenten die aan een client een tijdelijke dienst verlenen. Deze beans kunnen gebruikt worden als webservice en kunnen bepaalde webmethoden ter beschikking stellen. Entity Beans zijn sterk verbonden met een opslagmechanisme. Een Entity Bean heeft meestal een onderliggende tabel in een relationele databank met rijen die de instanties van die bean voorstellen. Neem als voorbeeld een Entity Bean Gebruiker. In de databank zal een tabel Gebruiker aanwezig zijn waarin elke gebruiker voorgesteld wordt door een rij. Het is nu mogelijk methodes aan te spreken vanuit een andere applicatie. Het communicatieprotocol waarover dit gebeurd is SOAP43. Simple Object Acces Protocol is
41
http://java.sun.com/products/javabeans/ http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/EJBConcepts.html 43 SOAP: Simple Object Acces Protocol 42
61
een protocol dat gebruikt wordt voor de uitwisseling van XML berichten over computer netwerken.
6.2
Functionaliteiten
Naast de diensten geleverd door Freebase, Yahoo, YouTube en DBpedia worden een aantal diensten door de server geleverd. De server zal niet enkel instaan voor opslag van gegevens maar zal de informatie verwerken en weergeven aan de client. Voor vier verschillende functionaliteiten van de applicatie zal beroep worden gedaan op de server en databank.
6.2.1
Aanmelden
Alle gegevens worden bijgehouden in de databank aan de hand van de identiteit van de gebruiker. Een loginsysteem vraagt naar gebruikersnaam en paswoord bij het gebruik van de applicatie. Het is niet noodzakelijk zich aan te melden. Enkel voor het gebruik van de functionaliteiten beschreven in dit onderdeel moet je aangemeld zijn. Alle andere functionaliteiten, als zoekopdrachten, zijn onafhankelijk van het loginsysteem.
6.2.2
Mijn profiel
De tweede functionaliteit is de opslag van een gebruikersprofiel. De gebruiker kan zijn initieel profiel op elk moment wijzigen en de persistentie wordt gegarandeerd door de server. Wanneer de gebruiker zich aanmeldt in de applicatie zal zijn initieel profiel geladen worden op client.
62
Per uitgevoerde zoekopdracht door de gebruiker, worden gegevens bijgehouden. Zo kan een beeld gevormd worden van de interesses van de gebruiker. Het herhalen van zoekopdrachten geeft een notie van interesse voor een eigenschap aan het systeem.
6.2.3
Vergelijkbare gebruikers.
Een graaf met gebruikers met dezelfde interesses kan voorgesteld worden aan de gebruiker. Centraal staat de aangemelde gebruiker. Met links zijn de vergelijkbare gebruikers verbonden aan de centrale node. De lijst met gebruikers wordt geleverd door de server. De berekening van de lijst kan op twee manieren gebeuren aan de hand van de beoordeelde filmtitels: berekening van gemiddelde waarden of vectorberekening. De waardering kan variëren van 0 tot 6 (niet geïnteresseerd, 1 ster, 2 sterren,… ,5 sterren, geïnteresseerd).
6.2.3.1
Gemiddelde
Elke gebruiker, die opgenomen is in de databank, heeft aan verscheidene films een beoordeling gegeven. Het initiële gebruikersprofiel bevat reeds dertig films met een waardering. Alle bijkomende beoordelingen die door de gebruiker aan films worden toegekend bij het gebruik van de applicatie, worden verwerkt als input bij de berekening. Aan de hand van de gebruikers id worden alle filmtitels opgehaald die de gebruiker een waardering heeft gegeven. Op basis van deze films wordt gezocht naar andere gebruikers die minstens één overeenkomstige film hebben met een beoordeling. Vervolgens wordt elke gevonden gebruiker vergeleken met de aangemelde gebruiker. De overeenkomstige films tussen de gebruikers worden vergeleken en een gemiddelde waarde wordt weergegeven.
63
Voorbeeld:
Aangemelde gebruiker:
Andere gebruiker:
Title
rating
‘Twelve Monkeys’
2
‘Titanic’
3
‘The godfather’
5
‘Titanic’
2
‘The godfather’
6
Gemiddelde tussen beide gebruikers:
(|3 – 2| + |5 – 6|)/2 = 1
De gebruikers worden gerangschikt op basis van het berekende gemiddelde. De gebruikers met het laagste gemiddelde zullen dezelfde interesse vertonen als de aangemelde gebruiker en worden voorgesteld in de applicatie.
Nadelen: -
De berekeningstijd is niet enkel afhankelijk van het aantal gebruikers maar ook van het aantal beoordeelde films.
-
Twee gebruikers kunnen identiek dezelfde interesse vertonen en toch een gemiddelde produceren dat groter is dan 0. Dit zal gebeuren wanneer de beoordeling van de ene gebruiker strenger is dan de andere.
Voordelen: -
Alle films die de gebruiker heeft beoordeeld, worden gebruikt in de berekening.
-
Er is geen beperking van het aantal films.
64
6.2.3.2
Vectorberekening
Een alternatieve berekening bestaat uit het opbouwen van een Vector Space Model[1]. Aan de hand van de films aanwezig in het initiële profiel stellen we een 30 dimensionale vectorruimte op. Elke gebruiker heeft een waarde tussen 0 en 6 voor elk van de 30 films. Die waarden stellen één vector per gebruiker voor. We berekenen vervolgens de hoek tussen de vector van de aangemelde gebruiker en de vector van elke andere gebruiker aanwezig in de databank. De gebruikers met de kleinste hoek zullen dezelfde filminteresses vertonen als de aangemelde gebruiker. De waarde van de hoek tussen twee vectoren is eenvoudig te berekenen met volgende formule:
Er wordt gebruik gemaakt van de cosinus waarden. Deze variëren tussen 0 en 1, wat overeenstemt met een hoek tussen 90° en 0°.
Nadelen: -
Enkel de films uit het initiële gebruikersprofiel worden gebruikt in de berekening.
Voordelen: -
De rekencomplexiteit is louter evenredig aan het aantal gebruikers.
-
Wanneer een gebruiker films strenger beoordeeld dan een andere gebruiker zal dit geen invloed hebben op de berekening.
65
Beide methoden werden geïmplementeerd in het systeem. Wegens de kleinere rekencomplexiteit en de betere resultaten van de tweede methode is gekozen voor de methode op basis van vectoren in de uiteindelijke applicatie.
6.2.4
Suggesties
Wanneer de gebruiker suggesties wil bekijken, wordt een opvraag gedaan aan de server. De server zal gegevens weergegeven over drie filmeigenschappen: regisseur, acteur en genre. Een lijst per eigenschap wordt op de server aangemaakt en gerangschikt op interesse. Op basis van de weergegeven eigenschappen wordt gezocht naar films. De films worden aan de cliëntzijde weergegeven en moeten voldoen aan de interesses van de gebruiker.
6.2.5
Beoordelingssysteem
Een laatste dienst bestaat uit een beoordelingssysteem. De user kan elke film naar eigen smaak een waarde toekennen tussen 1 en 5. Een gemiddelde waardering wordt berekend tussen alle gebruikers die de film een waarde toegekend hebben. De voorstelling van deze waarde in de gebruikersinterface zal gebeuren door een rij sterretjes. Bij de opslag van het initiële gebruikersprofiel wordt per filmtitel een score bijgehouden van 0 tot 6. De waarden 0 en 6 betekenen respectievelijk geen interesse en interesse. Deze laatste waarden worden buiten beschouwing gelaten bij de berekening van de gemiddelde waardering.
66
6.3
Database
Figure 26: Databank
Per gebruiker moeten data bijgehouden worden. In een eerste tabel UserData zal de gebruikersnaam (username) en een paswoord (password) bijgehouden worden. Wanneer een nieuwe gebruiker wordt toegevoegd, zal automatisch een id gegenereerd worden door de tabel Sequence. Bij het aanmelden wordt gecontroleerd of de gebruikersnaam overeenkomt met het opgeslagen paswoord. De tabel Filmdata zal alle informatie over films bijhouden. Aan de hand van een type (filmdatatype) wordt bijgehouden wanneer de data betrekking hebben tot een film, een acteur, een regisseur of een genre. Nieuwe informatie wordt toegevoegd op basis van een naam (filmdataname) en het bijhorende type. Ook hier wordt automatisch een id aangemaakt door de Sequence tabel. Neem als voorbeeld de regisseur George Lucas. Hij zal toegevoegd worden in de tabel als volgende entiteit: (id, “George Lucas”, “director”). Om nu een relatie te leggen tussen de gebruikersgegevens en de filmgegevens is de tabel Linker aanwezig. De kolommen userdataid en filmdataid worden gebruikt als link
67
tussen gebruiker en filmdata. De eigenschap rating heeft twee verschillende betekenissen. De eerste wordt gegeven bij het filmdatatype “title”. Een gebruiker is in staat een waardering te geven per filmtitel. Wanneer je een waarde 3 geeft aan een film, wordt je id gekoppeld aan de id van de film en de bijhorende rating 3. Een gemiddelde per film kan nu berekend worden door alle ratings van dezelfde filmdataid te beschouwen. Bij de andere types wijst de eigenschap rating op de interesse van de gebruiker voor de filmdata. Telkens een gebruiker op een acteur zoekt, zal de rating waarde van deze acteur verhogen. Elke nieuwe gebruiker moet een lijst met films beoordelen. De gegevens van deze beoordeling worden opgeslagen in de vorige tabellen. Deze gegevens worden echter ook bijgehouden als een id van de gebruiker en een string van cijfers tussen 0 en 6 in de tabel UserProfileSetup. Deze string zal als vector gebruikt worden wanneer een gebruiker zoekt naar personen met vergelijkbare interesses.
Elk van de beschreven tabellen wordt voorgesteld door een Entity Bean met standaard methodes als constructor, setters en getters. In een Stateless Session Bean zullen deze beans gebruikt worden om gegevens persistent te maken in de databank. De Session Bean bevat de webmethodes die nodig zijn voor de communicatie met de client.
68
6.4 6.4.1
Software Klassendiagram
Figure 27: Klassendiagram Server
69
6.4.2
Klassen
6.4.2.1
UserInfoWSBean
Beschrijving: Een Stateless Session Bean wordt gebruikt als Web Service. De klasse wordt voorafgegaan door de @WebService notatie. Voor elke methode die beschikbaar wordt gesteld aan de client wordt een @WebMethod toegevoegd. Alle andere methoden worden intern in de klasse gebruikt en zijn niet toegankelijk via de web service. Deze klasse wordt gedefinieerd door een interface UserInfoWSLocal die oplegt welke methodes geïmplementeerd moeten worden. De web service zal alle nodige diensten ter beschikking stellen aan de client die nodig zijn voor het inloggen van een gebruiker, het opbouwen van een profiel, het opvragen van gebruikersuggesties en het vinden van gebruikers met vergelijkbare interesses. Het waarderingssysteem zal de nodige data kunnen bijhouden in de database via de daarvoor gedefinieerde methode. De client zal communiceren met deze web service via het SOAP protocol en zal gebruik maken van de Entity Bean klassen om data persistent te maken in een databank.
Variabelen: @PersistenceContext private EntityManager em; Methodes: public String sayHello() De applicatie zal bij het opstarten controleren of de server online is door een sayHello functie. Wanneer de server een positief antwoord geeft, zullen de bijkomende functionaliteiten, geboden door de server, geïnitialiseerd worden. Indien dit niet gebeurt, zal de applicatie enkel de functionaliteiten van de client aanbieden aan de gebruiker.
70
public void addUser(String name, String pass) Deze functie wordt gebruikt wanneer een nieuwe gebruiker aangemaakt wordt. Een gebruikersnaam en paswoord voldoen als gegevens voor de gebruiker. Door gebruik te maken van de EntityManager worden de gegevens persistent in de databank. em.persist(user)
public int loginUser(String name, String pass) Om gebruik te kunnen maken van de gebruikersuggesties moet de user aangemeld zijn. Dit gebeurt door gebruikersnaam en passwoord in te vullen in de gebruikersinterface. Bij een correcte login krijgt de gebruiker een welkomstbericht. Nu kan hij gebruik maken van de ‘Suggest me something’ functie en wordt het mogelijk films te beoordelen. Wanneer de gebruiker zich niet aanmeldt maar de server is online, ziet hij toch de waardering van de reeds beoordeelde films.
public void addFilmData(int id, int filmid, int rating) Dit is geen web methode en wordt enkel intern gebruikt in de functie addLinkerData. Ze wordt gebruikt om informatie over een film op te slaan en een id te geven. Deze id wordt gebruik om een relatie te leggen met de gebruikers. Een regisseur kan worden toegevoegd door zijn naam en als type ‘director’ door te geven aan deze functie. Een Filmdata object wordt aangemaakt met de correcte gegevens en door de EntityManager bijgehouden in de databank. em.persist(filmdata)
71
public String addLinkerData(int userId, String filmdataname, String filmdatatype, int rating) Bij elke zoekopdracht van een gebruiker wordt deze functie opgeroepen om de informatie op te slaan in de databank. Ook wordt, bij het opslaan van het initieel gebruikersprofiel, gebruik gemaakt van deze methode. Een id van de gebruiker, de naam van de filmdata, het type worden meegegeven. Het laatste attribuut wordt vooral gebruikt voor de opslag van een filmbeoordeling. De waarde wordt meegegeven als rating. Als een gebruiker een waardering van 3 sterren wil geven aan de film ‘Twelve Monkeys’ worden de waarden (de id van de gebruiker, “Twelve Monkeys”,”title”,3) meegegeven aan de functie. De waardering zal een integer tussen 1 en 5 bevatten. Bij de andere types (director, actor en genre) zal de waarde in de databank verhoogd worden met de ‘rating’ variabele. Telkens er gezocht wordt op dezelfde regisseur, acteur of genre wordt deze waarde met 1 verhoogd.
public int getFilmRating(String title) Wanneer de server online is, wordt bij de detailweergave van de film automatisch een opvraag gedaan naar de beoordeling. Indien er nog geen waarde bestaat voor de film wordt de waarde 0 weergegeven. Als de film echter wel een beoordeling bevat van minstens één gebruiker wordt de gemiddelde waardering als resultaat gegeven van deze functie. De berekening van deze waarde ontstaat door een SELECT uitdrukking te creëren en uit te laten voeren door de EntityManager. em.createQuery(“SELECT …”)
public List getUserInfo(int userId) Voor een gebruiker die een suggestie wil ontvangen op basis van zijn gebruikersprofiel wordt aan de hand van zijn userId een lijst van eigenschappen opgehaald van de server.
72
Op basis van deze gegevens wordt vervolgens gezocht naar films. Ook hier wordt gebruik gemaakt van de createQuery methode in de klasse EntityManager om een SELECT uit te voeren. De opgehaalde informatie wordt vervolgens in drie categorieën opgedeeld (regisseur, acteur en genre). Een sortering geeft de top vijf, meest gekozen eigenschappen, per categorie terug. Indien genoeg informatie in het gebruikersprofiel aanwezig is, wordt als resultaat een top vijftien van de eigenschappen weergegeven aan de client.
public List getSimilarUsers(int userId, int n) Er wordt gebruik gemaakt van de klassen SimilarUsers en User. De methode op basis van het gemiddelde om een gebruiker te vinden met gelijkaardige interesses wordt hier gebruikt. De data, die nodig zijn voor deze berekening, worden opgehaald uit de databank en een lijst van gebruikers wordt als resultaat weergegeven.
public List getFilmRatingsUser( int userId) De id van een gebruiker is nodig om alle beoordelingen die hij gemaakt heeft op te zoeken. Als resultaat wordt een lijst van filmtitels en hun waardering weergegeven.
public void addUserProfileSetup( int userId, String userfilmratings) Deze methode wordt gebruikt om het initeel gebruikersprofiel persistent te maken in de databank. De string userfilmratings stelt een string voor van cijfers tussen 0 en 6 (“24235230623…”). Deze representeren de beoordelingen voor de dertig films die aanwezig zijn in het profiel.
public List getSimilarProfiles( int userId, int n)
73
Op basis van de vectorberekening wordt een lijst van n gebruikers gezocht met gelijkaardige interesses. De berekening gebeurt met behulp van de functie public double getDistance(String v1, String v2), die de afstand berekent tussen twee vectoren.
6.4.2.2
Filmdata
Beschrijving: Dit is een Entity Bean die de tabel FilmData in de databank beschrijft. De klasse wordt gebruikt om filmdata persistent te maken in het opslagmedium. De data bestaan uit een id die automatisch wordt aangemaakt, de naam van de filmdata en een bijhorend type. Variabelen: private Integer id; private String filmdataname; private String filmdatatype; Methodes: Standaard methodes geleverd door Netbeans (getters, setters, hashfunctie,…).
6.4.2.3
Userdata
Beschrijving: Dit is een Entity Bean die de tabel UserData in de databank beschrijft. De klasse wordt gebruikt om gegevens van een gebruiker persistent te maken in het opslagmedium. De data bestaan uit een id die automatisch wordt aangemaakt, de naam van de gebruiker en een paswoord. Variabelen:
74
private Integer id; private String username; private String password; Methodes: Standaard methodes geleverd door Netbeans (getters, setters, hashfunctie,…).
6.4.2.4
Linker en LinkerPK
Beschrijving: De klasse Linker is een Entity Bean die de tabel Linker in de databank beschrijft. Deze wordt gebruikt om relaties te leggen tussen de gebruikergegevens en de filmdata. Een LinkerPK object wordt aangemaakt dat de id van de gebruiker bevat en de id van de filmdata. De letters ‘PK’ verwijzen naar primary key. Naast deze variabele wordt een rating bijgehouden. Bij filmdata van het type ‘title’ is deze waarde een beoordeling van de gebruiker voor de film. Bij de andere types (director, actor en genre) is dit een representatie van de interesse bij de gebruiker voor de filmdata. Variabelen: protected LinkerPK linkerPK; -
private int userdataid;
-
private int filmdataid;
private Integer rating; Methodes: Standaard methodes geleverd door Netbeans (getters, setters, hashfunctie,…).
75
6.4.2.5
Userprofilesetup
Beschrijving: Om vergelijkbare gebruikers te vinden moet per gebruiker een vector bijgehouden worden. Omdat het hier gaat om een 30 dimensionale vector met waarden in elke dimensie tussen 0 en 6 is het mogelijk deze vector bij te houden als een string. Deze klasse is de Entity klasse die een tabel met vectoren in de databank voorstelt. Variabelen: private Integer userid; private String userfilmratings; Methodes: Standaard methodes geleverd door Netbeans (getters, setters, hashfunctie,…).
6.4.2.6
UserFilmInfo en UserFilmInfoCompare
Beschrijving: Bij de methode getUserInfo uit de klasse UserInfoWSBean worden filmdata en de bijhorende rating van de gebruiker opgehaald. Per categorie wordt de informatie bijgehouden als een gekoppelde lijst van UserFilmInfo objecten. De klasse UserFilmInfoCompare laat toe deze objecten te ordenen op basis van de variabele rating. Variabelen: private int rating; private String name; private String type; Methodes: public int compare(Object o1, Object o2)
76
De klasse UserFilmInfoCompare implementeerde de Comparator klasse uit de standaard bibliotheek van Java. De methode compare wordt overladen door een eigen methode zodat de UserFilmInfo objecten geordend kunnen worden op basis van de variabele rating.
6.4.2.7
UserDistance en UserDistanceCompare
Beschrijving: Een lijst van UserDistance objecten wordt aangemaakt. De naam van de gebruiker en de cosinus van de hoek tussen de vector die zijn initieel profiel voorstelt en de vector van de gebruiker voor wie gezocht wordt naar gebruikers met vergelijkbare interesses. UserDistanceCompare wordt gebruikt om de lijst te sorteren. Variabelen: public String name; public double distance; Methodes: Standaard methodes (getters, setters,…).
6.4.2.8
SimilarUsers, User en UserCompare
Beschrijving: Deze drie klassen worden gebruikt wanneer gezocht wordt naar gebruikers met vergelijkbare interesses. In plaats van een vectorvergelijking wordt nu gekeken naar elke beoordeelde film van een gebruiker. Vervolgens wordt een gemiddeld verschil berekend met de beoordeelde films van de gebruiker voor wie gezocht wordt naar gebruikers met vergelijkbare interesses.
77
Variabelen: public LinkedList ids = new LinkedList(); public LinkedList users = new LinkedList(); Methodes: public void sortUsers()
78
Hoofdstuk 7 Usability Een belangrijk onderdeel in dit onderzoek is wat omschreven wordt als MensComputerinteractie (MCI44): de interactie tussen de mensen (gebruikers) en machines (computers). Hoe wordt de globale werking voor de eindgebruiker zo eenvoudig en logisch mogelijk. In de context van deze thesis betekent dit: “Hoe laat je de gebruiker kiezen welke video content hij wil bekijken”. Het gebruik van een graaf als visualisatie van filmdata en bijhorende relaties, en een overzichtelijke gebruikersinterface moeten het voor de gebruiker zo gemakkelijk mogelijk maken video content te ontdekken. De interactiemogelijkheden moeten duidelijk zijn in gebruik en de bekomen resultaten moeten een logisch verband hebben met de acties. Stel dat een zoekopdracht overwogen wordt, dan moet deze functionaliteit snel terug te vinden zijn en moet het effect van de actie voldoen aan de verwachtingen. Het testen van gebruiksvriendelijkheid kan op verschillende manieren gebeuren. Hier is gekozen voor een gebruikerstest aan de hand van een lijst van acties die moeten uitgevoerd worden. De acties bevatten alle functionaliteiten die de applicatie biedt. Na het uitvoeren van de acties moet een vragenlijst beoordeeld worden met de waarden: helemaal niet akkoord, niet akkoord, neutraal, akkoord, volledig akkoord. Enkele open vragen worden gesteld om bijkomende informatie te verzamelen. De De test werd gedaan door vijf gebruikers wat voldoende blijkt volgens Jakob Nielsen45: "Elaborate usability tests are a waste of resources. The best results come from testing no more than 5 users and running as many small tests as you can afford." Het verschil in
44
MCI of HCI (Human Computerinteraction) Jakob Nielsen (geboren in 1957 in Kopenhagen, Denemarken) is een autoriteit op vlak van gebruiksvriendelijkheid op het web
45
79
gebruikers door leeftijd, computervaardigheden en frequentie van internetgebruik is representatief voor de gemiddelde gebruiker waarvoor de applicatie bedoeld is. Tijdens de testen werden de gebruikers geobserveerd en mochten ze vrij commentaar geven bij hun acties. De actie- en vragenlijsten zijn te vinden in de bijlage.
7.1
Resultaten
De vragenlijst werd in zes categorieën onderverdeeld. De belangrijkste resultaten per categorie zijn: Algemeen: Het gebruik van de applicatie is helder en duidelijk. De gebruiker heeft het gevoel dat hij de applicatie onder controle heeft, maar stelt zich soms de vraag of hij de juiste handelingen uitvoert. Aanleren van de applicatie: Uit observatie bleek dat gebruikers in het begin enkele problemen ondervonden met de applicatie maar dat dit heel snel verdween omdat het aanleren van de applicatie vlot verliep. Voorstelling resultaten: De manier van visualisatie werd door de gebruiker omschreven als duidelijk, overzichtelijk, aantrekkelijk en vernieuwend. De mogelijkheid een trailer te bekijken zorgde voor een positieve feedback. Recommandaties werden als positief bevonden. Navigatie: De navigatie verliep vlot en overzichtelijk. Volbrengen van de opdrachten: Een negatief punt aan de zoekopdrachten was dat niet alle opdrachten voltooid werden. Dit is te wijten aan verkeerd geformuleerde termen of aan de beperktheid van de
80
gebruikte databank. De spellingssuggesties hielpen in de meeste gevallen de relevante informatie te vinden. Vergelijking van IMDb met de applicatie: De personen die IMDb niet kenden, werden eerst verwezen naar de site. Na enkele opdrachten werd een vergelijking gevraagd met het ontwikkelde systeem. De applicatie werd beschouwd als een meerwaarde ten opzichte van IMDb en stelde de gebruiker in staat sneller informatie te vinden en nieuwe films te ontdekken.
7.2
Suggesties door de gebruiker
Enkele suggesties werden door de gebruikers gegeven tijdens het testen. De meeste werden nadien gevolgd en de applicatie werd aangepast. Anderen worden in beraad gehouden als mogelijke uitbreidingen. •
Enkele kleinere zaken werden aangepast als: het blijven doorspelen van de trailer, niet volledige zichtbaarheid van een dropbox, volgorde componenten bij het gebruik van de tab functie, onduidelijkheid van de imdb.com link, foutmeldingen,…
•
De keuzemogelijkheid ‘interested’ bij de beoordeling van een film bleek niet duidelijk. Dit werd veranderd naar ‘Want to see’.
•
Een filter werd aangeboden bij de zoekopdrachten zodat de gebruiker kan kiezen uit welke periode de films afkomstig zijn (bvb. Jaren ‘90).
•
Bijkomende informatie over de werking van het systeem werd toegevoegd voor de gebruiker.
81
7.3
Uitbreidingen
In de ontwikkeling van software applicaties is altijd plaats voor mogelijke uitbreidingen. Enkele mogelijke bijkomende functionaliteiten worden hier besproken. Toevoegen van gecombineerde zoekopdrachten. Momenteel is het enkel mogelijk te zoeken op een filmeigenschap en geen combinatie van verschillende eigenschappen. Wanneer een film moet gezocht worden waarin een acteur samenwerkt met een andere acteur is dit niet mogelijk met het huidige systeem. Ook een beperking opleggen wanneer films van een acteur gezocht worden in een bepaald genre is onmogelijk. Door de nodige queries te formuleren kunnen bijkomende zoekopdrachten toegevoegd worden. Soms is een trailer niet aanwezig op YouTube. In dit geval zou het aangenaam zijn mochten andere bronnen aangesproken worden in de zoektocht naar een correcte trailer. De mogelijkheid personen te ontdekken met vergelijkbare interesses is reeds aanwezig. Een volgende stap is de mogelijkheid te communiceren met de verschillende gebruikers. Een soort forum kan toegevoegd worden aan de applicatie waar gebruikers elke vorm van commentaar kwijt willen: filmrecensies, filmdiscussies, filmquizes, gesprekken,… De community beoordeling van een film kan niet worden gebruikt als filter bij de voorstelling. Het zou handig zijn mocht de gebruiker enkel hoog gewaardeerde films kunnen bekijken of de zoekopdrachten laten beïnvloeden door de beoordeling. Enkel films worden beschouwd in de applicatie. Een volgende stap zou het toevoegen van personen kunnen zijn. Dan spreken we specifiek over twee types personen: regisseurs en acteurs. Beiden zouden kunnen voorgesteld worden door hun foto die aanwezig is in de Freebase databank.
82
Hoofdstuk 8 Conclusie De uiteindelijke applicatie is vernieuwend op twee fronten: mashup en visualisatie. Het gebruik van verschillende diensten, die tot één geheel gebundeld worden, zorgt voor de creatie van een meer volledige dienst. De gebruiker moet zich niet meer richten tot verschillende websites om de bekomen uitgebreide informatie te vinden. Dit leidt tot een efficiënter en eenvoudiger gebruik van het internet. Het gebruik van een visuele voorstelling van data in plaats van de “klassieke” presentatie als 2-dimensionale lijst van links staat vandaag nog in haar kinderschoenen. Te verwachten is dat meer en meer websites in de nabije toekomst gebruik zullen maken van deze grafische voorstellingen, wat een duidelijke meerwaarde levert. De personen die de applicatie getest hebben, zijn verrast door het overzicht, de duidelijkheid en het vernieuwende karakter van de applicatie.
83
Bijlagen Bijlage A
1. Gegevens Leeftijd: ____
Geslacht: M/V
Computervaardigheden: beginner
vlotte gebruiker
gevorderde
Internetgebruik: occasioneel
wekelijks gebruik
dagelijks gebruik
2. Opdrachten 1. Meld je aan met je gebruikersnaam en paswoord. 2. Zoek naar één van je favoriete films. 3. Lees de korte inhoud van de film. 4. Beoordeel de film. 5. Bekijk de trailer van de film. 6. Lees informatie over een andere film die voorgesteld wordt. 7. Zoek naar de films van je favoriete acteur. 8. Vermeerder het aantal films dat weergegeven wordt. 9. Zoek naar films van een andere acteur. 10. Bekijk de trailer van een film die weergegeven wordt. 11. Browse door de films. 12. Verander eigenschappen zodat de voorstelling duidelijker wordt. 13. Bekijk het jaartal van een film die voorgesteld is. 14. Bekijk films die verwant zijn aan deze film. 15. Bekijk films die dezelfde regisseur hebben als deze film. 16. Bekijk films die hetzelfde genre hebben als deze film. 17. Kies een film uit en kijk welke acteurs erin voorkomen. 18. Ga naar de IMDb pagina van de film. 19. Zoek naar een film op basis van een kernwoord. 20. Kies een genre en bekijk films uit dit genre. 21. Bekijk een trailer van een film. 22. Zoek naar films van een regisseur die je kent. 23. Bekijk de films die aangeboden worden als suggesties. 24. Zoek naar films van een regisseur die je ingeeft met foutieve spelling? 25. Lees de helpinstructies. 26. Gebruik de applicatie naar wens. 27. Log uit als gebruiker.
84
Opmerkingen ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________
3. Enquête Geef bij de volgende vragen telkens of je helemaal niet akkoord, niet akkoord, neutraal, akkoord, of volledig akkoord gaat met de stelling. Helemaal niet akoord – niet akkoord – neutraal - akkoord – volledig akkoord
Algemeen
hna/na/n/a/va
1. De applicatie was eenvoudig in gebruik? 2. Soms vroeg ik me af of ik de juiste handelingen uitvoerde? 3. Ik heb controle over de applicatie wanneer ik ze gebruik? 4. Het gebruik van de toepassing is frustrerend? 5. De organisatie van de menu’s en informatie lijkt logisch? 6. De foutmeldingen zijn eenvoudig te begrijpen? 7. De presentatie is aangenaam? Aanleren van de applicatie 8. Het aanleren van de applicatie verliep vlot? 9. Nieuwe gebruikers zullen deze applicatie eenvoudig vinden in gebruik?
hna/na/gm/a/va
Voorstelling resultaten 10. De organisatie van de resultaten op het scherm is duidelijk? 11. De hoeveelheid informatie voorgesteld op het scherm is overzichtelijk? 12. De resultaten stemmen overeen met de ingegeven zoektermen?
hna/na/gm/a/va
85
13. De wachttijd is aanvaardbaar? 14. De suggesties die aangeboden werden voldeden aan je verwachtingen? Navigatie 15. Er zijn weinig stappen nodig om informatie te bekomen? 16. De navigatie binnen de resultaten verloopt vlot?
hna/na/gm/a/va
Volbrengen van de opdrachten 17. Alle zoekopdrachten werden voltooid? 18. De relaties tussen de weergegeven informatie zijn duidelijk? 19. Het is gemakkelijk om de zoektermen te formuleren? 20. Ik ben verzekerd dat ik alle relevante informatie gevonden heb?
hna/na/gm/a/va
Vergelijking met IMDb 21. Deze applicatie stelt me in staat sneller nieuwe films te ontdekken dan IMDb? 22. Deze applicatie stelt me in staat sneller informatie over films te vinden dan IMDb? 23. Deze applicatie heeft een meerwaarde tov IMDb?
hna/na/gm/a/va
Opmerkingen en aanbevelingen: 24. Noem twee dingen van de applicatie die je bevielen. ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 25. Noem twee dingen die je niet bevielen. ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 26. Geeft eventueel enkele problemen die je ondervond.
86
________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________
Bijlage B
1. Resultaten hma 1. De applicatie was eenvoudig in gebruik? 2. Soms vroeg ik me af of ik de juiste handelingen uitvoerde? 3. Ik heb controle over de applicatie wanneer ik ze gebruik? 4. Het gebruik van de toepassing is frustrerend? 5. De organisatie van de menu’s en informatie lijkt logisch? 6. De foutmeldingen zijn eenvoudig te begrijpen? 7. De presentatie is aangenaam?
na
n
a 1
4
1
Voorstelling resultaten 10. De organisatie van de resultaten op het scherm is duidelijk? 11. De hoeveelheid informatie voorgesteld op het scherm is overzichtelijk? 12. De resultaten stemmen overeen met de ingegeven zoektermen? 13. De wachttijd is aanvaardbaar? 14. De suggesties die aangeboden werden voldeden aan je verwachtingen?
1 2 1
Navigatie 15. Er zijn weinig stappen nodig om informatie te bekomen? 16. De navigatie binnen de resultaten verloopt vlot?
Vergelijking met IMDb 21. Deze applicatie stelt me in staat sneller nieuwe films te ontdekken dan IMDb? 22. Deze applicatie stelt me in staat sneller informatie over films te vinden dan IMDb?
va 1 1
1
Aanleren van de applicatie 8. Het aanleren van de applicatie verliep vlot? 9. Nieuwe gebruikers zullen deze applicatie eenvoudig vinden in gebruik?
Volbrengen van de opdrachten 17. Alle zoekopdrachten werden voltooid? 18. De relaties tussen de weergegeven informatie zijn duidelijk? 19. Het is gemakkelijk om de zoektermen te formuleren? 20. Ik ben verzekerd dat ik alle relevante informatie gevonden heb?
4 4 4
1 1 1
2 1
1
87
5 2 2
2 3
2 4
3 1
4 3 2 1 3
1 1 1 3 2
3 4
2 1
1 3 3 4
1 1 1
2
3
1
3
23. Deze applicatie geeft een meerwaarde tov IMDb?
1
24. Noem twee dingen van de applicatie die je bevielen. •
De gelinkte films. Op die manier leer je vlugger nieuwe films kennen waarvan je vrij zeker bent dat ze je gaan bevallen.
•
Overzicht + gebruiksgemak
•
Make a suggestion.
•
Suggesties die gegeven worden om nieuwe films te leren kennen.
•
Mogelijkheid om een trailer te bekijken.
•
Het overzicht.
•
Weinig maar juiste informatie.
•
Aantrekkelijke voorstelling.
•
Vlot gebruik van de trailer.
•
Nieuwe films visueel aantrekkelijk voorgesteld.
•
Het visuele aspect en de snelheid van de interactie
•
De omvang van de informatie.
25. Noem twee dingen die je niet bevielen. •
Je kunt geen gecombineerde zoekopdrachten uitvoeren (bvb genre + acteur).
•
Wanneer je zoekt op bijvoorbeeld een acteur zou het handig zijn dat de verschillende genres van de acteur weergegeven worden. Hiërarchie per zoekopdracht.
•
Na een paar keer klikken op verschillende films staat er zeer veel op het scherm en verdwijnt het overzicht een beetje.
88
4
•
Misschien mag het uitleg venster iets meer opvallen: Imdb link.
•
Mogelijkheid om oude films eruit te halen.
•
Blockbusters naar voren halen.
•
Informatie om de juiste handelingen uit te voeren zou ik niet zoeken bij de help functie.
•
Noodzaak om fragmenten manueel te stoppen.
26. Geeft eventueel enkele problemen die je ondervond. •
Enkele foutmeldingen.
•
Volgorde knoppen komt niet overeen met de tab functie.
•
Trailer blijft doorspelen wanneer een ander tabblad zichtbaar is .
•
Dropbox niet meer zichtbaar bij laatste films.
•
Betekenis ‘interested’ niet duidelijk.
•
Imdb.com link niet eenvoudig terug te vinden.
•
De mogelijkheden om de graaf te verslepen niet echt duidelijk.
•
Foute trailer werd geladen.
•
Correcte termen moeten gebruikt worden bij zoekopdrachten.
89
Referenties [1] Jonathan Trevor, Thomas Koch & Gerd Woetzel, MetaWeb: Bringing synchronous groupware to the world wide web, Proceedings of the fifth conference on European Conference on Computer Supported Cooperative Work, ISBN:0-7923-4638-6, 1997, p65-80
[2] Ian Soboroff & Charles Nicholas, Collaborative filtering and the generalized vector space model, Proceedings of the 23rd annual international ACM SIGIR conference on Research and development in information retrieval, ISBN:1-58113-226-3, 2000, p351353
[3] Michael Fleischman & Eduard Hovy, Recommendations without user preference: a natural language processing approach, Proceedings of the 8th international conference on Intelligent user interfaces, ISBN:1-58113-586-6, 2003, p242-244
[4] Da Deng, Jianhua Zhang & Martin Purvis, Visualisation and Comparison of image collections based on self-organised maps, Proceedings of the second workshop on Australian information security, Data Mining and Web Intelligence, and Software Internationalisation, Vol. 32, 2004, p97-102
[5] Cees G. M. Snoek, Marcel Worring, Jan van Gemert, Jan-Mark Geusebroek, Dennis Koelma, Giang P. Nguyen, Ork de Rooij & Frank Seinstra, MediaMill: Exploring news video archives based on learned semantics, Proceedings of the 13th annual ACM international conference on Multimedia, ISBN:1-59593-044-2, 2005, p225-226
90
[6] Seung-Taek Park & David M. Pennock, Applying collaborative filtering to movie search for better ranking and browsing, Proceedings of the 13th ACM SIGKDD international conference on Knowledge discovery and data mining, ISBN:978-1-59593609-7, 2007, p550-559
[7] Sören Auer, Christian Bizer, Georgi Kobilarov, Jens Lehmann, Richard Cyganiak & Zachary Ives, DBpedia: A nucleus for a Web of Open Data, Lecture notes in Computer Science, NUMB 4825, 2007, p722-735
[8] Hinko Frouws, SemetaWiki: Wikipedia ontsluiten voor het Semantic Web, Afstudeerscriptie Informatiekunde aan de Rijksuniversiteit Groningen, 2007
91