R omanian O pen S ource Edu cation Programming Assignment Curs de Dezvoltare Liber ̆ a Autor: Tudor Cebere Email: tudorcebere@rosedu.org February 14, 2020 1 Admitere Pentru a fi admis , i ˆ ın cadrul programului CDL, student , ii trebuie s ̆ a rezolve problema propus ̆ a s , i s ̆ a trimit ̆ a solut , ia conform detaliilor specificate. Doar submisiile care implementeaz ̆ a funct , ionalit ̆ at , ile de baz ̆ a descrise vor fi luate ˆ ın considerare. Fiecare submisie valid ̆ a va fi evaluat ̆ a de c ̆ atre mentori, fiecare mentor alegˆ and un set de rezolv ̆ ari pe care le consider ̆ a pentru mentorat. 2 Problem ̆ a - Open Source Search Engine 2.1 Enunt , Dorin ˆ ıs , i dores , te s ̆ a implementeze un motor de c ̆ autare de baz ̆ a ˆ ın documente pentru a g ̆ asi mai us , or fis , ierele al c ̆ aror cont , inut ˆ ıl intereseaz ̆ a. El s , tie c ̆ a fis , ierele ˆ ın care caut ̆ a nu se modific ̆ a niciodat ̆ a s , i c ̆ a motorul s ̆ au de c ̆ autare foloses , te query-uri scrise sub form ̆ a logic ̆ a. Cˆ and face o interogare, el vrea s ̆ a g ̆ aseasc ̆ a toate documentele care respect ̆ a o anumit ̆ a schem ̆ a logic ̆ a pe baza cuvintelor cont , inute de document. Exemple de query-uri: • (Linus || Torvalds) && kernel && C Dorin vrea s ̆ a g ̆ aseasc ̆ a toate documentele care cont , in string-urile ”Linus” sau ”Torvalds”, al ̆ aturi de string-urile ”kernel” s , i ”C”. • !(java) && cool && programming && languages Dorin vrea s ̆ a g ̆ aseasc ̆ a toate documentele care cont , in string-urile ”cool”, ”programming” s , i ”languages”, dar nu s , i string-ul ”java”. • Machine && Learning && !(Siraj || Raval) Dorin vrea s ̆ a g ̆ aseasc ̆ a toate documentele care cont , in string-urile ”Machine” s , i ”Learning”, dar nu cont , in string-urile ”Siraj” sau ”Raval”. Observat , ii legate de query-uri: • Mereu vor fi parantezate corect. • Nu pot avea mai mult de 20 de termeni. • Pot cont , ine cuvinte lowercase sau uppercase, dar care vor fi considerate ca lowercase ˆ ın cadrul c ̆ aut ̆ arii. C ̆ autarea este una case-insensitive, cuvintele ”Andrei” s , i ”andrei” fiind echivalente. De asemenea, Dorin se ˆ ıntreab ̆ a cum s ̆ a reprezinte datele ˆ ın memorie astfel ˆ ıncˆ at un lookup s ̆ a fie cˆ at mai put , in costisitor. Prima solut , ie la care se gˆ andes , te este s ̆ a rezolve schema logic ̆ a cerut ̆ a s , i s ̆ a caute liniar prin fiecare document, dar aceast ̆ a abordare nu este suficient de eficient ̆ a. Dup ̆ a o perioad ̆ a, Dorin se gˆ andes , te la o structur ̆ a de tip inverted index, ˆ ın care va ret , ine ˆ ın ce document apare fiecare cuvˆ ant, dup ̆ a urmatoarea schem ̆ a: 1 Cuvˆ ant doc1 doc2 doc3 open 1 0 1 source 1 0 0 kernel 0 0 1 security 0 1 0 C 1 1 1 Observ ̆ am c ̆ a marc ̆ am existent , a unui cuvˆ ant ˆ ıntr-un document prin 1 dac ̆ a exist ̆ a sau 0 dac ̆ a nu exist ̆ a. Astfel, pentru a g ̆ asi documentele ˆ ın care apar aceste cuvinte, folosim array-urile binare asociate cuvintelor s , i aplic ̆ am schema logica cerut ̆ a. La final, fiecare document care respect ̆ a schema logic ̆ a va fi marcat cu 1. Exemplu de rezolvare a unui query: open && !(source) && (security || C) [1 0 1] && !([1 0 0]) && ([0 1 0] | [1 1 1]) [1 0 1] && [0 1 1] && [1 1 1] [0 0 1] doc3 este singurul document care respect ̆ a toate cerint , ele din c ̆ autarea noastr ̆ a. Cum lui Dorin nu prea i-a pl ̆ acut cartea, te roag ̆ a pe tine s ̆ a ˆ ıl ajut , i s ̆ a implementeze acest search engine. Dac ̆ a reus , es , ti s ̆ a ˆ ıl ajut , i pe Dorin ˆ ın implementare, ˆ ıt , i va pune o vorb ̆ a bun ̆ a cu mentorii din cadrul CDL. 2.2 Funct , ionalit ̆ at , i adit , ionale Dup ̆ a ce implementat , i solut , ia problemei, fiecare proiect trebuie s ̆ a implementeze minim o funct , ionalitate ˆ ın plus (dar cu cˆ at mai multe, cu atˆ at mai bine). Acestea pot fi atˆ at din lista de mai jos, cˆ at s , i unele gˆ andite de voi. ˆ Incuraj ̆ am s , i apreciem solut , iile care vin cu idei originale. Funct , ionalit ̆ at , i posibile : • GUI pentru search engine • ˆ Imbun ̆ at ̆ at , irea search engine-ului: tf-idf • Paralelizarea operat , iilor • Set de teste s , i code coverage • Folosirea bazelor de date 2.3 Informat , ii utile Pentru a testa solut , iile ˆ ınc ̆ arcate, vom folosi documentele de aici. Toate submisiile trebuie s ̆ a fie postate pe un github public, iar link-ul c ̆ atre repo s ̆ a fie atas , at ˆ ın form-ul de submisie. Toate submisiile trebuie s ̆ a fie documentate ˆ ın Readme.md. Pot , i urm ̆ ari acest tutorial despre cum s ̆ a faci un Readme.md bun. Toate submisiile trebuie s ̆ a aib ̆ a un sistem de build care s ̆ a instaleze toate dependint , ele necesare proiectului. Proiectul trebuie s ̆ a ruleze pe Ubuntu 18.04. 2 3 Trimitere solut , ie s , i ˆ Intreb ̆ ari Submisia trebuie f ̆ acut ̆ a ˆ ın acest form. Pentru ˆ ıntreb ̆ ari: • ROSEdu Slack, pe channel-ul: cdl primavara 2020 intrebari • Mail 3