Automatizarea analizei și clasificării ofertelor de investiții [303922]
Universitatea Tehnică a Moldovei
Automatizarea analizei și clasificării ofertelor de investiții
Automatization of analysis and classification of grants
Student: [anonimizat]:
conf universitar. Ciorbă Dumitru
Chișinău 2018
Rezumat
Analizatorul și clasificatorul ofertelor de investiții presupune un sistem modular de căutare rapidă și eficientă a [anonimizat], agregarea și prelucrarea datelor. Sistemul este compus din trei componente:
un analizator a cărui scop este de a vizita una sau mai multe resurse din internet și a extrage informația despre ofertele de investiții valabile în această resursă;
un clasificator de date a cărui scop este perceperea și omogenizarea datelor percepute de către clasificator pentru oferirea unei modalități eficiente de prelucrare si filtrare a datelor cu ajutorul mai multor criterii prestabilite astfel oferind angajatorilor un instrument perfect de găsire a tenderului necesar;
o interfața de validare și stocare a datelor primite.
Cuvintele cheie sunt:
Granturi;
Donori;
Parser sau analizator sintactic.
În continuare sunt prezentate capitolele tezei într-o formă restrânsă:
[anonimizat], vor fi efectuate comparații cu alte aplicații de acest gen;
capitolul doi va conține modelarea și proiectarea sistemului informatic;
[anonimizat];
al patrulea capitol vizează documentarea aplicației realizate;
în capitolul cinci este prezentată evaluarea economică a proiectului.
Abstract
The analyst and classifier of tenders means a modular, [anonimizat], and data processing. The system consists of three components:
an parser whose purpose is to visit one or more resources on the Internet and extract valid information about tenders in this resource;
a [anonimizat] a perfect tool to find the best tender;
an interface for validating and storing incoming data.
Keywords are:
Grants;
Donors;
Parser.
The following chapters of the thesis are presented in a limited form:
[anonimizat], comparisons will be made with other applications of this kind;
chapter two will contain the design and design of the computer system;
[anonimizat];
the fourth chapter aims at documenting the implemented application;
chapter five presents the economic assessment of the project.
Introducere
Analiza textului(text analysis), denumită și "text mining", este procesul de obținere a informațiilor de înaltă calitate din text. Informațiile de înaltă calitate sunt de obicei derivate prin elaborarea modelelor și a tendințelor prin mijloace cum ar fi învățarea statistică a modelelor[1]. [anonimizat], procesul de structurare a textului de intrare ([anonimizat]-o bază de date ), derivarea modelelor în cadrul datelor structurate și în final evaluarea și interpretarea din producție. "Înaltă calitate" în extragerea de text se referă de obicei la o combinație de relevanță, noutate și interes. Printre sarcinile tipice de exploatare a textului se numără categorisirea textului, clusterizarea textului, extracția conceptului/entității, producția taxonomiilor granulate, analiza sentimentului, rezumarea documentelor și modelarea relațiilor dintre entități .
Analiza textului implică recuperarea informațiilor, analiza lexicală pentru a studia distribuțiile frecvenței cuvintelor, recunoașterea modelului, etichetarea/adnotarea, extragerea informațiilor, tehnicile de extragere a datelor, inclusiv analiza legăturilor și asociațiilor, vizualizarea și analiza predictivă. Scopul general este de a transforma textul în date pentru analiză, prin aplicarea metodelor de prelucrare a limbajului natural (NLP – natural language processing) și a metodelor analitice.
O aplicație tipică este de a scana un set de documente scrise într-o limbă naturală și fie să modeleze setul de documente pentru scopuri de clasificare predictivă, fie să populeze o bază de date sau un index de căutare cu informațiile extrase.
Termenul de analiză text descrie un set de tehnici de învățare lingvistică, statistică și de mașină care modelează și structurează conținutul informațional al surselor textuale pentru informații de business, analiza datelor exploratorii, cercetarea sau investigație. Termenul este aproape sinonim cu minarea textului, Ronen Feldman a modificat în 2000 o descriere a "minelor de text" [2] în anul 2000 pentru a descrie "analiza de text". Ultimul termen este utilizat mai frecvent în mediul de afaceri, în timp ce "miningul textului" este folosit în unele dintre cele mai vechi domenii de aplicare, datând din anii 1980, în special cercetarea științelor vieții și serviciile de informații guvernamentale.
Termenul de analiză de text descrie, de asemenea, că aplicarea de analize de text pentru a răspunde la problemele de afaceri, fie independent fie în legătură cu interogarea și analiza datelor numerice. Este adevărat că 80% din informațiile relevante pentru afaceri provin dintr-o formă nestructurată, în primul rând text. [3] Aceste tehnici și procese descoperă și prezintă cunoștințe – fapte, reguli de afaceri și relații – care astfel sunt blocate în formă textuală, impenetrabile procesării automate.
1 Analiza domeniului de studiu
Astăzi, premisele dezvoltării economice ale unei țări rezidă în abundența capitalului. Sursele publice de investiții sunt frecvent limitate de diferite interese naționale care tind să capete prioritate – plata salariilor și a pensiilor, ținerea sub control a deficitului bugetar, etc. În lipsa investițiilor, economia pierde. Dacă resursele publice sunt limitate, atunci trebuie încurajată participare în proiecte de granturi. Investițiile străine realizate prin granturi, tendere sunt o sursă sănătoasă pe care se poate baza creșterea nivelului social și cultural, inclusiv în perioadele în care stabilitatea economică este în pericol.
Ofertele de investiții de tip grant sunt foarte importante și aduc un folos enorm de mare deoarece:
investițiile sunt complementare surselor publice de finanțare și furnizează capitalul necesar dezvoltării unei economii;
investițiile nu doar oferă numai un flux de capital, ci și de tehnologie, cunoștințe, practici organizatorice, care stimulează și generează creșterea economică;
investițiile sunt caracterizate de stabilitate pe termen lung. Ceea ce definește este tocmai interesul durabil al donorului.
În prezent, o problema foarte importantă a persoanelor interesate de a găsi o sursă de susținere financiară bazată pe grant este absența posibilității de informare despre ofertele de investiții curente și despre absența informației despre condițiile de participare. Deseori ofertele de investiții sunt câștigate de organizații intermediare între donor și participanții nemijlociți, astfel micșorând transparența decizională și financiară. Din acest motiv se simte nevoia creării unei aplicații care să conțină informația disponibilă despre granturi independent de sursa și tipul lor pentru a oferi o modalitate de utilizare și gestiune a acestor date.
Un dezavantaj foarte important este faptul că nu se poate crea un document universal care trebuie doar actualizat. Fiecare donor plasează informația despre ofertele de investiții într-un format personalizat ceea ce complică procesul de creare a unei resurse de stocare centrale. Pentru a ușura desfășurarea procesului de cercetare a ofertelor de investiții este necesară crearea unui sistem automat de analiză și clasificare care să ofere o modalitate rapidă și efectivă în normalizarea și stocarea datelor.
Această lucrare are ca scop crearea unei aplicații compuse din doua module generale: modulul de extragere și modulul de analiză. Modulul de extragere a datelor are ca scop scanarea resurselor donorilor în scopul găsirii informației necesare despre granturi plasate, efectuarea unei prelucrări și transmiterea informației către modulul de analiză, care la rândul său urmând un anumit set de reguli va clasifica informația primită.
Importanța temei
Impactul și eficiența investițiilor străine asupra economiei țărilor nu poate fi contesta. Efectele sale pozitive se reflectă atât asupra producției de bunuri și servicii, precum și asupra consumului, justificând cererea și oferta. Investițiile reprezintă un fator ce generează noi activități economice și are ca finalitate obținerea de bunuri și servicii unei economii prospere[4].
La etapa actuală, potrivit prevederilor strategiei de atragere a investițiilor și promovare a exporturilor [4], atragerea investițiilor și promovarea exporturilor este o prioritate strategică a Guvernului Republicii Moldova. Guvernul dorește să orienteze economia în direcția activităților de producție destinate exportului și să valorifice mai eficient potențialul țării în calitate de punct natural de tranzit între Est și Vest. Totodată, conform Strategiei Naționale de Dezvoltare a Republicii Moldova 2012-2020, se optează pentru schimbarea paradigmei de dezvoltare a economiei și anume, necesitatea renunțării la modelul de creștere bazat pe consumul alimentat de remiteri în favoarea unui model dinamic bazat pe atragerea investițiilor străine și locale, precum și dezvoltarea industriilor exportatoare de bunuri și servicii.
In prezent se estimează „existența a peste 5 de site-uri specializate în oferirea informației despre ofertele de investiții, principalele caracteristici a cărora sunt orientarea unilaterală fie asupra unui anumit domeniu de investire sau a unui anumit teritoriu politico-geografic. Principalele caracteristici a aplicațiilor web în domeniul ofertelor de investiții sunt:
costurile sunt foarte scăzute sau absente;
ofertele sunt identificate foarte târziu după s-a făcut anunțul;
schimbul de informații cât despre organizație cât și despre donor este foarte lent;
numărul de accesări a unor din site-uri și promovarea lor este insuficientă.
Cu ajutorul acestei aplicații totalitatea și standardul documentelor plasate despre tender nu importă, după extragerea datelor din resursele donatorilor, datele sunt transmise clasificatorului care va genera din totalitatea informației prezente într-un set standardizat, care poate fi expus oricărui tip de interogări necesare și în acest mod utilizatorii au acces instant la cele mai recente oferte de investiții cu posibilitatea de filtrare a rezultatelor după criteriile personale.
Descrierea sistemelor deja existente
WineMoldova este o aplicație web (figura 1.1) care oferă informații strict despre granturi în sectorul vinicol. Programul de restructurare a Sectorului Vitivinicol a fost conceput de către Guvernul Republicii Moldova și Banca Europeană de Investiții (BEI) pentru a soluționa vulnerabilitățile structurale din industria vitivinicolă a Moldovei. Conform Contractului de Finanțare semnat la 23 noiembrie 2010, BEI acordă Republicii Moldova un împrumut în mărime de 75 milioane EUR, destinat realizării Programului[5].
Scopul aplicației este contribuirea la înviorare a sectorului vitivinicol din țară și promovarea producerii vinului cu denumire de origine protejată (D.O.P.) și indicație geografică protejată (I.G.P.)[5].
Obiectivele aplicației sunt oferirea informației despre:
tendere și granturi de restructurare a sectorului vitivinicol, implementând tehnologii și procese conform standardelor europene.
granturi de îmbunătățirea a caracteristicilor și popularitatea vinului produs în Moldova, precum și ameliorarea calității la fiecare etapă a producerii.
informație despre diversificarea pieței de desfacere prin asigurarea autenticității și calității producției vinicole livrate.
Figura 1.1 – Aplicația WineMoldova
Organizația Națiunilor Unite în Moldova oferă informație despre granturi la care pot participa doar cetățenii Republicii Moldova și ajută la ameliorarea problemelor curente. Organizația Națiunilor Unite se angajează să colaboreze cu Guvernul Republicii Moldova pentru a contribui în mod durabil la realizarea priorităților naționale în domeniul drepturilor omului și al dezvoltării și a îmbunătăți condițiile de viață ale tuturor oamenilor din țară, în special ale celor mai vulnerabili și dezavantajați[6].
Bazându-se pe rezultatele obținute în contextul Cadrului de parteneriat ONU – Republica Moldova (UNPF) 2013-2017 și continuând abordarea „Unitate în acțiune” (DaO), Guvernul Republicii Moldova și sistemul Organizației Națiunilor Unite vor urmări realizarea priorităților naționale de dezvoltare, a Obiectivelor de Dezvoltare Durabilă (ODD) incluse în Agenda pentru Dezvoltare Durabilă 2030, precum și a angajamentelor internaționale ale țării privind drepturile omului și a agendei de reformă ce ține de procesul de asociere cu Uniunea Europeană (UE).
Având statutul de organizație publică, Organizația Națiunilor Unite în Moldova care activează cu sprijinul fondurilor acordate de donatori prin angajamentul de a sprijin a țările în curs de dezvoltare, ONU se conduce de următoarele principii:
Selectarea ofertei reprezintă o combinație optimală a costurilor și beneficiilor pe durata contractuală și satisface necesitățile beneficiarilor finali. Valoarea optimală a banilor prestați este rezultatul a mai multor factori importanți, inclusiv calitatea, profesionalismul, experiența și reputația furnizorului cât și măsura în care organizația își poate atinge obiectivele strategice procurând acest bun sau serviciu.
Corectitudinea, integritatea și transparență asigură coerența procesele competitive, deschise și bazate pe reguli. Furnizorii potențiali sunt tratați în mod egal, iar procesul este bazat pe criterii clare de evaluare și instrucțiuni de solicitare a ofertelor.
Recunoaștere internațională prin oferirea tuturor furnizorilor oficiali informații extrem de necesare potrivit noilor regulile ONU, precum și oportunități de participare în acțiunile de procurare sau restricționare atunci când este necesară atingerea scopurilor de dezvoltare.
Figura 1.2 – Site-ul Națiunilor Unite în Moldova
1.3 Scopurile și obiectivele temei alese
Obiectivul temei alese presupune crearea unui sistem modular și scalabil de căutare rapidă și eficientă a ofertelor de investiții, care are ca scop eliminarea muncii manuale în căutarea, agregarea și prelucrarea datelor. Sistemul va fi compus din trei componente:
un analizator a cărui scop este de a vizita una sau mai multe resurse din internet și a extrage informația despre ofertele de investiții valabile în această resursă;
un clasificator de date a cărui scop este perceperea și omogenizarea datelor percepute de către clasificator pentru oferirea unei modalități eficiente de prelucrare si filtrare a datelor cu ajutorul mai multor criterii prestabilite astfel oferind utilizatorilor un instrument eficient de găsire a ofertei de investiții necesare într-un timp scurt;
o interfața de validare și stocare a datelor primite.
Sistemul propus are misiunea de a schimba modul în care datele ofertelor de investiții la moment sunt agregate prin oferirea unei modalități de centralizare a acestor date și utilizarea lor eficientă. Aplicația creată va permite clasificarea documentelor cu filtrarea bazată pe reguli, care permite obținerea unui grad înalt de precizie într-o gamă largă de medii, având avantajul de a utiliza exemple de documente pentru a defini fiecare categorie. La rândul lor, clasificatorul bazei de reguli trebuie ajutat la reglarea fină a clasificării și corectarea rezultatelor clasificatorilor.
Un avantaj cheie al aplicației este faptul că permite o analiză mult mai eficientă a cunoștințelor existente. Abilitatea de a extrage informații reduce în mod automat timpul petrecut pentru a asigura acoperirea cunoștințelor domeniului în procesul de revizuire a literaturii. De exemplu, având în vedere volumul mare de publicații disponibile, ar putea fi nevoie de un cercetător uman pentru prelucrarea a unui volum mare de date și transformarea lor într-un set coerent și corect asupră căruia se pot efectua operații de căutare si filtrare.
În unele cazuri, mineritul de text poate fi transformat nu doar în felul în care se realizează căutarea, ci și în ceea ce privește căutarea și analiza dinamică a documentelor; Entitățile adnotate semantic sau reprezentările reutilizabile și modelele sintactice necesare oferă o resursă de cercetare semnificativ îmbunătățită când este pusă direct la dispoziția altor cercetători și dezvoltatori. Acest acces ar putea fi prin intermediul acordurilor de acces deschis sau prin contracte cu deținătorii de drepturi de autor care permit miniere de text și compararea cu alte surse. Beneficiul principal aici este accesul la cunoștințele derivate ale altora într-o formă care poate fi ușor interogată și reutilizată. Aceasta nu este doar o chestiune de eficiență, ci și de disponibilitate.
Cel mai important obiectiv al temei ales este automatizare procesului de colecție a datelor necesare minimizând la minim munca umană care la moment se folosește pentru colectarea și omogenizarea datelor.
2 Proiectarea sistemului
Aplicația are ca scop automatizarea procesului manual de căutarea datelor despre ofertele de investiții valabile din mai multe surse, omogenizarea datelor după anumite criterii și salvarea lor într-o structură bine definită.
Aplicația propusă are ca obiect al automatizării parcurgerea simultană a mai multor resurse de informații si extragerea informației necesare, măsura cantității de informație procesată folosind această aplicație va depăși de câteva ori caracteristicile personalului uman. Validarea și clasificarea datelor dintr-un lucru de rutină se va transforma într-un procedeu automatizat de câteva click-uri prin care o totalitate enormă de date se v-a transforma din colecție de date nestructurate într-o colecție bine definită ce poate fi vizualizată și folosită.
Aplicația are ca obiectiv:
automatizarea procesului de introducere a datelor;
automatizarea procesului de analiză, clasificarea si validarea datelor.
Pentru satisfacerea obiectivelor propuse și a obține o arhitectură scalabilă aplicația necesită un set de funcționalități:
adăugarea și ștergerea resurselor noi de date fără modificarea sursei;
posibilitatea de utilizare a mai multor instanțe de colectori de date;
analiza documentelor plasate pe resursele web;
analiza datelor inițiale indiferent de natura și starea lor inițială;
posibilitatea de modificare a structurii datelor de ieșire;
stocarea paralelă a datelor în diferite surse;
interfață de vizualizare a stării procesului.
Pentru buna funcționare a aplicației este necesară prezența a trei tipuri de actori:
administrator al arhitecturii sistemului;
administrator al procesului de analiză;
expert al verificării și validării procesului de analiză.
Administratorul sistemului are sarcina de configurare a elementelor sistemului și modificarea lor pentru buna funcționare a sistemului, cât și extinderea funcționalității lui. În obligațiunile acestuia va intra modificarea modulelor de colectare a datelor cât și administrarea procesului post-verificare și persistarea datelor.
Administratorul procesului de analiză are sarcina de a control a bunei execuții modulului de analiză și modificarea bazei de cunoștințe a modulului de analiză, extinderea lui cât și modificarea algoritmului procesului de analiză.
Expertul verificării și validării procesului de analiză este extrem de necesar la etapa de antrenare a modulului de analiză, și are ca scop antrenarea modulului de analiză pentru obținerea celor mai bune rezultate.
2.1 Abrevieri, termeni utilizați în document
Totalitatea abrevierilor utilizate în această lucrare necesari pentru buna înțelegere a sistemului sunt prezente in tabelul 2.1.
Tabelul 2.1 – Totalitatea abrevierilor și descrierea lor
2.2 Funcționalitățile sistemului
Pentru realizarea sistemului este necesară identificarea obiectelor informaționale care vor fi implicate în buna activitate a softului. În procesul de proiectare sistemul colectare și analiză a datelor se evidențiază câteva categorii de obiecte informaționale:
parser;
rețea neuronală;
bază de cunoștințe;
bază de date;
utilizatorii sistemului;
fișiere și documente.
Parserul reprezintă entitatea aplicației care răspunde pentru generarea datelor de intrare în sistem. Independent de multitudinea modulelor de parsing și natura lor în modul de colectare a datelor, ele trebuie sa lucreze în paralel fără micșorarea vitezei de procesare sau influențarea altor componente a sistemului. Arhitectura internă a parserului este discretă și nu are o deosebită importanță, primează doar modalitatea de comunicare cu modulul de analiză.
Rețeaua neuronală are ca scop convertirea datelor nestructurate într-un set bine definit și clar. Testarea și antrenarea rețelei neuronale se va face pe un set predefinit de date. La etapa inițială de antrenare a modulului de analiză va lucra în simbioză cu DataManagerul care va verifica rezultatele analizei rețelei și returna un feedback pe baza căruia rețeaua neuronală își îmbogățește baza de cunoștințe și mărește calitatea lucrului efectuat.
Baza de cunoștință reprezintă colecția de seturi de date logice pe baza căruia se face învățarea și antrenarea rețelei neuronale.
Baza de date în acest sistem are ca scop stocarea datelor pe parcursul generării datelor de intrare, analiza acestora cât și stocarea rezultatelor finale primite.
Utilizatorii sistemului sunt persoanele care lucrează nemijlocit cu sistemul gestionează informația de intrare și ieșire fac schimbările necesare în procesul de lucru, analiză și validare a datelor.
Fișiere, documente, pagini web sunt resursele de date nestructurate care reprezintă majoritatea resurselor de informației în internet dar au un preț și o importanță foarte ridicată. Odată transformate într-un format bine stabilit și clar aceste date pot fi agregate și utilizate.
2.3 Cerințe funcționale a sistemului
Pentru asigurarea funcționării eficiente și a calității sistemului este necesară de întocmirea anumitor cerințe funcționale.
UC.01 Modificarea surselor de intrare(Tabelul 2.2):
descriere: permite utilizatorului să adauge, șteargă sau să permită accesul parserelor de date;
utilizatori: Arhitect.
Tabelul 2.2 – Cazul de utilizare UC.01 Modificarea surselor de intrare
Continuare Tabelul 2.2
UC.02 Modificarea procesului de analiză a datelor(Tabelul 2.3):
descriere: permite modificarea procesului de analiză și modalitatea de analiză a datelor de intrare;
utilizatori: Data Analyst.
Tabelul 2.3 – Cazul de utilizare UC.02 Modificarea procesului de analiză a datelor
UC.03 Validarea datelor procesate(tabelul 2.4):
descriere: oferă testarea rezultatului procesării modulului de analiză cu scopul de mărirea calității și micșorarea erorilor de analiză a datelor;
utilizatori: Data Manager.
Tabelul 2.4 – Cazul de utilizare UC.03 Validarea datelor procesate
UC.04 Modificarea procesului de post-analiză(tabelul 2.5):
descriere: presupune modificarea surselor și a procesului de salvare a rezultatelor analizei textuale.
Tabelul 2.5 – Cazul de utilizare UC.04 Modificarea procesului de post-analiză
2.4 Structura sistemului
Unul din aspectele cele mai importante referitor la definirea și înțelegerea unui sistem este prin determinarea interacțiunii utilizatorilor cu componentele acestuia. Pentru o relatare succintă a acestei relații ce definesc funcționalitățile generale a sistemului, se utilizează diagramele caz de utilizare având ca entitatea principală actorii: Architect, Data Analyst și Data Manager (Figura 2.1,2.2,2.3).
Figura 2.1 – Cazul de utilizare al Architectului
Architectul administrează etapele de pre-analiza și post-analiză, sarcinile acestuia presupun gestiunea listei de resurse a sistemului, garantarea și restricționarea sistemelor terțe la accesul sistemului, administrarea procesului de parsare precum și administrarea modulului de salvare.
Figura 2.2 – Cazul de utilizare al Data Analyst-ului
În abilitățile Data Analystul include utilizarea tehnologiilor avansate de analiză, inclusiv învățarea în mașină și modelarea predictivă, pentru a furniza informații suplimentare dincolo de analizele statistice. Cererea de abilități în domeniul științelor în domeniul datelor a crescut semnificativ în ultimii ani, deoarece companiile doresc să culeagă informații utile din cantitățile voluminoase de date structurate, nestructurate și semistructurate pe care o întreprindere mare produce și colectează – colectiv numite date mari.
Data Analystul este singurul administrator care acces la manipularea modului de analiza, el are dreptul de modificarea bazei de cunoștințe, de modificare a lui, modificare algoritmului de bază al analizei și reantrenarea rețelei neuronale.
Figura 2.3 – Cazul de utilizare al Data Managerului
Un alt utilizator care are acces indirect la modulul de analiză este Data Managerul. Data Managerul este persoana care răspunde de validarea datelor primite de la modulul de analiză. În baza unor convenții prestabilite datele primite de la modul de analiza vor fi analizate de către Data Manager și la necesitate vor fi modificările și retransmise modului de analiza pentru reantrenarea rețelei astfel obținându-se rezultate impecabile.
În modelarea a procesului de executare a operațiilor se utilizează diagramele de activități, pentru evidențierea ordinii de trecere a acțiunilor ce au loc în sistem mai jos au fost descrise și reprezentate trei diagrame de activitate.
Figura 2.4 – Activitate de parsare a resurselor
În figura 2.4 a fost descris procesul de parsarea a resursei web si de salvarea a conținutului ei. Un alt exemplu ce poate fi descris cu ajutorul diagramei de activitate este procesul de validare a datelor obținute din sistemul de analiză efectuat de către Data Managerul.
Figura 2.5 – Activitate a procesului de validare
Procesul de analiză a datelor care are loc în interiorul modulului de analiză poate de asemenea descris cu ajutorul digramei de activitate (figura 2.6).
Figura 2.6 – Activitate a procesului de analiză
Pentru definirea stării sistemului și a datelor pe tot parcursul ciclului de lucru a aplicației sunt utilizate diagramele de stare. Prima diagrama (Figura 2.7) reprezintă descrierea stărilor sistemului pe parcursul funcționării.
Figura 2.7 – Stare a sistemului
Pe tot parcursul execuției sistemului datele își schimbă starea foarte des, schimbându-și starea în mai multe forme pentru a atingerea scopul propus. Astfel în figura 2.8 observăm cum are loc tranziția acelor stări.
Figura 2.8 – Tranziția datelor în sistem
În cazul când se dorește adăugarea unei noi resurse este necesar de completat câmpurile ce sunt prezente în forma pentru completare. În cazul când toate câmpurile sunt completate se consideră o resursă validă și are loc salvarea acestei în lista de resurse disponibile(Figura 2.9).
Figura 2.9 – Gestiunea resurselor
Pentru a prezenta fluxul de evenimente care au loc în sistem și a determina succesiunea logică a acestora se utilizează diagrama de secvență(Figura 2.10).
Figura 2.10 – Antrenarea rețelei
La efectuarea operațiunii de adăugare a unui noi resurse actorul principal este administratorul care trimite o solicitare, acesta efectuează o procesare a cererii și expediază utilizatorului forma de adăugare(Figura 2.11).
Figura 2.11 – Adăugare a unei resurse
Pentru afișarea resurselor existente architectul este obligat să se logheze în sistem, urmează verificarea corectitudinii datelor care sunt preluate din baza de date, iar dacă datele sunt valide atunci logarea are loc cu succes. În urma logării se afișează pagina principală a aplicației unde sunt prezentate toate resursele(Figura 2.12).
Figura 2.12 – Afișarea resurselor existente
La evidențierea consecutivității colaborării dintre componentele sistemului și relațiile structurale dintre obiecte se utilizează diagramele de colaborare pentru a arăta interacțiunea dintre componentele sistemului(Figura 2.13).
Figura 2.13 – Antrenarea rețelei
Pentru adăugarea unei resurse noi, administratorul e necesar sa acceseze aplicația, și să acceseze funcționalitatea de adăugare unde să introducă datele necesare. La procesarea informației precum a fost salvate datele are loc notificarea administratorul despre starea resursei adăugate(Figura 2.14).
Figura 2.14 – Adăugarea unei resurse
Pentru vizualizarea unei reprezentări conceptuale a unei structuri comune a întregului sistem se utilizează diagrama de componente unde se stabilesc relațiile de dependență dintre componentele platformei(Figura 2.15).
Figura 2.15 – Componentele sistemului
Pentru modelarea echipamentelor fizice și logice în mediului de implementare se utilizează diagrama de plasare, unde se specifică nodurile existente și interacțiunea acestora(Figura 2.16).
Figura 2.16 – Reprezentarea structurii fizice a sistemului
3 Realizarea sistemului
Sistemul va fi compus din două componente:
un analizator a cărui scop este de a vizita una sau mai multe resurse din internet și a extrage informația despre ofertele de investiții valabile în această resursă;
un clasificator de date a cărui scop este perceperea și omogenizarea datelor percepute de către clasificator pentru oferirea unei modalități eficiente de prelucrare și filtrare a datelor cu ajutorul mai multor criterii prestabilite astfel oferind clienților un instrument perfect de găsire a ofertei de investiții necesare;
o interfața de validare și stocare a datelor primite.
Sistemul propus are misiunea de a schimba modul în care datele ofertelor de investiții la moment sunt agregate prin oferirea unei modalități de centralizare a acestor date și utilizarea lor eficientă.
Scopul lucrării este crearea unei aplicații care va permite clasificarea documentelor cu filtrarea bazată pe reguli, care permite obținerea unui grad înalt de precizie într-o gamă largă de medii, având avantajul de a utiliza exemple de documente pentru a defini fiecare categorie. La rândul lor, clasificatorul bazei de reguli trebuie ajutat la reglarea fină a clasificării și corectarea rezultatelor.
Un avantaj cheie al aplicației este faptul că permite o analiză mult mai eficientă a cunoștințelor existente. Abilitatea de a extrage informații reduce în mod considerabil timpul petrecut pentru a asigura acoperirea cunoștințelor domeniului în procesul de revizuire a literaturii. De exemplu, având în vedere volumul mare de publicații disponibile, ar putea fi nevoie de un cercetător uman de mai mulți ani pentru a analiza corpusul pentru a identifica toate sursele relevante pentru o anumită problemă. Folosirea minerilor de text pentru a identifica materiale relevante ar putea reduce drastic timpul necesar.
În unele cazuri, mineritul de text poate fi transformat nu doar în felul în care se realizează căutarea, ci și în ceea ce privește căutarea și analiza dinamică a documentelor; Entitățile adnotate semantic sau reprezentările reutilizabile și dicționarele de granturi oferă o resursă de cercetare semnificativ îmbunătățită când este pusă direct la dispoziția altor cercetători și dezvoltatori. Acest acces ar putea fi prin intermediul acordurilor de acces deschis sau prin contracte cu deținătorii de drepturi de autor care permit miniere de text și compararea cu alte corporații. Beneficiul principal aici este accesul la cunoștințele derivate ale altor surse într-o formă care poate fi ușor interogată și reutilizată. Aceasta nu este doar o chestiune de eficiență, ci și de disponibilitate.
3.1 Tehnologii utilizate
Docker este un program de calculator care efectuează virtualizarea sistemului de operare , cunoscută și sub numele de containerizare. Dezvoltată de Docker Inc., Docker este orientat în primul rând pentru Linux, unde utilizează caracteristicile de izolare a resurselor kernel-ului Linux, cum ar fi cgroups, kernel namespaces, și un sistem de fișiere capabil de uniune precum OverlayFS pentru a permite "containerelor" independente să ruleze într-o singură instanță Linux, evitând costurile generale de pornire și întreținere a mașinilor virtuale (VM). Suportul kernel-ului Linux pentru spațiul de nume izolat o vizualizare a aplicației pentru mediul de operare, inclusiv arbori de proces, rețea, ID-uri de utilizator și sisteme de fișiere montate, în timp ce cgroups-ul kernelului oferă resurse limitate pentru memorie și CPU. Din versiunea 0.9, Docker include librăria libcontainer ca modalitate proprie de a utiliza direct facilitățile de virtualizare oferite de kernel-ul Linux, pe lângă utilizarea interfețelor de virtualizare abstracte prin libvirt , LXC și systemd-nspawn.
Definite printr-un singur fișier de configurare containerele Docker pot fi refăcute de la zero în foarte scurt timp și vor funcționa identic indiferent de serverul pe care sunt refăcute. Este avantajoasă dezvoltarea aplicațiilor, local, folosind Docker pentru ca mai apoi să poată fi mutate în producție, fără prea multe surprize[7].
Utilizarea containerelor Docker în defavoarea altor soluții (e.g. mașini virtuale, gazde virtuale etc.) aduce o serie de avantaje:
Folosind containere, toate mediile de la dezvoltare la producție sunt identice pentru aplicație. Una din marile probleme ce există în dezvoltarea aplicațiilor backend este că, în mod normal, mediile nu sunt identice când se instalează builduri și apar probleme de dependențe ("Oh, aceasta este versiunea 10.2.1.2 – la staging am folosit 10.2.1.1 și a funcționat"). Mediile de dezvoltare/staging/producție nu sunt identice, sunt configurate diferit, iar un test QA pe oricare din aceste medii nu garantează că nu vor fi probleme după instalare. În trecut, replicarea unei instalări complete era o provocare care necesita eforturi mari. Folosind containere, putem rula același mediu peste tot.
Comparate cu mașinile virtuale, gazdele noastre gestionează mai bine surplusul și livrează performanță mai bună. Deși problema se poate rezolva așa, utilizarea unui mediu virtual complet necesită mai multe resurse din partea gazdei pentru a le putea rula.
Nu lansăm cod sursă sau builduri, ci medii întregi. Când se folosesc containere, instalarea nu mai presupune actualizarea buildurilor pe mediile țintă ci și instalarea mediului. Acest fapt reduce posibilitatea ca build-urile să se strice, deoarece un pas din procesul de build eșuează sau nu funcționează conform așteptărilor. Deoarece instalăm un container care este gata de rulare, știm că ceea ce se află pe mediul țintă rulează corect și conține un build corect funcțional. Acesta este parte a CI-pipeline.
Putem întreține containere ușor. Containerele Docker au un sistem de management de versiune pe "nivele" (figura 3.1), ceea ce se poate compara cu un sistem clasic de management al surselor. Când se fac schimbări la nivel de configurație sau la nivel de container, se păstrează doar diferențele dintre ultima versiune și noua versiune. Astfel, actualizările pe containerele Docker vor fi rapide și se va reduce volumul de date ce trebuie transferat. Containerele Docker sunt create pe baza imaginilor care pot fi doar sisteme de operare și pachete de bază sau un application-stack complet care poate fi lansat împreună cu containerele. Fiecare acțiune luată la nivel de container Docker adaugă un nou nivel nivelului predecesor. Acești pași sunt definiți într-un "Dockerfile.
Figura 3.1 – Arhitectura containerului Docker
Docker Compose este un instrument pentru definirea și rularea aplicațiilor multi-container Docker. Cu ajutorul aceste aplicații, utilizăm un fișier YAML pentru a configura serviciile aplicației. Apoi, cu o singură comandă, creăm și porniți toate serviciile din configurația creată.
Utilizarea aplicației Docker Compose este în principiu un proces în trei etape:
definirea mediului aplicației;
definirea serviciilor care alcătuiesc aplicația dvs. în docker-compose.yml astfel încât acestea să poată fi difuzate într-un mediu izolat;
rulare aplicației sau a serviciilor necesare.
Docker Compose utilizează un nume de proiect pentru a izola mediile unele de altele pentru utiliza acest nume de proiect în mai multe contexte diferite ceea ce ne oferă:
pe o gazdă de dezvoltare a crea mai multe copii ale unui singur mediu, cum ar fi atunci când dorim să rulăm o copie stabilă pentru fiecare filieră caracteristică a unui proiect;
pe un server CI, pentru a continua să se interpună între ele, putem seta numele proiectului la un număr de construire unic;
pe o gazdă comună sau gazdă de dezvoltare să împiedicăm diferite proiecte, care pot folosi aceleași nume de servicii, să interfereze unele cu altele.
Python este un limbaj cu scop general – uneori denumit utilitar – care este conceput pentru a fi ușor de citit și scris. Designerii au pus mai puțin accentul pe sintaxa convențională, ceea ce face mai ușor să lucreze, chiar și pentru cei care nu sunt programatori sau dezvoltatori.
Deoarece este considerat cu adevărat universal și folosit pentru a satisface nevoile de dezvoltare diferite, este un limbaj care oferă o mulțime de opțiuni programatorilor în general. Dacă încep să lucreze cu Python pentru un loc de muncă sau o carieră, pot să sară ușor la alta, chiar dacă se află într-o industrie independentă. Limbajul este folosită pentru operațiunile de sistem, dezvoltare web, server și instrumente administrative, implementare, modelare științifică și multe altele.
Una dintre cele mai mari companii de tehnologie din lume – Google – utilizează python pentru mai multe aplicații. Ei au chiar un portal de dezvoltatori dedicat Python , cu clase gratuite oferite, inclusiv exerciții, clipuri de lectură și multe altele. Creșterea utilizării cadrului Django pentru dezvoltarea web și scăderea popularității PHP a contribuit, de asemenea, la succesul Python.
Python are o comunitate sănătoasă, activă și de susținere, limbajele de programare care nu dispun de documentație și de suport pentru dezvoltatori nu se potrivesc bine. Python nu are nici una dintre aceste probleme. A fost în jur de ceva timp, deci există o mulțime de documentație, ghiduri, tutoriale și multe altele. În plus, comunitatea dezvoltatorilor este incredibil de activă. Asta înseamnă ca oricând cineva are nevoie de ajutor sau sprijin, poate sa o primească in timp util.
HyperText Markup Language (HTML) este limbajul cel mai folosit pentru a crea pagini web. Acest limbaj are ca scop realizarea unei modalități de prezentare către un client (browser) a informației existente pe un server. Uneori se dorește extragerea de informații dintr-o pagină web și deci este nevoie de a procesa acea pagină web. HTML este ierarhizat, ceea ce înseamnă că un parser trebuie să cunoască contextul în care apare un anumit “tag”. Acest lucru face ca metodele de parsing bazate pe expresii regulate să fie dificil de folosit. Parsingul devine și mai complicat atunci când paginile web nu respectă standardul HTML. Python pune le dispoziție un modul HTMLParser. În această lucrare este ilustrată folosirea acestui modul.
Returnarea de pagini web, recoltarea pe Web sau extracția de date web este o metodă de raportare a datelor utilizată pentru extragerea datelor de pe site-uri web. Software-ul de răzuire pe Web poate accesa direct World Wide Web direct utilizând Hypertext Transfer Protocol sau printr-un browser web. În timp ce parsarea web poate fi făcută manual de un utilizator de software, termenul se referă în mod obișnuit la procese automatizate implementate folosind un crawler bot sau web . Este o formă de copiere, în care date specifice sunt colectate și copiate de pe web, de obicei într-o bază de date locală locală sau foaie de calcul, pentru recuperare sau analiză ulterioară .
Preluarea este descărcarea unei pagini (pe care un browser o face când vizualizează pagina). Prin urmare, accesarea cu crawlere pe web este o componentă principală a răsturnării web, pentru a prelua paginile pentru prelucrarea ulterioară. După extragere, poate avea loc extracția. Conținutul unei pagini poate fi analizat, căutat, reformatat, datele sale copiate într-o foaie de calcul și așa mai departe. Crawlerele web de obicei iau ceva dintr-o pagină, să o folosească pentru alt scop în altă parte. Un exemplu ar fi găsirea și copierea numelor și a numerelor de telefon sau a companiilor și a adreselor URL ale acestora într-o listă (răsturnarea de contact).
Reciclarea pe Web este folosită pentru răzuirea contactului și ca o componentă a aplicațiilor utilizate pentru indexarea pe web, exploatarea web și extragerea de date, monitorizarea schimbărilor de preț online și compararea prețurilor, revizuirea produsului (pentru a urmări concurența), colectarea listelor imobiliare, monitorizarea, detectarea modificărilor pe site , cercetarea, urmărirea prezenței și reputației online, mashup-ul web și integrarea datelor web.
Paginile web sunt construite folosind limbi de marcare bazate pe text ( HTML și XHTML ) și conțin frecvent o mulțime de date utile în formă text. Cu toate acestea, majoritatea paginilor web sunt concepute pentru utilizatorii finali umani și nu pentru ușurința utilizării automate. Din acest motiv, au fost create seturi de instrumente care extrag conținutul web. Un răzuitor web(scraping tool) este o interfață de programare a aplicațiilor (API) pentru extragerea datelor de pe un site web. Companiile precum Amazon AWS și Google oferă unelte de scraping web, servicii și date publice disponibile gratuit pentru utilizatorii finali. Formele mai noi de răzuire web implică ascultarea fluxurilor de date de la serverele web. De exemplu, JSON este frecvent utilizat ca mecanism de stocare a transportului între client și serverul web.
Există metode pe care unele site-uri le utilizează pentru a împiedica răsturnarea web-ului, cum ar fi detectarea și dezactivarea roboților din accesarea cu crawlere (vizualizarea) paginilor lor. Ca răspuns, există sisteme de răzuire a web-urilor care se bazează pe utilizarea tehnicilor de analiză DOM , a viziunii pe computer și a procesării limbajului natural pentru a simula navigarea umană pentru a permite colectarea conținutului paginii web pentru analiză offline.
Scrapy, în general, este un cadru de crawling pe web scris în Python. Unul dintre principalele sale avantaje este acela că este construit pe baza rețelei Twisted, un cadru de rețea asincron, ceea ce înseamnă cu alte cuvinte că este cu adevărat eficient și rapid.
Scrapy este disponibil în conformitate cu Python 2.7 și Python 3.3. În Python 2.6, sprijinul a fost abandonat începând de la Scrapy 0.20 și sprijinul Python 3 a fost adăugat în Scrapy 1.1
Principalele componente: urllib2 și Requests sunt module pentru citirea sau deschiderea paginilor web, cu ajutorul modelului protocolului HTTP. Celelalte două sunt BeautifoulSoup și apoi lxml. Acestea sunt pentru, partea distractivă a lucrărilor de scrapping. Sau chiar pentru extragerea punctelor de date din acele pagini care sunt încărcate cu urllib2 și apoi Requests.
Beautiful Soup este o bibliotecă Python concepută pentru proiecte rapide de revizuire, cum ar fi ecranul răzuit. Trei caracteristici îl fac puternic:
Beautiful Soup oferă câteva metode simple pentru navigarea, căutarea și modificarea unui arbore de analiză: un set de instrumente pentru disecarea unui document și extragerea a ceea ce avem nevoie. Nu este nevoie de mult cod pentru a scrie o aplicație.
Beautiful Soup convertește automat documentele primite în Unicode și documentele de ieșire către UTF-8. Nu trebuie implementată codificarea datelor, cu excepția cazului în care documentul nu specifică o codificare, iar Beautiful Soup nu poate detecta una. Apoi trebuie doar de specificat codificarea originală.
Beautiful Soup se află pe topul parserilor Python, cum ar fi lxml și html5lib, permițând încercarea a diferitor strategii de parsare sau viteză de tranzacționare pentru flexibilitate.
Arhitectura Model-View-Controller (Figura 3.2), în documentația de specialitate folosit și sub forma scurtă de MVC, a apărut ca rezultat al necesității de a extragere a metodele tradiționale de gestionare și separare conform aspectelor aplicației. MVC a fost utilizat inițial la limbajul Smalltalk însă a fost utilizat pe scară largă suportând mai multe schimbări. Totuși scopul și principiul de bază nu au suferit modifică și sunt ușor de înțeles, în schimb detaliile sunt îndeajuns de complexe încât să lanseze multe dezbateri și să se întâlnească implementări contradictorii.
Figura 3.2 – Arhitectura MVC
Principiul care stă la baza conceptului Model-View-Controller este împărțirea responsabilităților. Într-o aplicație creată astfel încât să respecte acest concept, partea de model va lucra doar cu starea aplicației și cu logica aplicației, nu va conta cum este sau va fi reprezentată această stare către utilizator sau cum interacționează acesta cu aplicația. La fel și componenta "view", este preocupată doar cu crearea interfeței utilizator în funcție de datele și mai ales a schimbărilor stărilor acesteia, recepționate de la "model". Pentru ea nu contează logica aplicației sau cum are loc procesul de "input", ci doar reprezentarea cât mai corectă a stării curente a modelului. Și în final, "controller"-ul se ocupă cum translatarea acțiunilor prestate de utilizator în "update"-uri către model, nefiind important la ce va folosi modelul aceste "update"-uri[8].
Laravel (Figura 3.3)este un framework web gratuit, open-source PHP, creat de Taylor Otwell și destinat dezvoltării de aplicații web după modelul arhitectural model-view-controller (MVC) și bazat pe Symfony. Unele dintre caracteristicile sale sunt un sistem modular de ambalare cu un manager de dependență dedicat, modalități diferite de accesare a bazelor de date relaționale, utilități care ajută la implementarea și întreținerea aplicațiilor și orientarea spre zahăr sintactic.
Figura 3.3 – Logoul Laravel
Laravel e mai scurt, având o documentație mai ușor de înțeles și care se parcurge mai repede, față de un alt framework, iar un programator care se întâlnește prima dată cu Laravel va înțelege codul în aproximativ două zile, deoarece framework-ul este conceput tocmai pentru a simplifica scrierea și înțelegerea codului.
Laravel a construit în jurul său o comunitate de programatori pasionați care oricând își pun la dispoziție experiența și cunoștințele. Mai mult decât atât, majoritatea pachetelor de învățare sunt gratuite. Laravel sprijină open source-ul, este un framework care conține un cod elegant și care, la momentul actual, influențează noi trenduri în PHP.
În momentul de față, conform sursei SimilarTech, o platformă de analiză de date, există 55.454 de site-uri dezvoltate integral cu Laravel la nivel global și 46.511 de domenii unice dezvoltate cu Laravel. Domeniile de aplicare: Business, News, Entertainment, Travel, Technology și Social.
JavaScript Object Notation sau JSON este un format de fișier standard deschis care folosește un text care poate fi citit de oameni pentru a transmite obiecte de date formate din perechi de atribute-valoare și tipuri de date array (sau orice altă valoare serializabilă ). Este un format de date foarte comun folosit pentru comunicarea asincronă browser-server, inclusiv ca înlocuitor pentru XML în unele sisteme AJAX- style.
JSON este un format de date independent de limbă. Acesta a fost derivat din JavaScript , dar din 2017 multe limbi de programare includ codul pentru a genera și analiza date în format JSON. Tipul media oficial media pentru JSON este application/json . Numele de fișiere JSON utilizează extensia .json.
JSON sa dezvoltat dintr-o nevoie de protocol de comunicare server-to-browser în timp real, fără a utiliza plugin-uri de browser, cum ar fi applet-uri Java sau Flash, metodele dominante utilizate la începutul anilor 2000. Douglas Crockford a specificat și a popularizat formatul JSON. Acronimul a provenit de la State Software, o companie cofondată de Crockford și alții în martie 2001. Co-fondatorii au convenit să construiască un sistem care să utilizeze capabilitățile standard ale browser-ului și a oferit un strat de abstractizare pentru dezvoltatorii web pentru a crea aplicații web clare care au avut conectarea duplex persistentă la un server Web prin menținerea a două conexiuni HTTP deschise și reciclarea lor înainte de expirarea standard a browser-ului, dacă nu s-au schimbat alte date. Co-fondatorii au avut o discuție în cadrul unei mese rotunde și au votat dacă vor suna formatul de date JSML sau JSON, precum și sub ce tip de licență să o pună la dispoziție. Crockford, fiind inspirat de cuvintele președintelui Bush, ar trebui, de asemenea, să fie creditat cu licența JSON ("Software-ul va fi folosit pentru bine, nu pentru rău") pentru a deschide sursa Bibliotecile JSON.
MongoDB este un program de baze de date orientat spre documente, bazat pe documente. Clasificat ca un program de baze de date NoSQL, MongoDB folosește documente asemănătoare JSON cu scheme. MongoDB este dezvoltat de MongoDB Inc. și este publicat sub o combinație a Licenței Publice Generale GNU Affero și a Licenței Apache.
MongoDB acceptă interogări de câmp, interogări, expresii regulate. Interogările pot returna anumite domenii ale documentelor și includ funcții JavaScript definite de utilizator. Interogările pot fi, de asemenea, configurate pentru a returna un eșantion aleatoriu de rezultate dintr-o anumită dimensiune.
Punctele forte:
Câmpurile dintr-un document MongoDB pot fi indexate cu indicii primari și secundari.
MongoDB oferă disponibilitate ridicată cu seturi de replici. Un set de replici constă din două sau mai multe copii ale datelor. Fiecare membru al setului de replici poate acționa oricând în rolul replicii primare sau secundare. Toate fișierele de scriere și citire se efectuează în mod implicit pe replica primară. Replicile secundare mențin o copie a datelor primare folosind replicarea încorporată. Atunci când o replică primară eșuează, replica setată efectuează automat un proces electoral pentru a determina ce secundar ar trebui să devină primar. Secundarele pot furniza opțional operații de citire, dar aceste date sunt în cele din urmă consecvente în mod implicit.
MongoDB se scindează orizontal folosind procesul de sharding. Utilizatorul alege o cheie shard, care determină modul în care datele vor fi distribuite într-o colecție. Datele sunt împărțite în intervale (bazate pe cheia shard) și distribuite pe mai multe fragmente. În mod alternativ, cheia shard poate fi împrăștiată pentru a realiza o hartă a unui shard – ceea ce permite distribuirea uniformă a datelor.
MongoDB poate rula pe mai multe servere, echilibrând încărcarea sau duplicarea datelor pentru a menține sistemul în funcțiune în caz de defecțiuni hardware.
MongoDB poate fi folosit ca sistem de fișiere cu caracteristici de echilibrare a încărcării și de replicare a datelor pe mai multe mașini pentru stocarea fișierelor.
MapReduce poate fi utilizat pentru procesarea în serie a operațiilor de date și agregare.
Cadrul de agregare permite utilizatorilor să obțină tipul de rezultate pentru care se utilizează clauza SQL GROUP BY. Operatorii de agregare pot fi strânși împreună pentru a forma o conductă analogă pipeline-lor din Unix. Cadrul de agregare include operatorul de căutare $, care se poate înscrie în documente din mai multe documente, precum și operatori statistici, cum ar fi abaterea standard.
TensorFlow (figura 3.4 )este o bibliotecă software open source pentru programarea fluxului de date într-o serie de sarcini. Este o bibliotecă simbolică de matematică și este de asemenea folosită pentru aplicații de învățare în mașină, cum ar fi rețele neuronale. Este folosit atât pentru cercetare, cât și pentru producție la Google, în mod frecvent înlocuind predecesorul său sursă închisă, DistBelief.
TensorFlow a fost dezvoltat de echipa Google Brain pentru utilizarea Google internă. Acesta a fost lansat sub licența open source Apache 2.0 pe 9 noiembrie 2015.
Figura 3.4 – Logoul Tensorflow
În mai 2016, Google a anunțat unitatea de procesare Tensor (TPU), un ASIC construit special pentru învățarea în mașină și adaptat pentru TensorFlow. TPU este un accelerator AI programabil, proiectat să asigure o performanță ridicată a aritmeticii cu o precizie redusă (de ex., De 8 biți) și orientat spre utilizarea sau funcționarea modelelor, mai degrabă decât antrenarea acestora. Google a anunțat că a executat TPU-uri în centrele de date pentru mai mult de un an și le-a găsit să ofere o performanță optimizată mai bine pe watt pentru învățarea mașinilor.
3.2 Naive Bayes
În procesul de machine learning, clasificatorii clasici Bayes sunt o familie de "clasificatori probabilisti" bazați pe aplicarea teoremei lui Bayes cu ipoteze puternice (naive) de independență între caracteristici.
Naive Bayes a fost studiat pe scară largă încă din anii 1950. Acesta a fost introdus sub un alt nume în comunitatea de recuperare a textului la începutul anilor 1960, 488 și rămâne o metodă populară (de referință) pentru clasificarea textului, problema de a judeca documentele ca aparținând unei sau alteia categorii (cum ar fi spam sau legitim, sport sau politică, etc.) cu frecvențe de cuvinte ca și caracteristici. Cu o pre-procesare adecvată, aceasta este competitivă în acest domeniu cu metode mai avansate, inclusiv mașini vectoriale de suport. Se găsește, de asemenea, aplicație în diagnosticul medical automat.
Naive Bayes clasificatorii sunt foarte scalabili, necesitând un număr de parametri lineari în numărul de variabile (caracteristici / prezicători) într-o problemă de învățare. Exercițiul de probabilitate maximă se poate realiza prin evaluarea unei expresii de formă închisă : care are timp liniar, mai degrabă decât prin aproximare iterativă costisitoare, așa cum este folosită pentru multe alte tipuri de clasificatori.
În statistică și literatura de informatică, modelele naive Bayes sunt cunoscute sub o varietate de nume, inclusiv simplele Bayes și independența Bayes . Toate aceste nume fac trimitere la utilizarea teoremei lui Bayes în regula de decizie a clasificatorului, dar Bayes naiv nu este (neapărat) o metodă Bayesiană.
Utilizat frecvent în Machine Learning, Naive Bayes este o colecție de algoritmi de clasificare bazată pe teorema lui Bayes . Nu este un singur algoritm, ci o familie de algoritmi care au toate un principiu comun, că fiecare caracteristică care este clasificată este independentă de valoarea oricărei alte caracteristici. De exemplu, un fruct poate fi considerat ca un măr dacă este roșu, rotund și are un diametru de aproximativ 6 cm. Un clasificator Naive Bayes consideră că fiecare dintre aceste "caracteristici" (roșu, rotund, 6 cm în diametru) contribuie independent la probabilitatea ca fructul să fie un măr, indiferent de corelațiile dintre caracteristici. Caracteristicile, însă, nu sunt întotdeauna independente, adesea văzute ca un neajuns al algoritmului Naive Bayes și de aceea este etichetat "naiv".
Deși este o idee relativ simplă, Naive Bayes poate depăși adesea alți algoritmi mai sofisticați și este extrem de util în aplicații comune cum ar fi detectarea de spam și clasificarea documentelor.
Algoritmul ne permite să prezicem o clasă, dată fiind un set de caracteristici folosind probabilitatea. Astfel, într-un alt exemplu de fructe, am putea prezice dacă un fruct este un măr, o portocală sau o banană (clasă) pe baza culorii, formei etc. (caracteristici).
Clasificatorii bayesieni asigură o precizie de filtrare de 96%-99%, cu o antrenare corectă se poate obține și un rezultat de 100%.
4 Descrierea aplicației
Pentru realizarea sistemului este necesară identificarea obiectelor informaționale care vor fi implicate în buna activitate a softului. În procesul de proiectare sistemul colectare și analiză a datelor se evidențiază câteva categorii de obiecte informaționale:
parser;
rețea neuronală;
bază de cunoștințe;
bază de date;
utilizatorii sistemului;
fișiere și documente.
Parserul reprezintă entitatea aplicației care răspunde pentru generarea datelor de intrare în sistem. Independent de multitudinea modulelor de parsing și natura lor în modul de colectare a datelor, ele trebuie sa lucreze în paralel fără micșorarea vitezei de procesare sau influențarea altor componente a sistemului. Arhitectura internă a parserului este discretă și nu are o deosebită importanță, primează doar modalitatea de comunicare cu modulul de analiză.
Figura 4.1 – Aplicația de management a granturilor
Rețeaua neuronală are ca scop convertirea datelor nestructurate într-un set bine definit și clar. Testarea și antrenarea rețelei neuronale se va face pe un set predefinit de date. La etapa inițială de antrenare a modulului de analiză va lucra în simbioză cu DataManagerul care va verifica rezultatele analizei rețelei și returna un feedback pe baza căruia rețeaua neuronală își îmbogățește baza de cunoștințe și mărește calitatea lucrului efectuat.
4.1 Setarea environment-ului
Înainte de a începe dezvoltarea aplicației, este nevoie de descărcarea și instalarea a o mare varietate de instrumente de dezvoltare. În fiecare scenariu, este nevoie de a urma câțiva pași înainte ca totul să funcționeze exact așa cum trebuie și este aproape sigur că putem întâlni câteva probleme care duc la instalarea cu mult mai mult decât se aștepta. Cu Docker, putem instala aceste componente în containere și scriem toate instrucțiunile pentru a crea o imagine. Apoi, cu o singură comandă, putem să pornim un container care conține întotdeauna aceeași versiune a bazei de cod și a dependențelor.
# instalare docker
wget -qO- https://get.docker.com/ | sh
# configurare docker
sudo ln -sf /usr/bin/docker /usr/local/bin/docker
sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/dockerunix:///var/run/docker.sock"|g' /etc/default/docker
sudo sed -i 's|^#*DOCKER_OPTS.*$|DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4
Figura 4.2 – Instalare și configurare Docker
Centrul Docker este un registru public în care găsim imagini public și open source. În general, există mai multe versiuni ale fiecărei imagini, precum și imagini pentru CPU și GPU. Comanda care va descărca o imagine în mașina noastră este comanda pull docker . Descărca versiunea CPU a imaginii tensorflow specificând eticheta corespunzătoare. Fără orice etichetă, vom obține cea mai recentă imagine, ceea ce înseamnă cea mai recentă configurare disponibilă a procesorului CPU. Pentru a rula versiunile GPU ale acestor containere Docker (disponibilă numai pe Linux), va trebui să folosim nvidia-docker mai degrabă decât docker pentru a lansa containerele (se înlocuiesc toate aparițiile docker-ului cu nvidia-docker în toate comenzile)..
Comanda care creează și pornește un container este comanda docker run. Pentru a crea un nou container, trebuie să specificăm numele de imagine din care să derivăm containerul și o comandă pentru a rula ( bin /bash pentru a accesa shell-ul bash)(Figura 4.3).
Figura 4.3 – Lansarea Imaginei Tensorflow
Comanda de derulare a docker-ului creează mai întâi un strat de rezervă care poate fi scris peste imaginea specificată și apoi o pornește utilizând comanda specificată. În acest sens, containerele pot fi numite instanțe ale unei imagini. Dacă imaginea nu este găsită pe mașina gazdă, va fi descărcată de pe hub-ul Docker înainte de a executa comanda. Avem un nou container de fiecare dată când comanda de executare a docker-ului este executată, permițându-ne să avem mai multe instanțe ale aceleiași imagini. În mod normal, dacă rulam un container fără opțiuni, acesta va porni și se va opri imediat. Prin executarea comenzii ps -a, putem vedea lista tuturor containerelor de pe mașina noastră (ambele containere care rulează și se opresc). Fără argumentul -a, comanda ps docker afișează numai containerele care rulează. Containerele sunt identificate de un id al containerului și de un nume. Pentru a da un nume containerului putem folosi poțiunea -name cu comanda de rulare docker.. Putem alege să pornim un container în modul implicit în prim-plan sau în fundal într-un mod "detașat", utilizând opțiunea -d cu comanda derulați docker.
Comanda docker exec este folosit pentru a rula o comandă într-un container care rulează, comanda de mai sus a fost /bin/bash care ne-ar oferi un shell bash și -ar pune în interiorul containerului. În continuare, vom copia datele de antrenament și de testare împreună cu scriptul meu Python de la mașina mea locală la folderul de lucru din conteinerul meu folosind comanda docker cp.
Pentru utilizarea comodă și eficientă a containerelor Docker creăm un fișier docker-compose.yml (Figura 4.4.) care ne permite să stocăm configurația de funcționare a docker-ului într-un fișier și să gestionăm mai ușor starea aplicației.
version: '1'
services:
mongo3:
image: marsan/mongo3
container_name: ml_mongo3
env:
build: .
command: ipynb #bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
– ~/workspace:/home/workspace
depends_on:
– mongo3
ports:
– "8880-8900:8880-8900"
container_name: ml_env
Figura 4.4 – Fișierul de configurare docker-compose.yml
Jupiter notebook este un instrument favorit al oamenilor de știință de date (Figura 4.4). În Docker, containerele în sine pot avea aplicații care rulează pe porturi. Pentru a accesa aceste aplicații, trebuie să expunem portul intern al containerelor și să legăm portul expus la un port specificat de gazdă. În exemplul de mai jos, voi accesa aplicația Jupyter care rulează în containerul meu. Pornirea unui container cu parametrul -p va muta în mod explicit portul gazdei Docker la numărul de port din localhost pentru a accesa aplicația care rulează pe acel port din container (portul 8888 este implicit pentru aplicația notebook Jupyter).
Figura 4.4 – Lansarea aplicației Jupyter
4.2 Parsarea datelor
Vom folosi Python ca limbaj de scriere, împreună cu o bibliotecă simplă și puternică, BeautifulSoup. Apoi trebuie să luăm biblioteca BeautifulSoup folosind pip , un instrument de gestionare a pachetelor pentru Python (Figura 4.5 ).
easy_install pip:
pip install BeautifulSoup
Figura 4.5 – Instalarea bibliotecii BeautifulSoup
Înainte de a începe procesul trebuie să înțelegem elementele de bază ale codului HTML a sursei ce trebuie parsată (Figura 4.6).
Figura 4.6 – Modelul paginii web a resursei ungm.org
Analizând structura paginii web cu ajutorul instrumentului Google DevTools putem observa cum sunt organizate datele ofertelor de investiții în interiorul paginii. Analiza structurii paginii este foarte importantă pentru setarea și alegerea unei metodologii de extragere a datelor necesare. În cazul structurii resursei ungm.org (Figura 4.7) putem observa că datele se află în interiorul elementului cu identificatorul tblNotices și data-noticeid care arată identificatorul unic al ofertei de investiție. Acest identificator este foarte util atunci când dorim să aflăm daca această ofertă deja este stocată în baza de date sau dacă condițiile acesteia au fost înnoite și este nevoie de înnoit informația curentă.
Figura 4.7 – Structura internă a paginii web resursei ungm.org
Sintaxa de bază a unei pagini HTML este una foarte simplă și consistă din câteva elemente numite tag-uri , Fiecare <tag> servește un bloc în interiorul paginii Web:
<!DOCTYPE html> : documentele HTML trebuie să înceapă cu o declarație de tip;
documentul HTML este cuprins între <html> și </html>;
declarația meta și script a documentului HTML se situează între <head> și </head>;
partea vizibilă a documentului HTML se află între <body> și </body>;
titlurile titlurilor sunt definite cu etichetele <h1> prin <h6>;
paragrafele sunt definite cu tag-ul <p>;
tag-ul <div> specifică o secțiune a documentului html
Alte etichete utile includ <a> pentru hiperlegăturile, <table> pentru tabele, <tr> pentru rândurile de tabelă și <td> pentru coloanele de tabelă.
Figura 4.8 – Structura html a unei oferte de investiții din resursa ungm.org
Analizând structura primei oferte de investiții(Figura 4.8) putem ușor observa cum sunt stocate datele și cum trebuie să definim parser-ul pentru a extragere datele inițiale și anume:
datele necesare se află în elementul tableBody;
fiecare ofertă de investiție are un id – data-noticeid;
primul element este un link spre documentele ofertei;
al doilea element este cu clasa resultTitle păstrează denumire ofertei;
elementul cu proprietatea data-description="Deadline" păstrează deadline-ul de aplicare la ofertă;
elementul de ordine numărul patru păstrează data postării ofertei;
elementul cu clasa resultAgency păstrează numele agenției ofertante;
elementul de ordine numărul șase păstrează tipul de aplicare la ofertă;
elementul cu clasa resultInfo1 păstrează descrierea ofertei, acest câmp ne va servi și pentru analiza ofertei și definirea categorii sale;
elementul de ordine numărul de ordine opt păstrează țara beneficiară de ofertă.
În primul rând, trebuie să importăm toate bibliotecile pe care le vom folosi, declarăm o variabilă pentru adresa URL a paginii specificăm urllib2 pentru a obține pagina HTML a adresei URL declarate și analizăm pagina în format BeautifulSoup astfel încât să putem folosi BeautifulSoup pentru a lucra la ea. (Figura 4.9 ).
import urllib2
from bs4 import BeautifulSoup
pagina = ‘https://www.ungm.org/Public/Notice'
page = urllib2.urlopen(pagina)
soup = BeautifulSoup(page, ‘html.parser’)
nume = soup.find(‘div’, attrs={‘class’: ‘resultTitle’})
Figura 4.9 – Parsarea numelui grantului
În rezultatul parsării resursei obținem un set de date care care va fi transformat în format JSON (Figura 4.10) și va fi transmis clasificatorului.
Figura 4.10 – Structura unei oferte de investiții parsate în obiects JSON
O altă sursă de oferte de investiții este Banca Asiatică de Dezvoltare (Figura 4.11) a fost concepută la începutul anilor 1960 ca o instituție financiară care ar avea un caracter asiatic și ar stimula creșterea economică și cooperarea într-una dintre cele mai sărace regiuni din lume. Istoric ADB asistă membrii săi și partenerii săi prin acordarea de împrumuturi, asistență tehnică, granturi și investiții în capitaluri proprii pentru a promova dezvoltarea socială și economică. ADB este compusă din 67 de membri, dintre care 48 provin din regiunea Asia și Pacific.
Figura 4.11 – Structura internă a paginii web resursei www.adb.org/projects/tenders
Analizând structura paginii web cu ajutorul instrumentului Google putem observa diferența de structură fața de resursa ungm.org (Figura 4.12).
Figura 4.11 – Structura html a unei oferte de investiții din resursa adb.org
Analizând structura se poate spune că avem o structură asemănătoare cu cea precedentă diferă doar denumirile identificatorilor și structura datelor. Bazându-ne pe structura nou trebuie sa definim un nou set de reguli pentru parsarea resurse, formatul de transmite către clasificator rămâne același.
Ca rezultat Baza de date (Figura 4.12) în acest sistem are ca scop stocarea datelor pe parcursul generării datelor de intrare, analiza acestora cât și stocarea rezultatelor finale primite.
{
"id": 72094,
"url": "https://esourcing.unops.org/#/",
"name": "ITB Short Form Construction Contract – Remodeling of National Polio and Measles Laboratory, Dhaka, Bangladesh."
"deadline": "07-Jun-2018 06:00 (GMT 0.00)",
"posted": "21-May-2018",
"agency": "UNOPS",
"type": "Invitation to BID",
"reference": "ITB/2018/4471",
"description": "Tender description: The Project name is Remodeling of National Polio and Measles Laboratory at Dhaka, Bangladesh. The Laboratory is situated in Institute of Public Health, which is one of the most important organisation of the country for more than six decades.",
"country": "Bangladesh"
}
Figura 4.12 – Structura unui document din baza de date
Utilizatorii sistemului sunt persoanele care lucrează nemijlocit cu sistemul gestionează informația de intrare și ieșire fac schimbările necesare în procesul de lucru, analiză și validare a datelor.
Fișiere, documente, pagini web sunt resursele de date nestructurate care reprezintă majoritatea resurselor de informației în internet dar au un preț și o importanță foarte ridicată. Odată transformate într-un format bine stabilit și clar aceste date pot fi agregate și utilizate(Figura 4.13).
Figura 4.13 – Adăugarea unei noi resurse
5 Argumentarea economică
Pentru ca sectorul privat să genereze o creștere economică și să creeze noi locuri de muncă, acesta are nevoie de finanțare accesibilă și de lungă durată. Una din principalele constrângeri semnalizate de reprezentanții mediului de afaceri este accesul la finanțare. Creditul comercial pur, cu dobânzi mari și termene scurte de rambursare afectează rentabilitatea investițiilor și dezvoltarea afacerilor în general.
Sistemul finanțărilor este una din componentele mecanismelor mai ample de colaborare dintre diverse state, el având caracterul unui ajutor acordat pentru sprijinirea rezolvării unor situații excepționale in care statul beneficiar al acestui ajutor nu are expertiza sau resursele umane si materiale necesare pentru a încerca o rezolvare eficientă pe cont propriu.
În scopul dezvoltării sectorului privat, aplicați oferă o informații despre scheme de credit, granturi sau subvenții, astfel încât antreprenorii pot să-și dezvolte afacerile, să-și crească semnificativ calitatea și capacitatea de export a produselor, astfel devenind mai competitivi și creând noi locuri de muncă.
Ratele dobânzii la aceste finanțări preferențiale sunt mai joase, sau, în cadrul granturilor și subvențiilor, nu există. De asemenea, perioada de rambursare a împrumuturilor este de câteva ori mai mare decât la creditele comerciale, multe din ele având și perioade de grație. Astfel, antreprenorii vor avea acces la o sursă de finanțare accesibilă și de termen lung pentru dezvoltarea afacerilor.
Aplicația propusă oferă informație generală despre toate oportunitățile de finanțare a afacerilor: ratele dobânzii, finanțatorii, bănci sau instituții participante, perioada de grație, termenul de scadență, suma totală disponibilă și altele.
La finele creării acestei aplicații să fie vândută unei companii internaționale care are ca scop adunarea si prelucrarea datelor despre ofertele de investiții apărute la fondurile de investiții din întreaga lume pentru a oferi clienților săi o modalitate eficientă de găsire a unui sprijin financiar în afacerea sau în proiecte sociale.
Apariția unei platforme generale de stocare și gestiune a ofertelor de investiții va avea un mare impact în dezvoltarea companiilor și organizațiilor non-guvernamentale care duc lipsa de informația necesară despre resursele care pot fi folosite pentru atingerea scopului.
5.1 Studiul pieței
Analizând piața creditelor s-a constat că tema este una actuală și cu necesitate de dezvoltare. S-a analizat atât piața pe acest segment economic din Republica Moldova. Portalul www.finantare.gov.md oferă informație generală despre toate oportunitățile de finanțare a afacerilor doar din Republica Moldova, apicația propusă spre realizare va oferi acces la granturi din toată lumea și la un număr mare de donatori.
BERD este o instituție financiară internațională care susține proiecte în 29 de țări din Europa Centrală până în Asia Centrală, fiind cel mai important investitor individual în această regiune. Principalele forme de finanțare directă care pot fi oferite de BERD sunt creditele, investițiile în acțiuni și grante. Operațiunile BERD în țările din vecinătatea estică se realizează în strânsă cooperare cu Banca Europeană de Investiții (BEI) și Comisia Europeană. Până în prezent, BERD a finanțat doar proiecte de eficiență energetică (EE) și energie regenerabilă (ER) din sectorul privat. Cu toate acestea, noua strategie a BERD pentru Republica Moldova prevede și eligibilitatea proiectelor de EE și ER din sectorul public[9].
Banca Europeană de Investiții (BEI) este instituția de finanțare a Uniunii Europene. Acționarii săi sunt cele 27 de state membre ale Uniunii Europene. În ultimii 4 ani, Banca a investit în Republica Moldova peste 235 de milioane EUR. Operațiunile BEI în țările din vecinătatea estică se realizează în strânsă cooperare cu Banca Europeană pentru Reconstrucție și Dezvoltare (BERD) și Comisia Europeană. Investițiile din Republica Moldova se vor derula prin intermediul Facilității pentru partenerii estici[9].
Fondul Global de Mediu (GEF) reunește 182 de state membre – în parteneriat cu instituții internaționale și cu sectorul privat – cu scopul de a aborda problemele globale ale mediului. GEF este astăzi cel mai mare finanțator al proiectelor care vizează ameliorarea mediului la nivel global. Parteneriatul GEF constă în 10 agenții, inclusiv BERD, PNUD, UNEP, ONUDI, ADB și Banca Mondială[9].
5.2 Planul calendaristic
Pentru a planifica mai eficient munca este creat planul calendaristic care poate fi vizualizat în tabelul 1.1. Aici este descris ciclul de viață a întregii aplicații de la stabilirea temei până la testarea și ajustarea aplicației. Ceea ce va permite pe etape stabilirea frontului de lucru și respectarea graficului de lucru la anumite etape de realizare. În tabel sunt prezente dățile de începere și finisare a anumitor etape din proiect și durata acestora.
Tabelul 5.1 – Timpul necesar pentru elaborarea sarcinilor
5.3 Analiza SWOT
Pentru ca să poată fi văzut într-un mod clar toate laturile aplicației se utilizează metoda SWOT care este reprezentată în tabelul 1.2, ceea ce permite vizualizarea punctelor forte, a celor slabe, dar și factorii din mediul extern, aceștia din urmă sunt descriși în rubricile Oportunități și Riscuri, aici sunt prezentați toți factorii care pot influența asupra realizării aplicației cât și vinderea acesteia.
Lipsa experienței poate fi un punct vulnerabil ‚ însă prin intermediul consultațiilor cu persoane ce au experiență mai vastă în domeniul dat și primirea îndrumărilor, indicarea sau rezolvarea problemelor apărute în procesul de creare a aplicației se poate ușor de depășit acest risc, fără a provoca careva daune aplicației prin unele manipulări greșite.
Informarea despre aplicație, cu toate că aplicația este una destinată unor anumiți clienți are nevoie de răspândirea informației despre existența acestei aplicații, ca în cazul când cineva va dori utilizarea de asemenea aplicații să fie informat de existența acesteia și ca urmare procurarea ei. Remedierea acestei piedici se rezolvă cu ajutorul plasării de publicitate pe rețelele de socializare și alte web portale ce au o tematică apropiată de cea pe care se bazează aplicația care este creată.
Tabelul 1.2 – Analiza SWOT asupra sistemului
5.4 Calculul indicatorilor economici
Pentru a crea și a face mentenanță în viitor asupra aplicației sunt necesare careva cheltuieli, în acest subcapitol se v-or face calcule pentru a determina cheltuielile de creare a aplicației.
Mai jos în tabelul 5.3 se va prezenta activele materiale utilizate în scopul creării aplicației și suma care a fost necesară pentru procurarea lor.
Tabelul 5.3 – Activele materiale pe termen lung
În tabelul 5.4 sunt afișate activele nemateriale care au fost folosite pentru crearea aplicației
Tabelul 5.4 – Enumerarea activelor nemateriale
În tabelul 5.5 sunt reprezentate consumurile materiale directe, la fel sunt precizate și costul acestor materiale consumabile pe tot parcursul creării aplicației și a raportului. Au fost prezentate materialele care au fost necesare, cantitatea acestora, valoarea per unitate dar și valoarea de intrare.
Tabelul 5.5 – Consumul direct de materiale
În tabelul 5.6 sânt indicate consumurile directe privind retribuirea muncii, în coloana 7 total va reprezenta fondul de retribuire a muncii în baza căruia sunt calculate contribuția de asigurări sociale de stat obligatorii și prima de asigurare obligatorie de asistență medicală.
Tabelul 1.6 Consumuri directe privind retribuirea muncii
În urma calculelor făcute privind retribuirea muncii în tabelul 1.6 se atestă un fond salarizare de 126000 lei. Următoarea etapă se calculează fondul social în baza fondului de retribuire a muncii dar și contribuțiile de asigurări sociale de stat care sunt obligatorii care constituie 23% (Cfs), asigurarea medicală (Cam) și fondul de pensionare care se calculează în baza fondului de retribuire și cota fondului de pensionare (Cfp).
Fondul Social
FAS(programator) = FRM x Cfs(%) = 50400 x 23% = 11592 lei
FAS(qa engineer) = FRM x Cfs(%) = 16800 x 23% = 3864 lei
FAS(manager) = FRM x Cfs(%) = 58800 x 23% = 13524 lei
FAS(total) = FRM(total) x Cfs(%) = 126000 x 23% = 28980 lei
Asigurarea medicală obligatorie
FAM(programator) = FRM x Cam(%) = 50400 x 4.5% = 2268 lei
FAM(qa engineer) = FRM x Cam(%) = 16800 x 4.5% = 756 lei
FAM(manager) = FRM x Cam(%) = 58800 x 4.5% = 2646 lei
FAM(total) = 2268 (lei) + 756 (lei) + 2646 (lei) = 5670 lei
Fondul de pansionare
FP(programator) = FRM x 6% = 50400 x 6% = 3024 lei
FP(qa engineer) = FRM x 6% = 16800 x 6% = 1008 lei
FP(manager) = FRM x 6% = 58800 x 6% = 3528 lei
Pentru a face calculul asupra impozitului este necesar de a ne conduce după legislația în vigoare a anului curent. Calculele se vor executa conform datelor de mai jos:
aplicarea impozitului pe venit de 7% pentru venitul anual impozabil până la – 33 000 lei;
aplicarea impozitului pe venit de 18% pentru venitul anual impozabil care depășește – 33.000 lei;
impozite asupra fondului de pensii – 6% din venit;
fondul de asigurare medicală – 4.5% din venit;
scutirea personală pentru fiecare contribuabil în valoare de 11280 lei;
scutire personală pentru fiecare persoană întreținută în valoare de 2520 lei.
În urma îndeplinirii unui calcul asupra salariului brut al unui programator, conform legislației în vigoare care presupune 22 zile lucrătoare în decurs de o lună pe o perioadă de un an, acesta este estimat la 151200 lei.
La calcularea venitului impozitabil este necesar de operat cu următorii termeni:
VI – venitul impozabil;
VB – venitul brut;
FP – fondul de pensionare (asigurări sociale);
FAM – fondul de asigurare medicală;
SP – scutirea personală;
SiP – scutirea pentru persoana întreținută;
SM – scutirea personală majoră.
Venitul impozitabil se va calcula după formula:
VI=VB-FP-FAM-SP-SiP-SM (5.1)
Fondul de pensii = VB x 6% = 9072 lei
Fondul de asigurare medicala obligatorie = VB x 4.5% = 6804 lei
Conform formulei (5.1):
Venitul Impozabil = VB – FP – FAM – SP = 151200 – 9072 – 6804 – 11280 = 124044 lei
Impozitul pe venit = VI – I = 33.000 x 18% + (124044 – 33.000) x 18% = 5940 + 16388 = 22328 lei
Venitul net : VB – IV – FP – FAM = 151200 – 22328 – 9072 – 6804 = 112996 lei.
În tabelul 5.7 sunt prezentate alte cheltuieli care pe tot parcursul de efectuare a aplicației și raport.
Tabelul 5.7 – Consumuri indirecte
Calcularea uzurii mijloacelor fixe și amortizarea activelor nemateriale pe termen lung. Uzura este o parte importantă a cheltuielilor. Norma uzurii se calculează în funcție de durata utilizării activului.
Formula de calcul a uzurii este :
FA = MFi : DFU x T1 (5.2)
Unde:
FA – fondul amortizării, lei;
MFi – valoarea de intrare;
T1 – durata proiectului;
DFU – durata de funcționare utilă.
La calculul uzurii mijloacelor fixe au fost utilizate mijloacele materiale :
Ulaptop Acer = 17000 : 60 x 6 = 1700 lei;
Pentru calcularea fondului de amortizare utilizam formula (5.2)
FA(mouse) = 400 : 24 x 6 = 100 lei;
FA(imprimanta) = 100 : 24 x 6 = 250 lei;
FA(covoraș) = 50 : 24 x 6 = 12 lei;
FA(masă) = 2250 : 36 x 6 = 375 lei;
FA(scaun) = 2000 : 36 x 6 = 333 lei;
FA(Tabla) = 2500 : 36 x 6 = 416 lei.
Pentru a vedea în întregime fondul de amortizare este necesar de sumat toate activele materiale.
FA(TOTAL) = 100(lei) + 250(lei) + 12.5(lei) + 375(lei) + 333(lei) + 416(lei) = 1486 lei.
Pentru a putea observa toate costurile necesare în producerea unei aplicații este necesar de calculat costul de producție, ceea ce ne va permite să vedem suma în întregime și ponderea fiecărui tip de cheltuieli.
Tabelul 5.8 – Costurile de producție
Calculul rentabilității prin metoda ”bottom-up”
După aflarea a costului de producție a unei copii de aplicație se poate de calculat prețul de realizare pe piață a aplicației.
Preț brut = Preț de cost + Profit = 167665+ 100000 = 267655 lei;
Rentabilitatea = (PN /CT) x 100% = 100000 / 167665 = 59,64 %
Prz = Preț brut + TVA = 267655+ 53531 = 321186 lei.
Concluzii
În urma efectuării lucrării de licență a fost analizat sistemul propus spre realizare și anume Aplicația de extragere și analiză a ofertelor de investiții. În cadrul acestei lucrări au fost menționate mai multe aspecte a acestei aplicații. Un aspect important care a fost analizat este importanței temei, sfera de utilizare și necesitatea produsului final.
Au fost analizate minuțios sistemele existente și au fost definite caracteristicile fiecărui. În urma acestei analize a fost făcută o comparare între sistemele care deja sunt pe piață și aplicația care trebuie realizată. Această analiză a oferit informația necesară despre punctele slabe a sistemelor existente și modalități de îmbunătățire a sistemului curent.
A fost scris contextul general al sistemului pentru formare a unui plan de lucru sau a unor pași care necesită de respectat în timpul construirii acestei aplicații. Au fost stipulate abrevierile, termenii cu care se va opera la construirea aplicației pentru a permite înțelegerea corectă a tuturor nuanțelor și a scopului general propus de către această aplicație.
Un avantaj cheie al aplicației este faptul că permite o analiză mult mai eficientă a cunoștințelor existente. Abilitatea de a extrage informații reduce în mod automat timpul petrecut pentru a colectarea datelor necesare. Având în vedere volumul mare de publicații disponibile, nu este nevoie de mulți cercetători umani pentru prelucrarea a unui volum mare de date și transformarea lor într-un set coerent și corect care poate fi utilizat.
În rezultat această aplicație oferă multe premise a dezvoltării economice a țărilor, oferind sursele publice de investiții nelimitate de diferite interese naționale. Investițiile străine realizate prin granturi sau tendere au demonstrat că reprezintă o sursă eficientă pe care se poate baza creșterea nivelului traiului, inclusiv în perioadele în care stabilitatea economică este în pericol.
Bibliografie
Mihai Istrate, Noi tehnici utilizate în analiza automată a textului [Resursă electronică].- Regim de acces: http://www.utgjiu.ro/revista/ec/pdf/2010-04.I/22_MIHAI_ISTRATE.pdf
Structured and Unstructured Data [Resursă electronică].- Regim de acces: https://sherpasoftware.com/blog/structured-and-unstructured-data-what-is-it/
Mihai iIvanovici, Parsarea documentelor HTML [Resursă electronică].- Regim de acces: http://www.miv.ro/ro/documentatie/ipr/NPlaborator5.pdf
Valeriu Prohnițchi, Ana Popa, Andrian Lupușor Impactul investițiilor străine asupra economiei Republicii Moldova [Resursă electronică].- Regim de acces: http://www.undp.md/presscentre/2010/Statistics_27JUly/iis_www.pdf
WineMoldova [Resursă electronică].- Regim de acces: http://winemoldova.md
Site-ul Națiunile Unite în Moldova [Resursă electronică].- Regim de acces: http://md.one.un.org
DEV.ro [Resursă electronică].- Regim de acces: http://dev.ro/docker
Modelare modelor matematice [Resursă electronică].- Regim de acces: https://profs.info.uaic.ro/~fliacob/An2/2011-2012/Resurse/Modele%20continue/Modelare_modele%20matematice.pdf
Lista instituțiilor financiare din Republica Moldova [Resursă electronică].- Regim de acces http://www.soglasheniemerov.eu/IMG/pdf/Donor_fiche_Moldova.pdf
International development aid [Resursă electronică].- Regim de acces: https://ec.europa.eu/info/business-economy-euro/economic-and-fiscal-policy-coordination/international-economic-relations/international-development-aid_en
Development Aid Is Working [Resursă electronică].- Regim de acces: https://www.huffingtonpost.com/mark-suzman/development-aid-is-workin_b_599974.html
Prevederilor strategiei de atragere a investițiilor și promovare a exporturilor pentru anii 2006-2015 [Resursă electronică].- Regim de acces: http://lex.justice.md/index.php?action=view&view=doc&id=318477
Automated Text Classification Using Machine Learning [Resursă electronică].- Regim de acces: https://www.datasciencecentral.com/profiles/blogs/automated-text-classification-using-machine-learning
13 Deep Learning Frameworks for Natural Language Processing in Python [Resursă electronică].- Regim de acces: https://medium.com/@datamonsters/13-deep-learning-frameworks-for-natural-language-processing-in-python-2b84a6b6cd98
Machine Learning, NLP: Text Classification using scikit-learn, python and NLTK [Resursă electronică].- Regim de acces: https://towardsdatascience.com/machine-learning-nlp-text-classification-using-scikit-learn-python-and-nltk-c52b92a7c73a
Text classification and Naive Bayes [Resursă electronică].- Regim de acces: https://nlp.stanford.edu/IR-book/html/htmledition/text-classification-and-naive-bayes-1.html
Indicații metodice privind compartimentul economic(proiect de diplomă). Chișinău 2016,Editura ”Tehnica-UTM”, Autori: Aliona Dodu, Marcel Gîrbu.
Modificări taxe și scutiri salarii 2018 [Resursă electronică].- Regim de acces: http://salarii.md/modificari-taxe-si-scutiri-salarii-2018
Codul fiscal [Resursă electronică].- Regim de acces: http://www.lex.md/fisc/codfiscaltxtro.htm#Articolul%2015
Ghid Granturi [Resursă electronică].- Regim de acces: http://www.finantare.ro/ghid-granturi.
Anexa A
Codul sursă a scriptului de prepare a environment-ului
#!/bin/bash
# configurarea pachetelor
sudo apt-get update
sudo apt-get install
# instalare docker
wget -qO- https://get.docker.com/ | sh
# configurare docker
sudo ln -sf /usr/bin/docker /usr/local/bin/docker
sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/dockerunix:///var/run/docker.sock"|g' /etc/default/docker
sudo sed -i 's|^#*DOCKER_OPTS.*$|DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /home/$(whoami)/workspace/dockers/images"|g' /etc/default/docker
# crearea grupului docker, adăugarea unui utilizator nou
sudo groupadd docker
sudo usermod -aG docker $(whoami)
# instalare docker-compose
sudo apt-get -y install python-pip
sudo pip install docker-compose
#updatarea pachetelor
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y opencl-headers build-essential protobuf-compiler \
libprotoc-dev libboost-all-dev libleveldb-dev hdf5-tools libhdf5-serial-dev \
libopencv-core-dev libopencv-highgui-dev libsnappy-dev libsnappy1 \
libatlas-base-dev cmake libstdc++6-4.8-dbg libgoogle-glog0 libgoogle-glog-dev \
libgflags-dev liblmdb-dev git python-pip gfortran
sudo apt-get clean
Anexa B
Codul sursă a clasificatorului
import csv
import random
import math
def incarcaCsv(fisier):
linii = csv.reader(open(fisier, "rb"))
dataset = list(linii)
for i in range(len(dataset)):
dataset[i] = [float(x) for x in dataset[i]]
return dataset
def divizeazaSetulDeDate(dataset, splitRatio):
marimeaSetului = int(len(dataset) * splitRatio)
setAntrenare = []
copy = list(dataset)
while len(setAntrenare) < marimeaSetului:
index = random.randrange(len(copy))
setAntrenare.append(copy.pop(index))
return [setAntrenare, copy]
def separaDupaClasa(dataset):
separat = {}
for i in range(len(dataset)):
vector = dataset[i]
if (vector[-1] not in separat):
separat[vector[-1]] = []
separat[vector[-1]].append(vector)
return separat
def medie(numbers):
return sum(numbers)/float(len(numbers))
def stdev(numbers):
avg = medie(numbers)
variatia = sum([pow(x-avg,2) for x in numbers])/float(len(numbers)-1)
return math.sqrt(variatia)
def rezultat(dataset):
rezultat = [(medie(attribute), stdev(attribute)) for attribute in zip(*dataset)]
del rezultat[-1]
return rezultat
def rezultaDupaClasa(dataset):
separated = separaDupaClasa(dataset)
rezultat = {}
for classValue, instances in separated.iteritems():
rezultat[classValue] = rezultat(instances)
return rezultat
def probabilitatea(x, medie, stdev):
exponent = math.exp(-(math.pow(x-medie,2)/(2*math.pow(stdev,2))))
return (1 / (math.sqrt(2*math.pi) * stdev)) * exponent
def probabilitateaClasa(rezultat, inputVector):
probabilitati = {}
for classValue, rezultat in rezultat.iteritems():
probabilitati[classValue] = 1
for i in range(len(rezultat)):
medie, stdev = rezultat[i]
x = inputVector[i]
probabilitati[classValue] *= probabilitatea(x, medie, stdev)
return probabilitati
def prezicere(rezultat, inputVector):
probabilitati = probabilitateaClasa(rezultat, inputVector)
bestLabel, bestProb = None, -1
for classValue, probability in probabilitati.iteritems():
if bestLabel is None or probability > bestProb:
bestProb = probability
bestLabel = classValue
return bestLabel
def totalPreziceri(rezultat, setTestare):
prezicere = []
for i in range(len(setTestare)):
result = predict(rezultat, setTestare[i])
prezicere.append(result)
return prezicere
def totalPrecizie(setTestare, prezicere):
correct = 0
for i in range(len(setTestare)):
if setTestare[i][-1] == prezicere[i]:
correct += 1
return (correct/float(len(setTestare))) * 100.0
def main():
fisier = 'grants.data.csv'
splitRatio = 0.67
dataset = incarcaCsv(fisier)
setAntrenare, setTestare = divizeazaSetulDeDate(dataset, splitRatio)
rezultat = rezultaDupaClasa(setAntrenare)
prezicere = totalPreziceri(rezultat, setTestare)
precizie = totalPrecizie(setTestare, prezicere)
print(Precizie: {0}%').format(precizie)
main()
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Automatizarea analizei și clasificării ofertelor de investiții [303922] (ID: 303922)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
