Knut Marius Skrevet 14. september 2008 Del Skrevet 14. september 2008 (endret) Jeg går på master i programvareutvikling, og holder på med et prosjekt der jeg jobber med anbefalingssystemer og ontologier, og er i den sammenheng ute etter et par tips. Det vil trolig ta meg lang tid å beskrive hele oppgaven, men hovedpoenget er at jeg skal prøve å lage et system (fortrinnsvis i java) som benytter film-informasjon fra IMDB og kombinerer dette med "ratings" fra Netflix for å kunne gi anbefalinger om filmer. For de som ikke kjenner til Netflix så er det et firma som driver med online filmutleie, og de har offentliggjort en gigantisk database med info om karakterer som ulike brukere har gitt til ulike filmer. Mitt første problem nå er: Hvordan kan jeg hente ut info om filmer fra IMDB til mitt java-program (Scraping). Jeg regnet egentlig med at det fantes IMDB-scrapere for java der ute, men overraskende nok klarte jeg kun å finne PHP-scripts. Jeg har lite peil på PHP, så hadde i utgangspunktet håpt å klare meg med java. Det ideelle hadde vært om IMDB hadde en offisiell webservice som jeg kunne spørre, men det har de tydeligvis ikke. Neste problem blir så å kunne mappe informasjon om IMDB-filmene mot de tilsvarende titlene som ligger i Netflix sitt datasett. Jeg har funnet en artikkel som tar for seg dette, men jeg vet ikke helt om jeg forsto hvordan jeg skulle tolke disse "pickle"-map'ene som han hadde lagt ut. Forsto det som at det var noe man brukte Python for (noe jeg heller ikke har erfaring med). Kan jeg tolke disse pickle-listene i java? Håper på litt respons. Vet at det trolig er litt snevert tema som de færreste har peiling på, men jeg er glad for alle innspill. Endret 14. september 2008 av Knut Marius Lenke til kommentar
steingrim Skrevet 14. september 2008 Del Skrevet 14. september 2008 Mitt første problem nå er: Hvordan kan jeg hente ut info om filmer fra IMDB til mitt java-program (Scraping). Jeg regnet egentlig med at det fantes IMDB-scrapere for java der ute, men overraskende nok klarte jeg kun å finne PHP-scripts. Jeg har lite peil på PHP, så hadde i utgangspunktet håpt å klare meg med java. Det er ikke sikkert det er sååå vanskelig å skrape denne informasjonen selv. Jeg har skrevet en del screenscrapere selv, men jeg bruker mest Python (og BeautifulSoup) da jeg synes det er det perfekte verktøyet til dette formålet, men det er jo helt klart mulig å gjøre i Java også. http://htmlparser.sourceforge.net/ kombinert med http://hc.apache.org/httpclient-3.x/ burde får deg et stykke på veien. Litt skitten programmering må du regne med, men velkommen til skjermskrapernes verden Fordelen er at du blir så innmari glad den gangen du kommer over noe som tilbyr en webservice! Kan jeg tolke disse pickle-listene i java? Pickling er serialisering i Python. Så nei, du kan ikke det direkte ettersom det er binært serialiserte python-datastrukturer. Men du kan jo benytte deg av ideene og skrive dette for Java. Lenke til kommentar
Knut Marius Skrevet 14. september 2008 Forfatter Del Skrevet 14. september 2008 Ja, jeg har vurdert å prøve å lage en scraper selv, men siden jeg ikke har laget scrapere før så er det vel fare for at det ikke blir helt perfekt. Er vel en fordel å lage det mest mulig dynamisk, slik at ikke hele scraperen blir ubrukelig dersom IMDB gjør en liten endring i HTML-en sin. Det gjør egentlig ikke noe om jeg bruker en løsning som ikke er den mest elegante og ressursbesparende, siden dette ikke er noe som skal settes i drift, men bare hente ut data (en gang) som skal brukes til å forske litt på. Siden dette bare dreier seg om engangs innsamling av data så er det en fordel om jeg slipper å bruke lang tid på å sette meg inn i nye teknologier/språk osv. Jeg fant forresten dette. IMDB legger ut alt som tekstfiler. Vil kanskje være bedre å bruke det som kilde.. Lenke til kommentar
steingrim Skrevet 15. september 2008 Del Skrevet 15. september 2008 Jeg fant forresten dette. IMDB legger ut alt som tekstfiler. Vil kanskje være bedre å bruke det som kilde.. De tekstfilene så jo helt geniale ut Der har du datagrunnlaget ditt. Lenke til kommentar
Knut Marius Skrevet 15. september 2008 Forfatter Del Skrevet 15. september 2008 Jepp. Er det jeg har som utgangspunkt nå. Hadde bare vært genialt hvis de programmene som skulle generere en database ut av det faktisk hadde fungert.. Får jeg alt inn i en database så er jeg langt på vei. Da gjelder det bare å få tydet python-pickle-filen (Noe jeg foreløpig ikke har peiling på hvordan jeg skal gjøre ) Lenke til kommentar
steingrim Skrevet 15. september 2008 Del Skrevet 15. september 2008 Du må bruke Python til det. Last inn filen i Python og serialiser datastrukturen som noe tekstlig som Java-applikasjonen din kan lese. Dog vil jeg tro du kan få problemer hvis du feks bruker feil versjon av Python. Må du virkelig lese disse? Har du ikke programmet som genererte de? Lenke til kommentar
Knut Marius Skrevet 15. september 2008 Forfatter Del Skrevet 15. september 2008 Vel, såvidt jeg forsto så var denne mappingen generert av et Python-script, så jeg må vel uansett touche Python hvis jeg skal ta i bruk det han har laget. Er vel sikkert ikke allverdens jeg trenger å lære meg for å få skrevet ut dette til txt som jeg kan tolke i java (får jeg håpe) Lenke til kommentar
pgdx Skrevet 15. september 2008 Del Skrevet 15. september 2008 Så problemet nå er at du ikke kan nok Python til å få ut dataene? Går det ikke an å crawle netflix selv? Å lage en crawler som henter ut noen data fra en bestemt side er vel gjort på en ettermiddag. Hvor tar du mastergraden din? Lenke til kommentar
Knut Marius Skrevet 15. september 2008 Forfatter Del Skrevet 15. september 2008 Å få ut dataene var ikke noe problem...Men det viser seg at det ikke var helt de riktige dataene som jeg var ute etter. Mappet ga informasjon om features filmer hadde til felles, men det fortalte ikke noe om _hvilke_ features. Altså vekter de det like tungt at det er to amerikanske filmer som at det er to filmer av samme regissør. Jeg får finne en måte å mappe dataene selv. Men nå er hvertfall problemet med å hente ut data fra IMDB løst. PS: Nei, å crawle data fra IMDB sine nettsider er ikke en ting som gjør seg selv. Skal mye til å ikke få en skjør løsning (som kan slutte å fungere dersom IMDB endrer HTML-koden sin) Lenke til kommentar
pgdx Skrevet 15. september 2008 Del Skrevet 15. september 2008 PS: Nei, å crawle data fra IMDB sine nettsider er ikke en ting som gjør seg selv. Skal mye til å ikke få en skjør løsning (som kan slutte å fungere dersom IMDB endrer HTML-koden sin)Trodde det var det du mente med:Det gjør egentlig ikke noe om jeg bruker en løsning som ikke er den mest elegante og ressursbesparende, siden dette ikke er noe som skal settes i drift, men bare hente ut data (en gang) som skal brukes til å forske litt på. Lenke til kommentar
Knut Marius Skrevet 15. september 2008 Forfatter Del Skrevet 15. september 2008 (endret) Ja og nei.. En alt for dirty løsning gjør fort at jeg ikke føler at jeg kan stole på resultatene 100% heller.. skal slå opp rundt 80.000 filmer, og det kan fort snike seg inn ting i HTMLen som jeg ikke har tatt høyde for. Liker uansett bedre å ha dataene lokalt på strukturert form (siden det faktisk var mulig). Måtte vel uansett lagt det inn i en database før eller siden uansett, siden jeg regner med å måtte kjøre en del SQL-spørringer. Husk at jeg faktisk ikke visste at IMDB tilba txt-versjoner av databasen sin når jeg laget denne tråden...Så akkurat det der med scraping er nå ikke lenger et tema siden jeg har funnet en løsning på det problemet som jeg liker mye bedre Endret 15. september 2008 av Knut Marius Lenke til kommentar
trtrtr Skrevet 17. september 2008 Del Skrevet 17. september 2008 om du ikke har lyst til å parse disse text filene selv, så har disse allerede gjort det for deg: http://www.jmdb.de/ funker som gull Lenke til kommentar
Knut Marius Skrevet 17. september 2008 Forfatter Del Skrevet 17. september 2008 Ja, jeg fant jmdb nå jeg også Fikk problemer med PostgreSQL (Film-tabellen var tom), men funka veldig bra med MySQL! Så innhenting av dataene fra IMDB er i boks. Må bare finne ut beste måten å matche alle de 80.000 titlene i Netflix sitt datasett mot IMDB sine. De er ikke alltid konsekvente i hvordan titlene skrives, så det er ikke alltid så lett å finne mønstere som gir treff hver gang. Av de 18.000 titlene i Netflix så var det bare ca 30% av titlene som faktisk fant en matchende tittel i IMDB (naivt søk). Må titte litt nærmere på de som ikke fikk treff, og leke litt med sql sin LIKE osv. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå