Thursday, May 19, 2005

O chestie desteapta, zic eu

Am mai facut o chestie "desteapta" (nu fac asa ceva prea des, asa ca permiteti-mi sa ma laud cu ele cand mi se intampla :)). In timp ce "cautam inspiratie" pe paginile Yahoo! Developer Network am dat peste API-ul lor pentru Contextual Search. Dupa cateva momente de admiratie mi-am zis "stai asa, ceva de genul asta pot face si eu cu MogNews!". Avand deja la dispozitie un index de aproximativ 14.000 de cuvinte si o functie de calculare a distributiei statistice Poisson pentru acestea, mi-am zis ca as putea calcula pe baza acestora principalele cuvinte cheie ce "descriu" orice text in limba romana de lungime rezonabila (cum ar fi o insemnare intr-un blog, articol de ziar, note de curs etc.).
MogNews se bazeaza pe acelasi principiu: dandu-se un articol de ziar oarecare, calculez cele "mai importante" cuvinte cheie ce descriu acel articol (ex: in cazul unui articol despre inundatiile de luna trecuta, cuvintele cheie ar putea fi "dig", "Tariceanu", "hotel" etc.).
Asa ca am scris un mic script ce poate accepta ca input orice text in limba romana (de marime rezonabila) si scoate la iesire cele mai importante n dintre acestea (unde n poate fi 7, 10, 15 sau orice numar dorit), in ordinea descrescatoare a importantei lor pentru textul in cauza.
Dar sa trec la primele exemple:

Am plecat de la textul folosit de baietii de la Yahoo pentru a exemplifica serviciul lor de Contextual Search:
Italian sculptors and painters of the renaissance favored the Virgin Mary for inspiration.
In limba romana acesta suna mai mult sau mai putin asa:
Sculptorii si pictorii italieni ai Renasterii au avut drept motiv principal de inspiratie pe Fecioara Maria

O rulare a scriptului returneaza cele mai importante 7 (n ales de mine) cuvinte cheie ale acestei fraze, in ordine descrescatoare a importantei:
sculptorii
renasterii
pictorii
fecioara
inspiratie
italieni
maria


Dar sa luam alt text, de exemplu unul din posturile mele:
Mi-am cumparat o noua carte: Inteligenta artificiala - Aplicatii in prelucrarea limbajului natural, de Doina Tatar. Inca nu am timp sa o citesc, dar la o prima rasfoire pare destul de interesanta. Nu numai ca e "cool" sa citesti in limba romana despre Naive Bayes Classifier sau clasificatoarele Rocchio, dar am descoperit si noi probleme interesante, cum ar fi "word sense disambiguation" ("dezambiguarea sensului cuvintelor") (ma rog, auzisem mai demult de aceasta problema, stiu ca cei de la Google erau interesati sa gaseasca o solutie cat mai buna pentru o mai buna functionare a Google AdWords, dar acum este pentru prima oara cand ma confrunt cu teoria din spatele problemei). Sper sa am si timpul sa pun cate ceva in practica din ceea ce voi citi din ea.
O rulare a scriptului returneaza urmatorul rezultat:
tatar
sense
rocchio
rasfoire
naive
interesante
disambiguation

(din moment ce aprox. 98% din index este format din cuvinte romanesti, scriptul nu da rezultate relevante decat pentru texte scrise in limba romana, prin urmare nu am inclus si partea a doua a postului respectiv, ce continea un citat in engleza).
In weekend-ul asta sper sa continuu "traditia" MogNews legata de data-openness si sa pun la dispozitia tuturor celor posibil interesati rezultatele acestui script. Astfel, pentru inceput planuiesc sa creez o pagina simpla doar cu un field TEXTAREA si un buton de submit. Un posibil user poate introduce un text in limba romana in field-ul in cauza si dupa ce apasa butonul SUBMIT ii vor fi intoarse cele mai importante cuvinte ale textului respectiv (cele ce il descriu cel mai bine). Iar pentru viitorul nu prea indepartat sper ca nici macar sa nu mai fie nevoie ca user-ul sa viziteze aceasta pagina din browser pentru a-i fi intoarsa lista de cuvinte cheie pentru textul sau, va fi de ajuns sa trimita o cerere POST continand textul respectiv si ii va fi intors un fisier XML continand cuvintele cheie (acest pas va veni mai mult in ajutorul developerilor decat al end-userilor obnisuiti).
Poate suna prea entuziast cele de mai sus, e de scuzat, e tarziu in noapte, nu mai apucasem sa "scriu" in Python de mai bine de o saptamana, sunt stresat de prea multe proiecte pentru scoala si orice "gura de aer" (a se citi timp in care ma ocup de ceea ce imi place) poata avea efecte nebanuite.

0 Comments:

Post a Comment

<< Home