Friday, May 27, 2005

MogContext

Am reusit sa termin ceea ce promisesem mai devreme, si prin urmare va prezint MogContext. Ideea e simpla, introduceti un text in limba romana, apasati butonul "Gaseste context", si ar trebui sa va fie returnate 10 dintre cele mai relevante cuvinte ale textului respectiv, in ordinea descrescatoare a importantei.
Give it a try. Sunt binevenite toate parerile asupra bunei sau proastei functionari a serviciului.

Wednesday, May 25, 2005

New job

Am un nou loc de munca. Yayy!! Si mai misto este ca am avut norocul sa dau peste una dintre cele importante firme din Europa ce se ocupa de Python. Incep saptamana viitoare, de-abia astept!

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.

Friday, May 13, 2005

REST + functional programming = 1060 NetKernel

Tocmai ce am terminat de "rumegat" articolul lui Peter Rodgers de pe xml.com, Introducing NetKernel.
Pe scurt, 1060 NetKernel is the logical extrapolation of the simple idea of using URIs to dynamically locate and invoke software components. , adica raspunsul la intrebarea What if software components were treated as URI-addressable services and invoked by making Web-like URI requests? .
Invocarea serviciilor se face folosind "Active URI", adica un URI format dintr-o "baza" urmata de orice numar de argumente, fiecare argument fiind deasemenea un URI.
Exemplu: active:xslt+operator@file:///mytransform.xsl+operand@file:///mydoc.xml
Documentul XML mydoc.xml trece prin "razatoarea" mytransform.xsl si este afisat in concordanta.
Cum orice argument al unui "Active URI" este un URI, el poate fi in acelasi timp un "Active URI" la randul lui.

Carlos explica si alte dedesubturi ale NetKernel-ului (NetKernel poate lucra in acelasi timp cu public URI si internal URI, avand inclusa o functionalitate care face maparea de la un tip de URI la celalalt), iar calitatile sale "functionale" nu au trecut neobservate.
Se tot vorbeste de un Google OS, dar ceea ce au facut baietii de la HP Labs pare prima realizare majora in incercarea de a obtine "the best of the two worlds: PC OS vs. World Wide Web". Plus ca "XML Pipelines" suna genial. Si nu in ultimul rand REST + functional programming rocks !

Thursday, May 05, 2005

O noua carte

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.

Update: Se pare ca si Yahoo! sunt interesati. Just saw this: Yahoo Seeking Contextual Search Scientist/Engineers.
As member of Yahoo's Contextual Search team the candidate will be involved with advanced research and development on problems in contextual disambiguation, topic extraction and context vector space modeling.(...)
Duties will include the following: Document/text analysis for the purpose of creating document term vectors, topic extraction for search result biasing and personalization.(...)
Exceptional C++, Scripting (Perl, Python) and Java skills.

I'm still working on this:
The ideal candidate will have an advance degree (Ph. D. / MS) in computer science or a closely related discipline. :)