Ce parere aveti despre cursul de Interfete Evoluate de anul acesta ?(tematica curs, laboratoare)

duminică, 2 decembrie 2007

Tema 2 - Mini crawler pentru o lista de discutii

Acum catva timp am avut de implementat la tema 2 un mini crawler al unei comunitati online (blog, forum, lista discutii etc.); scopul era acela de a descoperi relatii intre diversii membri care activeaza in respectiva comunitate online si de a retine informatiile intr-o tabela.

Am ales sa analizez lista de discutii a cursului de Sisteme de Operare (http://cursuri.cs.pub.ro/pipermail/so/) - mai exact paginile corespunzatoare mail-urilor trimise in octombrie si noiembrie, si sa concluzionez pe baza unor euristici destul de simpliste cam care e statutul celor care au trimis mail-uri pe lista de discutie: profesor, asistent, student, asistent responsabil de tema.

Ca de obicei, am ales sa scriu codul sub Linux :) folosind Java (fara Eclipse, doar Kate, ant si un terminal). Ca baza de date am folosit 'sqlite' (simplu si eficace).
Prima problema de care m-am izbit a fost faptul ca paginile pe care urma sa le analizez nu erau XHTML :( "Salvarea" a venit din partea unui asistent care a recomandat folosirea 'JTidy' pentru "curatarea" HTML-ului.
Urmatorul pas a fost alegerea tehnologiei de parsare: SAX sau DOM; desi mai ineficient din punct de vedere al consumului de memorie, am ales DOM pentru ca paginile analizate erau cat se poate de simple.

"Curatarea"HTML-ului si parsarea rezultatului s-au dovedit a fi lipsite de efort; mai dificila a fost parcurgerea arborelui si identificarea euristicilor care sa separe cat mai bine studentii de asistenti :) In cele din urma, am stabilit urmatoarele reguli: un mail fara reply reprezinta cel mai probabil un anunt facut de un asistent, ultimul reply a fost scris probabil tot de un asistent care lamureste definitiv problema din mail-ul initial, iar initiatorii unor mail-uri cu multe reply-uri sunt probabil studenti.

Parcurgerea arborelui s-a facut in urma unei analize a htm-ului asociat, pentru a putea identifica mai usor pe ce nivel se afla elementele de interes, in ce relatie sunt etc.
Mai dificila a fost identificarea ultimului mesaj dintr-un thread, din cauza ramificatiilor (ultimul mesaj poate sa apara ca reply al unui mesaj intermediar); o parcurgere recursiva nivelelor mesajelor dintr-un thread a rezolvat problema.

Baza de date a fost folosita prin intermediul JDBC.

Cam atat despre tema 2; codul poate fi download-at de pe site.

Urmeaza tema 3...

Niciun comentariu:

Ce parere aveti despre tehnologia Ajax ?

 
Director-Web.net