POLITECHNICA UNIVERSITY OF BUCHAREST FACULTY OF AUTOMATIC CONTROL AND COMPUTERS COMPUTER SCIENCE DEPARTMENT DIPLOMA PROJECT The virtual library 2018… [629727]

UNIVERSITATEA POLITEHNICA BUCURE
Ș
TI

FACULTATEA DE AUTOMATIC
Ă

Ș
I CALCULATOARE

DEPARTAMENTUL CALCULATOARE

PROIECT DE DIPLOM
Ă

Biblioteca virtuala

versiunea 2018

Paiu Ovidiu George

Coordonator
ș
tiin
ț
ific:

Prof. dr. ing. Nirvana Popescu

BUCURE
Ș
TI

2018

POLITECHNICA UNIVERSITY OF BUCHAREST

FACULTY OF AUTOMATIC CONTROL AND COMPUTERS

COMPUTER SCIENCE DEPARTMENT

DIPLOMA PROJECT

The virtual library

2018 version

Paiu Ovidiu George

Thesis advisor:

Prof. dr. e ng. Nirvana Popescu

BUCHAREST

2018

CUPRINS

CUPRINS
3

Multumiri
4

Sinopsis
5

1
Introducere
6

1.1
Context
6

1.2
Problema
7

1.3
Obiective
7

1.4
Solu
ț
ia propus
ă
8

1.5
Rezultatele ob
ț
inute
8

1.6
Structura lucr
ă
rii
8

1.6.1
Analiza cerintelor / Motivatie
8

1.6.2
Studiul de piata / Metode existente
9

1.6.3
Solutia propusa
9

1.6.4
Detalii de implementare
9

1.6.5
Concluzii
9

1.6.6
Bibliografie
9

2
Analiza cerin
ț
elor / M otiva
ț
ie
10

3
Studiu de pia
ț
ă
/ Me tode existente
10

3.1
Metode existente
10

3.2
Studiul de piata
13

4
Tehnologi folosite
14

5
Detalii de implementare
19

5.1
Arhitectura si algoritmii utilizati
19

5.2
Scenarii de utilizare
31

6
Evaluare
36

7
Concluzii
38

8
Bibliografie
39

9
Anexe
40

M
ULTUMIRI

As
dori
sa
multumesc
doamnei
profesor
coordontor
Nirvana
Popescu
pentru

indeluga
rabdare,
buna
coordonare
acordata
pe
tot
parcursul
proiectului
si
pentru

valoroasele idei care au ajutat la redactarea lucrarii.

S
INOPSIS

Optical
character
recognition
(OCR)
este
un
subiect
de
mare
interes
pentru
gigantii

industriei
software
(Google,
Facebook,
Apple,
Amazon)
si
un
domeniu
de
cercetare
in

continua dezvoltare datorita numeroaselor avantaje aduse de acesta.

Indentificarea
si
clasificarea
entitatilor
de
tip
nume
este
o
ustensila
in
prelucrarea

textului
aplicandu-se
in
mai
multe
domenii:
rezumarea
textelor,
extragerea
de
informatii
de

mare
interes,
motoare
de
cautare,
clasificare
si
indentificarea
subiectelor,
recunoasterea
de

text din imagini.

Recunoasterea
entitatilor
de
tip
nume
(Named

entity
recognition,
abreviat
NER)

este
un
subdomeniu
al
extragerii
de
informatie,
iar
sistemele
de
NER
de
ultima
ora
au

performante
aproapiate
de
cele
ale
omului.
Sistemul
MUC-7
a
inregistrat
un
scor
de
93,39
%

in
timp
ce
oameni
au
obtinut
un
scor
de
96,95%.

Sistemele
NER
care
au
fost
create
utilizeaza

tehnici bazate pe gramatica lingvistica si modele statistice cum ar fi

machine learning.

In
dezvoltatarea
aplicatiei
‘Biblioteca
virtuala’,
utilitatea
sistemului
NER
consta
in
citirea

textului
si
scoaterea
in
evidenta
a
tuturor
componentelor
unei
carti
:
titlu,
autor
,
cuvinte

cheie care sunt ajutatoare pentru incadrarea cartii intr-un anumit domeniu.

In
urma
testelor
efectuate

modalitatea
de
clasificare
folosita
in
aceasta
solutie
a
obtinut

performante
de
aproape
100%
reusind
sa
gaseasca
in
toate
cazurile
domeniul
din
care
face

parte
cartea
insa
nu
se
poate
spune
acest
lucru
despre
determinarea
autorului
.
Aceasta

sarcina
fiind
una
mai
complicata
aduce
dupa
sine
si
foarte
multe
cazuri
de
trat
insa
in

majoritatea cazurilor programul reuseste sa scoata solutii corecte.

1
I
NTRODUCERE

1.1
Context

Biblioteca
virtuala s-ar
defini
ca
un
concept
asemanator
bibliotecii,
f
ǎ
r
ǎ
limite

spatiale
în
care
gasim
documente
care
corespund
nevoilor
noastre:
informative,
educative,

creative.

In
prezent
sunt
mai
multe
tipuri
biblioteci:
biblioteca
traditionala,
biblioteca
hibird
si

cea
virtuala.
Biblioteca
traditionala
pastreaza
informatia
pe
hartie
si
arhivata
in
carti
,

biblioteca
hibird
a
aparut
o
daca
cu
calculatoarele
si
cu
aparitia
internelui,
o
parte
de

informatie
incepe
sa
se
mute
in
calculator
iar
biblioteca
virtuala
contine
toata
informatia
in

mediul
serverlor
si
a
lumii
vituale
create
cu
ajutorul
internetului.
Aici
toata
informatia

devine mult mai usor de cautat.

Crearea
unei
biblioteci
virtuale
consta
in
realizarea
unei
structuri
arborescente
unde

documentele
in
format
pdf
sunt
reprezentate
ca
frunze.
Fiecare
nivel
reprezinta

subcategoriile
domeniului
anterior
si
in
acest
mod
se
reuseste
impartirea
cartilor
pe
mai

multe domenii.

Solutia
dezvolta
un
sistem
automatizat
integrat
de
biblioteca.
Aceasta
presupune

existenta
unei
baze
de
date
si
gestionarea
ei
de
un
software
adecvat
care
sa
asigure

desfasurarea activitatilor de biblioteca.

Avantajele
biblioteci
virtuale
sunt:
accesul
clientilor
la
un
volum
mare
de
informatie

fara
ca
acesta
sa
se
deplaseze,
un
numar
foarte
mare
de
utilizatori,
accesul
concomitent
la

un fisier de mai multi clienti, solutie relativ simplu de folosit, acces instantaneu la carte .

1.2
Problema

Una
din
cele
mai
mari
probleme
ale
bibliotecilor
virtuale
de
dimensiuni
foarte
mare

este
administrarea
cartilor.
O
administrare
manuala
a
acestor
carti
ar
fi
foarte
ineficienta
din

punct
de
vedere
a
timpului.
Gasirea
datelor
despre
carte
(titlul,
numele
autorului)
,
crearea

unei descrieri si introducerea manuala a acestora in baza de date ar putea dura foarte mult.

O
alta
problema
reprezinta
cautarea
unei
carti.
Lipsa
unei
ierarhi
bine
stabilite

ingreuneaza
accesarea
cartii.
Acest
lucru
nu
este
deloc
placut
mai
ales
acum
in
secolul

vitezei.

1.3
Obiective

Ceea
ce
se
urmareste
este
rezolvarea
acestor
doua
probleme.
O
aplicatie
care
sa

realizeze
automat
adimistrarea
ar
reduce
considerabil
timpul
iar
cautarea
ar
fi
instantanee.

Aceste
2
aspecte
aduc
companiei
o
imagine
destul
de
puternica,
ofera
clientului
incredere
in

companie si un plus la cifra de afaceri.

Administrarea
consta
intr-o
ierarhie
in
care
cartile
sunt
aranjate
pe
domenii
si
in

ordinea
alfabetica.
Aceasta
aranjare
ajuta
foarte
mult
la
cautare
deoarece
cautarea
se
face

dupa
un
singur
criteriu
si
nu
se
iau
in
considerare
celelate
creterii.
In
caz
contrar
cautarea

s-ar realiza linear parcurcandu-se toate cartile.

Sa
presupunem
ca
vrem
sa
cautam
o
carte
despre
stiinta
si
stim
doar
numele

autorului,
atunci
cautarea
se
va
face
doar
in
arhiva
stiinta
cautand
acel
autor,
in
acest
caz

numarul de carti va fi redus considerabil.

Pentru
ca
orice
lucru
nu
este
perfect
si
acesta
are
anumite
dezavantaje,
securitatea

bazei
de
date.
Un
exemplu
de
atac
poate
fi
sql
injection
cea
mai
preferata
arma
a
hackerilor.

Aceasta
metoda
de
atac
presupune
inserarea
de
cod
sql
care
se
executa
si
permite
oricarei

persoane sa modifice baza de date.

1.4
Solu
ț
ia propus
ă

O
scurta
descriere
a
aplicatiei.
Aceasta
solutie
este
formata
dintr-un
script
si
o

aplicatie
desktop.
Scriptul
este
util
pentru
clienti
care
au
deja
o
ierarhie
si
doar
au
nevoie
de

a
li
se
introduce
informatiile
in
baza
de
date.
El
primeste
sistemul
de
fisiere,
parcurge
fiecare

document
de
tip
pdf,
determina
numele
autorului
si
titlul
carti
apoi
le
introduce
in
baza
de

date.
Aplicatia
desktop
permite
clientilor
sa
introduca
carti
noi
in
arhiva
prin
selectarea
unui

document
de
tip
pdf.
Aplicatia
preia
datele
din
continutul
carti
si
scoate
titlul,
numele

autorului
si
determina
din
ce
domeniu
face
parte
cartea
si
le
introduce
in
baza
de
date
cu

acordul
utilizatorului.
Utilizatorul
are
dreptul
de
a
modifca
aceste
date
in
cazul
in
care
nu

este de accord cu ele.

1.5
Rezultatele ob
ț
inute

Solutia
obtinuta
respecta
cerintele
de
functionalitate,
o
aplicatie
usor
de
utilizat
din

punctul
de
vedere
a
viitorilor
clienti
si
cu
o
securitate
bine
pusa
la
punct
impotriva

atacatorilor.

1.6
Structura lucr
ă
rii

1.6.1
Analiza cerintelor / Motivatie

In
acest
capitol
se
va
regasi
motivatia
realizarii
acestui
prioiect,
o
analiza
a
cerintelor

produsului, scenariile de utilizare precum si o lista de functionalitati.

1.6.2
Studiul de piata / Metode existente

In
acest
capitol
se
va
prezenta
metodele
de
ORC
si
tehnicile
de
recunoasterea

entitatilor de tip nume prezente pe piata si un studiu de eficienta a acestor produse.

1.6.3
Solutia propusa

In
acest
capitol
se
va
descrie
framework-ul
de
java
si
ce
s-a
realizat
cu
el,
apoi

framework-ul
de
.NET
si
toate
acestea
in
legatura
cu
baza
de
date.
Se
va
prezenta
o
schita
a

bazei de date si motivele pentru care am ales sa utilizez baza de date.

1.6.4
Detalii de implementare

In
acest
capitol
se
va
prezenta
in
detaliu
backend-ul
aplicatiei
si
algoritmii
folositi

pentru a ajunge la rezultatul final impreuna cu metodele de securitate adaugate aplicatiei.

1.6.5
Concluzii

In
acest
capitol
se
va
realiza
un
rezumat
al
intregului
proiect,
de
la
problema

identificata pana la implementare si probleme de securitate .

1.6.6
Bibliografie

In acest capitol este prezentata bibliografia utilizata in realizarea proiectului de licenta.

2
A
NALIZA

CERIN
Ț
ELOR
/ M
OTIVA
Ț
IE

Biblioteca
este
un
subiect
foarte
interesant
si
de
o
importanta
foarte
mare
deoarece
ea

reprezinta
miezul
cunoasterii
fara
de
care
evolutia
nu
ar
avea
loc.
O
comoara
foarte

diversificata in care toate cunostintele sunt pastrate pentru generatiile viitoare.

Aplicatia
‘Biblioteca
virtuala’
contine
un
element
nou
in
curs
de
dezvoltare
si
de
mare

interes,
recunoasterea
entitatilor
de
tip
nume.
Aceasta
ajuta
la
determinarea
autorului
unei

carti, insa nu a fost de ajuns, asa ca a fost necesarea integrarea unui algoritm mai sofisticat.

Una
dintre
cele
mai
importante
cerinte
este
de
a
ajuta
detinatorul
de
biblioteca
sa

administreze
cu
usurinta
propria
comoara.
Solutia
prezinta
un
modul
de
pastrare
a

informatiei
intr-o
ierarhie
bine
stabilita
si
un
modul
de
cautare
avansata
bazata
pe
ierarhie.

Permite cautarea atat dupa autor cat si dupa categorie si titlu.

3
S
TUDIU

DE

PIA
Ț
Ă
/ M
ETODE

EXISTENTE

3.1
Metode existente

In
acest
capitol
se
va
discuta
despre
recunoasterea
entitatilor
de
tip
nume
si
tehnici

pentru
NER.
Aceste
lucruri
presupun
procesarea
limbajului
natural
rezultand
determinarea

entitatilor si clasificarea acestora.

Exemple de api existente pe piata:


OpenNLP include recunoa
ș
terea entit
ă
ț
ii bazate pe reguli
ș
i statistic
ă


Aplica
ț
ia SpaCy prezin t
ă
NER statistic rapid


GATE

accept
ă
NER în mai multe limbi


Stanford University – standford-ner-3.7.0-javadoc


BRAT este un open source tool pentru NERasd


ParallelDots este un API de extractie a entitatii bazate pe invatare in adancime


ChatBotNer


NTLK – Natural Language Processing Toolkit (NTLK website) api scris în Python

Biblioteca
OpenNLP
este

o

machine
learning
bazata
pe
procesarea
de
limbaj
natural

de
text.
OpenNLP
sprijina
cele
mai
comune
sarcini
NLP
cum
ar
fi
impartirea
cuvintelor
,

etichetarea
entitatilor,
extractie
a
entitatilor
de
tip
nume,
impartirea
pe
bucati
(propozitii),

parsare,
detectarea
limbii
si
rezolutia.
Pentru
a
rula
extragerea
entitatilor
de
tip
nume
are

nevoie
de
un
model.
Modelul
este
depedent
de
limba
si
de
tipurile
de
intrari
pentru
care
a

fost
antrenat.
Aceasta
biblioteca
ofera
un
numar
mare
de
modele
de
antrenare
.
Pentru
a

gasit
nume
intr-un
text
este
necesara
segmentarea
in
bucati.
Exemple
de
motive
pentru

care
un
model
poate
sa
esueze:
probleme
cu
citirea,
versiunea
modelului
nu
este

compatibila cu versiunea OpenNLP, continutul modelului poate fi invalid .

Exemplu
de
incarcare
model,
impartire
pe
entitati
si
clasificarem,
exemplificare
cod
figura

1.1.

Fig. 1.1 Exemplu de cod pentru OpenNLP [4]

Cel
mai
simplu
mod
de
etichetare
a
entitatilor
este
rularea
de
la
linia
de
comanda.

Acest instrument este destinat doar testarii:

$ opennlp POSTagger en-pos-maxent.bin

Un
este
de
testare
este
prezentat
in
figura
1.2.
Acest
exemplu
este
marcat
conform

tabelului table[1].

Fig 1.2 Exemplu de rezultat dupa aplicare algoritmului de etichetarem, conform[18]

Un
alt
api
existent
pe
piata
este
Gate

(
General
Arhitecture
for
Text
Engineering
),

reprezinta
o
multime
de
ustensile
scrise
in
java
dezvoltat
de
University
of
Sheffield
si
folosit

in lumea intreaga intr-o gama larga de domenii cum ar fi stiinta, companii sau invatare.

Gate
include
ca
si
celelalte
un
sistem
de
extragere
a
informatiei
numit
ANNIE
(A

Nearly-New
Information
Extraction
System).
ANNIE
reprezinta
un
set
de
module
precum:

impartirea
propozitiilor,
impartirea
pe
bucati
si
o
entitate
de
clasificare.
Limbile
suportate

sunt
chineza,
engleza,
araba,
franceza,
germana,
italiana,
romana
si
rusa.
Un
aspect
diferit

de
celelalte
produse
de
pe
piata
este
faptul
ca
accepta
mai
multe
versiuni
de
intrari
cum
ar
fi

txt, html, xml, doc, pdf.

Un
exemplu
de
API
de
traducere
folosit
in
java
este
JAPE
(Java
Annotation
Patterns

Engine)
si
acesta
folseste
GATE
pentru
a
manipula
textul.

BRAT,
un
alt
produs
pentru

recunoasterea
entitatilor
de
tip
nume,
se
prezinta
ca
o
ustensila
care
ruleaza
pe
web.
Este

un
concept
special
pentru
adnotare
unde
notele
nu
sunt
text
liber,
dar
au
un
formular
fix

care poate fi procesat si interpretat automat de un calculator.

Fig. 2.1 Executare algoritm, conform [1]

Acest
exemplu
prezinta
doua
categorii
de
baza
pentru
adnotare:
text
span
care

marcheaza
numele
oraganizatiilor,
persoanelor
si
relatiile.
Categoria
de
spatiere
simpla
a

textului
este
potrivita
pentru
crearea
de
adnotari
pentru
recunoasterea
entitatilor
de
tip

nume iar relatiile binare pentru sarcinile simple de extragere a informatiilor relationale.

Brat
sprijina
adnotarea
unor
N
asocieri
pentru
a
lega
oricate
adnotari
care
participa

in
proces.
Aceasta
categorie
poate
fi
utilizate
pentru
adnotarea
evenimentelor
cum
ar
fi

‘TRANSFER’ din urmatorul exemplu, fig. 2.2 .

Fig. 2.2 Executare algoritm, conform [1]

Limbile
suportate
sunt
13
la
numar
iar
4
din
ele
sunt
disponibile
gratuit
(daneza,

olandeza, portugheza si suedeza).

3.2
Studiul de piata

Toate
aplicatiile
noi
urmaresc
crearea
cator
mai
multe
beneficii
clientilor
sai,

aplicatiile
existente
la
majoritatea
bibliotecilor
sunt
aplicatii
simple
si
contin
elemente
si

functionalitati
de
baza:
ierarhie
virtuala
cu
structura
simpla,
acces
la
arhiva
securizata,

realizarea
de
import-uri
si
cautari.
Aceasta
aplicatie,
‘Biblioteca
virtuala’
pe
langa
beneficiile

standart
are
si
alte
proprietati
care
face
ca
aplicatia
sa
fie
superioara
celorlalte.
In
primul

rand
se
aplica
tehnicile
de
OCR-izare,
pe
baza
unei
retele
este
construit
un
algoritm
care

incadreaza
in
categoria
potrivita
documentului
selectat,
determina
automat
numele

autorului
si
titlului
carti,
ceea
ce
ofera
mai
multe
creterii
de
cautare.
OCR-izarea
reduce

consumul
de
timp
alocat
pentru
identificare,
deci
optimineaza
metoda
de
cautare,
aplicatia

ofera
acces
multiplu
la
baza
de
date
si
nu
numai
administratorilor
ce
si
clientilor
bibliotecii

virtuale.

4
T
EHNOLOGI

FOLOSITE

Un
API
existent
pe
piata
folosit
este
dezvoltat
de
un
grup
de
stundeti
si
profesori
de

la
Universitatea
Stanford,
Stanford
CoreNLP.
Acesta
furnizeaza
un
set
de
ustensile
care

permite
gasirea
formelor
de
baza
a
cuvintelor,
partile
de
vorbire
indiferent
daca
sunt
nume

de
comapanii
sau
oameni,
marcheaza
structura
propozitiilor,
marcheaza
depedentele

sintactice
si
depisteaza
valorile
numerice.
CoreNLP
este
proiectat
pentru
a
fi
extrem
de

flexibil si extensibil.

Stanford
CoreNLP
integreaza
mai
multe
instrumente
cum
ar
fi
recunoasterea

entitatilor
de
tip
nume
(NER),
un
soft
de
parsare
si
un
soft
pentru
clasificarea
entitatilor
(T

he

part-of-speech (PO-S) tagger

).

Fig. 2.3 Recunoasterea entitatilor de tip nume, conform [1]

Stanford
CoreNLP
este
scris
in
Java
iar
cerinta
minimala
este
instalarea
Java
1.8
,

totusi se poate interactiona cu acesta prin intermediul linei de comanda, figura x

Fig. 2.4 Exemplu rulare cod, conform [16]

Exemplu de cod pentru executare:

import

edu.stanford.nlp.tagger.maxent.MaxentTagger;

static

String taggerText = "../util/english_language_pos.tagger";

static

String EbidirectionalTagger = "../util/english-bidirectional-distsim.tagger";

static

MaxentTagger tagger =

new

MaxentTagger(EbidirectionalTagger);

String

tagged = tagger.tagString(line[i]);

Acest
Api
este
utilizat
in
aplicatie
pentru
a
eticheta
toate
cuvintele
existente
,
o

prelucare initiala a informatiei de intrare in algoritmul de determinare a autorului si titlului .

Java
este
un
limbaj
de
programare
orientat
pe
obiecte
(OOP,
Object
Oriented

Programming)
care
permite
crearea
de
aplicatii
desktop,
web
si
mobile.
Datorita

numeroaselor domenii in care activeaza acest limbaj este foarte popular.

OOP

ul
se
bazeaza
pe
conceptul
de
incapsularea,
adica
datele
si
codul
care
se

executa
folosind
acele
date
se
unesc
formand
o
singura
capsula
sau
obiect.
Un
obiect
este
o

exemplificare
a
unei
clase
sau
clasa
este
o
abstractizare
a
unui
obiect.
Pentru
a
intelege
mai

bine
se
va
da
un
exemplu:
Clasa
masina
defineste
toate
masinile
existente,
descrie

atributele
masini
(ex
:
culoare,
tip
motor,
putere,
numar
de
locuri
)
si
actiunile
pe
care
le

poate
executa
(ex
:
sa
accelereze,
sa
franeze,
sa
porneasca
).
Obiectele
sunt
reprezentari
ale

obiectelor din viata reala.

Pentru
a
putea
dezvolta
o
aplicatie
folosind
Java
este
necesara
instalarea
a
unui
Java

Runtime
Environment
(JRE)
si
un
Integrated
development
Environment
(IDE).
Dupa
crearea

si
compilarea
unui
cod
va
rezulta
un
cod
masina
care
va
rula
pe
Java
Virtual
Machine
(JVM).

Acest
cod
nu
se
poate
executa
pe
alte
masini
virtuale
deoarece
atunci
cand
se
compileaza,

se creeaza instructiuni care sunt compatibile doar cu JVM.

Pentru
a
usura
munca
dezvoltatorilor
au
aparut
fisiere
cu
cod
numite
librari.
Ele
au

fost
concepute
pentru
a
elimina
codul
redundant.
Atunci
cand
se
dezvolta
o
aplicatie

anumite
segmente
de
cod
se
repeta
cum
ar
fi
conectarea
la
baza
de
date,
aceasta
bucata
de

cod
se
scrie
intr-un
singur
fisier
si
se
apeleaza
cu
parametrii
necesarari
atunci
cand
este

cazul.

Prezentarea unui top cu cele mai folosite 6 librari .

1
Java
Standard
libraries
este
deobicei
implicita
si
este
foarte
importanta
deoarece
contine

toate
lucrurile
de
baza
pentru
care
un
program
nu
se
poate
lipsi.
Contine
variabilele
de
baza

cum
ar
fi
string,
double,
enum
si
array.
Java.math
inclusa
in
libria
standard
permite

scoaterea
radicalului
sau
ridicarea
la
putere,
alta
librarie
inclusa
java.net
este
folosita
pentru

lucrul cu socket si crearea de conexiuni la internet.

2
JHipster
este
o
platform
de
dezvoltare
pentru
a
genera
si
dezvolta
aplicatii
care
au
in

spate Srping Boot si microservicii.

3
Maven un framework pentru dezvoltarea aplicatiilor web.

4
Apache Commons contine o lista de api-uri de exemplu cli , Matsh si I/O.

5
Hibernate-orm
este
o
harta
ce
prezinta
relatiile
dintre
obiecte.
Este
utilizata
pentru

lucrul cu baza de date. In implementare sa folosit JDBC ( Java Database Connectivity)

6
JUnit
este
un
framework
gratis
pentru
scrierea
de
teste,
ofera
functionalitati
pentru

executarea testelor repetate asupra codului.

Exemplu scriere de cod de test, fig. 3.1 :

Fig . 3.1 Exemplul de clasa pentru testare, conform [ 3]

Compilare

javac Calculator.java

apoi scrierea de clasei de test, fig. 3.2 .

Fig. 3.2 Exemplu de clasa de test, conform [3]

Executarea se realizeaza in urmatoarele moduri, figura :

Fig. 3.3 Exemplu de executare de teste, conform [16]

Acest
limbaj
este
folosit
pentru
dezvoltarea
aplicatiei
in
java,
care
se
conecteaza
la

baza
de
date
si
introduce
datele
preluate
de
la
carti.
Se
foloseste
JDBC
( Java
Database

Connectivity)
librarie
dedicata
pentru
Java
pentru
a
se
putea
conecta
la
baza
de
date

precizand baza de date, un ip, un port, un user si o parola.

O
alt
tehnologie
folosita
in
proiet
este
SqlServer
(Strunctured
Query
Language).
Un

server
produs
de
Microsoft
ce
permite
pastrarea,
inlocuirea
si
interogarea
datelor.
In

aceasta
plicatie,
baza
de
date
contine
trei
tabele.
Una
din
ele
se
numeste
‘consistency’
si

este
formata
din
elemente
de
tip
sir
de
caractere,
a
doua
tabela
se
numeste
‘items’
si
este

formata
din
elemente
de
tip
sir
de
caractere
si
numere
avand
o
singura
cheie
primara,

folosita pentru inregistrarea cartilor iar ultima tabela este pentru pastrarea utilizatorilor.

Fig. 4 Diagrama bazei de date

5
D
ETALII

DE

IMPLEMENT ARE

5.1
Arhitectura si algoritmii utilizati

Aplicatia
‘Biblioteca
virtuala’
este
impartita
in
doua
sectiuni
si
se
bazeaza
pe
o
masina

virtuala
(Java
Virtual
Machine),
o
arhitectura
.NET
si
un
server
pentru
baze
de
date
Sql

Server.
Pe
masina
virtuala
se
compileaza
si
executa
codul
scris
in
limbajul
java
iar
pe

arhitectura .NET se executa si se compileaza codul scris in limbajul C#.

Codul
scris
in
limbajul
java
porneste
de
la
implementarea
si
crearea
clasei
MainClass.

Acesta
clasa
are
o
variabila
folder
de
tip
file
care
primeste
ca
parametrul
de
intrare
calea

catre ierarhia de fisiere, figura cu diagrama de clase este prezentata in fig. 5.

Fig. 5 Diagrama de clase

File folder =

new

File ( "C:\\Users\\ovidiu_paiu\\Desktop\\PdfBooks");

MainClass
seteaza
conexiunea
la
baza
de
date
si
initializeaza
baza
de
date
daca
ea
nu
a

fost
creata
impreuna
cu
tabelele
necesare.
Clasa
ajutatoare
in
care
este
scris
codul
pentru

baza
de
date
se
numeste
Proccesing.
Se
apeleaza
mai
intai
functia
setConnection
din
cadrul

clasei Proccesing si functia init().

O
alta
clasa
ajutatoare
creata
este
Queue
folosita
pentru
implementarea
unei
cozi
ce
va

ajuta la retinerea in oridine a elementelor de tip carte intr-un singur obiect.

Queue q =

new

Queue();

Aceasta
clasa
contine
un
constructor
care
initializa
o
lista
goala,
o
functie
care
insereaza

un
fisier
in
lista
de
fisiere,
o
functie
de
afisare
a
listei,
o
functie
de
stergere
si
de
luarea
a

urmatorului folder.

public

Queue() { // Constructor

this

.fileSystem =

new

ArrayList<File>();

}

public


void

add(File f){

fileSystem.add(f);// adaugare

}

public

String getNextFolder()
{

int

lastIndex =

this

.fileSystem.size()-1;

if

(lastIndex >= 0)

return


this

.fileSystem.get(lastIndex).getAbsolutePath();

else

return


null

;

}

public


void

remove(){

int

lastIndex =

this

.fileSystem.size()-1;

this

.fileSystem.remove(lastIndex);

}

Acestea
sunt
operatiile
necesare
pentru
a
implementa
algoritum
Dijkstra.
Acest

algoritm
parcurge
un
graf
in
totalitate
si
este
folosit
pentru
determinarea
celui
mai
scurt

drum
intre
doua
puncte.
Acelasi
lucru
este
implementat
si
in
aplicatie,
parcurge
intreg

arborele
dar
diferenta
dintre
acesti
algoritmi
este
faptul
ca
algoritmul
Dijkstra
calculeaza
cel

mai
scurt
drum
de
la
un
punct
la
altu
iar
acesta
determina
toate
nodurile
care
au
o
anumita

specificatie.

O
ierarhie
de
fisiere
se
poate
descrie
ca
un
arbore,
ceea
ce
ajuta
la
aplicarea

algoritmului,
documentele
care
nu
sunt
fisiere
se
considera
noduri
care
au
copii
la
randul
lor

iar documentele care sunt fisiere nu au nici un copii si sunt considerate frunze.

Pasi de implementare a algoritmului:

1.
Determinarea copiilor unui nod
File [] listOfFiles = folder.listFiles()

2.
Pentru fiecare copil se verifica daca este frunza sau nu (document de tip pdf). Daca

este frunza este trimis spre procesare, daca nu se adauga in coada.
if

(listOfFiles[i].isFile()) {
Processing.procces(listOfFiles[i]);
}

else


if

(listOfFiles[i].isDirectory()) {
q.add(listOfFiles[i]);
}

3.
Se
Ia
urmatorul
document
din
coada,
se
verific
daca
fisierul
este
null,
daca
este
null

atunci
algoritmul
paraseste
bucla
daca
nu
se
reia
pasul
1
si
se
elimina
elementul

din coada.

File = q.getNextFolder();

q.remove();

Clasa
Processing
se
ocupa
de
procesarea
documentelor
de
tip
pdf.
Atunci
cand
se

apeleaza
functia
procces,
ea
initializeaza
un
obiect
de
tip
Proccesing_PDF
apoi
apeleaza

functia

get_info

()
din
cadrul
obiectului
pentru
a
aduce
datele
unei
carti.
Dupa
ce
toate

informatiile
unei
carti
au
fost
gasite
se
introduce
in
baza
de
date.
Functia
care
realizeaza

acest
lucru
este
insert().
Exista
3
variabile
statice:
conexiunea
la
baza
de
date,
statement-ul

si
o
variabila
de
tip
ResultSet
deoarece
nu
se
doreste
initializarea
bazei
de
date
de
mai
multe

ori.

Proccesing_PDF pdf =

new

Proccesing_PDF(f.getAbsolutePath(), name);

String author = pdf.get_info();

Functia
de
insert()
primeste
urmatorii
parametrii
:
calea,
numele
cartii,
autorul,
un
nume

prelucrat,
status,
si
nivelele
pe
care
sa
afla
cartea.
Inainte
de
a
introduce
o
linie
in
baza
de

date se verifica existenta ei pentru a nu fi introdusa de mai multe ori.

Apelarea functiei de inserare:

insert(
f.getAbsolutePath(),
name,
author,
pdf.

title
,
2,
level.get(0),
level.get(1),

level.get(2), level.get(3), level.get(4));

String
insert
=
"insert
into
items
(id,
path
,
name_full,
name_author,
name_item,
status,

nivel1, nivel2, nivel3, nivel4, nivel5) values ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ?)

String search_index = "select id=count (*) from items";

String exist = "select count(*) ct from items where path = ? or name_full = ? ";

Initializarea uni statement :

pstmt = conn.prepareStatement(exist);

Adaugarea de paramentrii la comezile sql si executarea lor:

pstmt = conn.prepareStatement(insert);

pstmt.setLong(1, id);

pstmt.setString(2, path);

pstmt.setString(3, name_full);

pstmt.setString(4, name_author);

pstmt.setString(5, name_item);

pstmt.setLong(6, status);

pstmt.setString(7, nivel1);

pstmt.setString(8, nivel2);

pstmt.setString(9, nivel3);

pstmt.execute();

Conectarea
la
baza
de
date
se
face
cu
ajutorul
JDBC-ului
folosind
un
DriverManager
:

ip-ul
este
setat
pe
127.0.0.01
,
portul
16000
,
baza
de
data
selectata
este
Test_Licenta,
user

‘s’a si parola ‘student’.

String driver = "com.mysql.jdbc.Driver";

try

{

Class.forName(driver);

conn
=
DriverManager.getConnection(
"
jdbc
:
sqlserver
:
//
localhost
:
16000
;

database = Test_Licenta ; user = sa ; password = student ");

statment = (Statement) conn.createStatement();

}

catch

(SQLException | ClassNotFoundException e) {
e.printStackTrace();

}

Pentru functionarea clasei a fost necesara importarea anumitor biblioteci:

import

java.io.File,

import

java.io.IOException;

import

java.sql.*,

import

java.util.ArrayList

Functia
get_info()
din
cadrul
Clasei
Proccesing_PDF
este
miezul
acestui
solutii,
ea

deschide
documente
de
tip
pdf,
citeste
octeti,
proceseaza
continutul
pentru
a
extrage

textul,
detecteaza
toate
entitatile
de
tip
nume
,
elimina
cuvinte
care
nu
sunt
nume
si

returneaza autorul carti.

Initial
se
extrag
primele
6
pagini
pentru
ca
aici
este
cea
mai
mare
probabilitate
ca

numele
autorului
si
titlul
sa
se
gaseasca.
Se
elimina
cuvinte
precum
‘Edited’,
‘by’,
‘Editor’,

‘&’,
cuvinte
care
leaga
deobicei
autorii
intre
ei
si
care
arata
ca
urmeaza
sa
se
prezinte
un

autor.
Se
elimina
toate
parantezele
pentru
ca
parantezele
contin
explicatii
sau
alte
detalii

asemanatoare care nu au importanta.

String[] regex = {",", "&", ";","Edited", "by", "Editor"};

for

(i = 0; i < regex.length; i++)

s = s.replaceAll(regex[i], "");

s = remove_parenthesis(s);

Dupa
ce
toate
aceste
lucruri
au
fost
realizate
se
trece
la
etichetarea
tuturor

cuvintelor.
Mai
intai
textul
este
impartit
pe
linii,
se
eticheteaza
si
se
verifica
daca
toate

cuvintele
de
pe
acele
linii
sunt
nume.
In
majoritatea
cazurilor
numele
autorilor
sunt
scrise
pe

o singura linie separate de restul textului.

String [] line = s.split ("\n");

for

( i = 0 ; i < line.length ; i++ ) { // pentru fiecare linie

String tagged = tagger.tagString( line[i] ); // se marcheaza numele

if

( all_is_NNP(tagged) ) { // se verifica continutul

return

line[i];

}

}

Metoda
all_is_NNP()
primeste
un
string
care
semnifica
o
singura
linie
cu
cuvinte
deja

etichetate,
despartite
de
un
singur
spatiu.
Ea
imparte
sirul
de
caractere
pe
cuvinte
si
verifica

daca
contin
NNP
sau
NN,
doua
coduri
cheie
care
arata
faptul
ca
acele
cuvinte
sunt
nume
sau

prenume. Un exemplu este prezentat in fig. 6.

import

edu.stanford.nlp.tagger.maxent.MaxentTagger;

Fig. 6 Exemplificare cod testare

Pentru
a
putea
marca
cuvintele
este
nevoie
de
initializarea
unui
MaxenTagger.
Cu

ajutorul obiectului tagger se realizeaza marcarea cuvintelor.

static

String taggerText = "../util/english_language_pos.tagger";

static

String EbidirectionalTagger = "../util/english-bidirectional-distsim.tagger";

static

MaxentTagger tagger =

new

MaxentTagger(EbidirectionalTagger);

Pentru
citirea
textului
pagina
cu
pagina
a
fost
necesara
instalarea
unui
manipulator

de text. Elementele importante, necesare pentru extragerea textului sunt :

import

com.itextpdf.text.pdf.PdfReader;

import

com.itextpdf.text.pdf.parser.PdfReaderContentParser;

import

com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy;

import

com.itextpdf.text.pdf.parser.TextExtractionStrategy;

reader =

new

PdfReader(pdf);

PdfReaderContentParser parser =

new

PdfReaderContentParser(reader);

TextExtractionStrategy strategy;

strategy = parser.processContent(page,

new

SimpleTextExtractionStrategy());

String s = strategy.getResultantText();

Aplicatia
care
ruleaza
pe
arhitectura
.NET
integreaza
si
partea
grafica,
formata
din

doua
forme.
Una
pentru
login
si
una
pentru
interfata
care
contine
toate
functionalitatile.

Prima
interfata
contine
un
label
cu
log-ul
aplicatiei,
doua
textbox-uri
in
care
se
introduce

user-ul
si
parola
si
un
buton.
Atunci
cand
butonul
este
apasat
se
verifica
in
baza
de
date

userul
si
parola
si
in
functie
de
contul
accesat
se
restrictioneaza
anumite
functionalitati.

Impreuna
cu
restrictionarea
se
ascunde
interfata
de
principala
si
se
initializeaza
a
doua

forma cu toate elementele sale.

O
data
ce
a
fost
initializata
forma
doi
se
apeleaza
metoda
set_Category_Struct(),
ea

initializeaza
un
vector
de
obiecte.
Fiecare
obiecte
initializat
este
umplut
cu
cuvintele
din

baza
de
date,
deci
fiecare
obiect
reprezinta
o
categorie
cu
cuvintele
prorii,
diagrama
de
clasa

fiind prezentata la fig. 7.

Fig. 7 Diagrama de clase.

Clasa
utilizata
pentru
crearea
obiectelor
este
CategoryStruct
care
detine
un
nume
de

tip
sir
de
caractere,
o
lista
de
cuvinte,
o
variabila
de
tip
intreg
pentru
numarare
si
metodele

set_words(),
execute()
si
get_count().
Variabila
nume
contine
numele
categoriei,
lista

pastreaza
toate
cuvintele
cheie
pentru
o
anumita
categorie
si
variabila
de
tip
intreg

pastreaza numarul de aparitii ale cuvintelor gasite in document.

Metoda
set_words()
initializeaza
numele
categoriei
si
sirul
de
cuvinte
primite
la

intrare,
get_count()
returneaza
numarul
de
aparatie
a
cuvintelor
in
document
iar
metoda

execute()
preia
textul
primit
la
intrare,
il
imparte
in
cuvinte
si
verifica
fiecare
cuvant
daca
se

gaseste
in
lista
de
cuvinte
stabilita
anterior
si
le
numara.
Aceasta
aplicatie
contine

initializarea
tabelelor
necesare
pentru
determinarea
categoriei.
O
singura
functie
seteaza

cuvintele
pentru
fiecare
categorie
de
carte
apoi
introduce
in
baza
de
date
cuvintele.
In
baza

de date fiecare linie contine cuvantul si numele categoriei.

Fig. 8 Tabela de consistenta.

Elementele
din
forma
doi
pentru
un
utilizator
obisnuit
sunt:
o
lista
cu
categoria
dupa

care
sa
se
caute,
un
textbox
unde
se
insereaza
cuvantul
cheie,
un
buton
de
cautare
si
un

tabel
in
care
se
insereaza
datele
rezultate
in
urma
cautari.
Pentru
admin
se
mai
adauga
si

alte
elemente:
un
buton
de
cautare
a
unui
document
de
tip
pdf,
o
lista
cu
categorii,
trei

textbox – uri pentru titlu, numele autorului, categorie si un puton de adaugare.

Primul
element
care
apare
este
lista
care
contine
3
elemente:
autor,
categorie
si

titlul.
O
data
ce
a
fost
selectata
una
dintre
aceste
variante
se
apeleaza
functia
de
afisare
a

unui label cu textul ‘Key Words’ si un textbox unde sa va introduce cuvantul cheie.

In
spatele
butonului
de
search
se
executa
anumite
opearati:
in
primul
rand
se
verifica

daca
campul
cu
cuvintele
cheie
este
completat
si
daca
nu
este
completat
atunci
va
aparea

un
mesaj
de
eroare
si
apoi
in
functie
de
ce
este
ales
(autor
,
categorie
,
titlul)
se

construieste un sir de caractere cu comanda de selectare a elementelor din baza de date.

queryString
=
"select
*
from
items
where
nivel1
like
'%"+
text_search
+
"%'
or
nivel2
like
'%"

+
text_search
+
"%'
or
nivel3
like
'%"
+
text_search
+
"%'
or
nivel4
like
'%"
+
text_search
+

"%';";

queryString = "select * from items where name_author like '%"+ text_search + "%';";

queryString = "select * from items where name_item like '%" + text_search + "%';";

Dupa
ce
se
executa
una
dintre
aceste
comenzi
se
creeaza
un
dataGridView1,
un
tabel

care
se
va
afisa
in
partea
din
dreapta.
Este
necesara
mentionarea
numarului
de
coloane
si

numele
coloanelor.
Un
rand
este
format
dintr-un
vector
de
string-uri
in
care
sunt
adaugate

toate elementele si apoi acest rand este adaugat in tabela.

string[] row = new string[] { idx.ToString(), reader[2].ToString(), reader[3].ToString(), categ };

dataGridView1.Rows.Add(row);

Butonul
de
alegere
al
unui
document
deschide
o
alta
interfata
de
cautare
in

computer
si
dupa
ce
se
selecteaza
o
carte
si
se
apasa
butonul
de
open
atunci
in
spate
se

apeleaza
functia
de
readpfg()
care
primeste
ca
paramentrul
de
intrare
numele
fisierului.

Aceasta
functie
initializeaza
un
cititor
de
pdf-uri
apoi
extrage
primele
10
pagi
din
acel

document
si
le
pastreaza
intr-un
sir
de
caractere.
Daca
nu
se
poate
deschide
sau
este
alt

timp
de
document
se
va
afisa
un
mesaj
de
erroare.
Pasul
urmatorul
este
apelarea
pentru

fiecare
categorie
a
functiei
execute().
In
acest
moment
se
cunoaste
doar
cate
cuvinte
pentru

fiecare
categorie
s-au
gasit.
Se
face
o
un
procentaj
pe
fiecare
si
primele
trei
categori
se

pastreaza pentru afisarea utilizatorului pentru ca ele au cea mai mare probabilitate.

Fig. 9 Mesaj de eroare citire document

Se
selecteaza
automat
categoria
si
se
afiseaza
in
dreapta
o
lista
cu
cele
trei

elemente
posibile.
Daca
utilizatorul
doreste
sa
modifice
alegerea
cu
una
din
ele,
se
face
doar

prin selectare si se autocompleteaza cu valoarea corespunzatoare.

string curItem = listBox1.SelectedItem.ToString(); comboBox2.Text = curItem;

Titlul
este
extras
din
numele
documentului
si
inserat
in
campul
pentru
titlu.
Pentru
a

functiona
butonul
de
adaugare
in
baza
de
date,
toate
cele
patru
elemente
trebuiesc

introduse: carte , titlu, autor si categoria.

Fig. 10.1 Mesaj de eroare

Fig. 10.2 Mesaj de eroare

Butonul
‘push’
verifica
existenta
elementor
si
daca
lipseste
se
va
afisa
un

mesaj
de
eroare
altfel
se
extrage
textul
din
acele
campuri
pentru
a
fi
introduse
in
baza
de

date.
Se
pregatesc
doua
siruri
de
caractere
cu
comenzi
sql.
Una
pentru
a
verifica
daca
cartea

este
deja
in
baza
de
date
si
cealalta
pentru
inserare
.
Se
executa
mai
intai
comanda
pentru

verificarea
cartii
in
baza
de
date
apoi
daca
este
cazul
se
pregateste
comanda
a
doua,
cu

setarea tuturor parametrilor necesari si apoi executarea acestea.

5.2
Scenarii de utilizare

Pentru
a
fi
in
concordanta
cu
aplicatiile
de
pe
piata
primul
lucru
care
a
fost
creat
a
fost

interfata
de
utilizator,
interfata
de
logare.
Nu
este
adaugat
un
buton
pentru
inregistrare

doar
este
stabilit
doar
cateva
conturi
de
start.
Aceasta
aplicatie
cu
rol
de
administrare
nu

necesita inregistrare de cont pentru ca va fi un numar mic de persoane care o sa faca asta.

Fig. 11 Interfata de logare

Fig. 12 Interfata de Logare

O
data
ce
logarea
a
fost
executata
cu
succes
se
deschide
alta
interfata
care
contine

toate
celelalte
functionalitati.
Infunctie
de
cont,
aplicatia
permite
sau
nu
si
interfata
pentru

administrare.
O
parte
din
utilizatori
li
se
permite
doar
sa
faca
cautarea
iar
admin-ul
are

dreptul la toate functionalitatile.

Initial
se
va
discuta
despre
sistemul
de
cautare.
La
inceput
trebuie
sa
se
selecteze

dupa
ce
anume
se
doreste
sa
se
caute
(categorie,
autor
sau
titlu)
si
un
cuvant
cheie
diferit

de
spatiu
si
la
apasarea
butonului
search
programul
va
face
o
lista
cu
cartile
gasite.
Mai
jos

este
prezentat
un
exemplu
de
cautare
dupa
autor
setand
keyword-ul
‘aa’.
Acesta
a
cautat

toate cartile dupa autorul care au in componenta cu keyword-ul precizat.

Pentru
a
face
mai
usoara
utilizarea
programul
se
afiseaza
titlul
carti
si
locatia
in
care

se afla acea carte, in cazul care utilizatorul va dori sa acceseze acea carte.

Fig. 13 Interfata de utilizare user simplu

O
alta
functionalite
a
aplicatiei
este
inserarea
unei
noi
carti
in
sistem.
Acest
lucru

este
realizat
sa
fie
usor
de
folosit.
Ceea
ce
trebuie
facut
este
selectarea
unui
document
de

tip
pdf
(o
carte
),
soft-ul
din
spate
preia
cartea
,
o
citeste
pagina
cu
pagina,
imparte
textul
in

cuvinte
si
le
compara
cu
cele
din
baza
de
date.
Pentru
fiecare
categorie
se
numara
cate

cuvinte
s-au
gasit
si
se
determina
cate
un
procentaj
pentru
fiecare.
Se
stabileste
un
top
cu

maxim 3 categorii iar cel cu procentajul cel mai mare va fi prima optiune.

Concomitent
dupa
ce
a
fost
selectata
cartea
se
completeaza
si
campul
cu
titlul
si

aplicatia
permite
administratorului
sa
completez
si
autorul
iar
daca
una
dintre
acestea
nu

corespund
cu
cartea
se
pot
modifca.
La
apasarea
butonului
push
toate
aceste
informatii
ale

cartii
se
adauga
in
baza
de
date
daca
nu
exista
deja.
Daca
exista
atunci
utilizatorul
va
primi

un mesaj de informare.

Fig. 14 Interfata de utilizare admin

Dupa
inserarea
in
bazei
de
date
a
produsului,
programul
muta
cartea,
din
pozitia

initiala
in
ierarhie
conform
cu
categoria.
Mutarea
fizica
este
realizata
prin
copierea
bit
cu
bit

a fiserului intr-un fisier nou iar fisierul vechi este sters.

Fig. 15 Interfata de utilizare admin

Pana
acum
sa
detaliat
aplicatia,
nu
trebuie
sa
uitam
si
de
partea
de
script.
Acesta
se

aplica
doar
pe
o
ierarhie
deja
creata
dar
care
nu
detine
o
baza
de
date.
Se
presupune
ca

ierarhia
este
deja
deci
nu
mai
trebuie
impartirea
pe
categorii
si
nici
determinarea
lor.
Ce

mai
ramane
de
facut
este
determinarea
autorului,
titlului
si
inserarea
informatiei
in
baza
de

date.

Aici
se
foloseste
recunoasterea
entitatilor
de
tip
nume
si
un
algoritm
care
determina
cu

usurinta
autorul
si
titlul.
Se
trece
prin
toata
ierarhia
si
pentru
fiecare
document
se
extrag

informatiile
si
daca
exista
deja
in
baza
de
date
nu
se
mai
adauga
altfel
se
realizeaza
operatia

de inserare.

Exemplu de rezultate ale rulari algoritmului se regaseste in fig. 16:

Fig. 16 Rulare program java

6
E
VALUARE

Aplicatia
contine
teste
facute
acoperind
mai
multe
domenii:
testarea
functionalitati
de

gasire
a
autorului
si
de
incadrare
a
cartii
intr-o
anumita
categorie
pentru
mai
multe
seturi
de

documente
diferind
numarul
lor.
In
procentaj
de
98,3
%
aplicatia
reuseste
sa
fie
in

conformitate cu specifica
ț
iile prezentate anterior.

Testarea gasiri autorului este detaliata in fig 17.1 .

Fig . 17.1 Diagrama cu procentajul de gasire a autorului

Testarea functionalitati de incadrea a cartii intr-o categorie este prezentata in fig. 17.2

Fig . 17.2 Diagrama cu procentajul de intregrare a carti intr-o categorie

Resursa
necesara
functionarii
aplicatiei
este
un
computer
cu
specificatii
minime:
un

procesor
intel
celeron
quad
core,
memorie
ram
de
doi
gigabyte
si
un
hard
petru
stocarea

datelor
in
functie
de
marimea
bibliotecii.
In
ceea
ce
priveste
scalabilitatea
numarul
de

conexiuni
la
baza
de
date
este
limitata
la
30
de
accesari
simultane,
accepta
mai
multe

connexiuni
dar
cererile
la
baza
de
date
incep
sa
se
faca
serial
si
va
afecta
durata
de
raspuns

a
aplicatiei.
Se
poate
imbunatati
performanta
aplicatiei
prin
cresterea
puterii
de
calcul,
prin

marirea
numarului
de
calculatoare,
legarea
in
retea
a
acestora,
distribuirea
si
efectuarea
in

paralel a task-urilor pe mai multe procesoare.

7
C
ONCLUZII

Aplicatia
‘Biblioteca
virtuala’
este
o
aplicatie
care
ofera
o

ierarhie
virtuala
bine

structurata,
acces
la
arhiva,
funtionalitatea
de
inserare
si
cautare
performanta,
o

metoda de incadrare a unei carti intr-o categorie.

Reduce
considerabil
durata
de
timp
necesara
gasiri
documentelor,
scade
timpul
de

accesare
a
unui
document
datorita
arhivei
bine
stabilite,
reducerea
costului
cu

gestionarea bibliotecii si cresterea securitati documentelor.

Dezvoltarile
ulterioare
sunt:
initializarea
unei
retele
de
calculatoare
care
sa
se
poata

conecta
mai
multe
servere
de
baze
de
date,
ceea
ce
va
duce
la
marirea
numarului
de

utilizatori simultan si crearea unei aplicatii web care sa aiba aceleasi functionalitati.

8
B
IBLIOGRAFIE

1.
Brat http://brat.nlplab.org/introduction.html

2.
Alphabetical
list
of
part-of-speech
tags
used
in
the
Penn
Treebank
Project
,

https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html

3.
Documentation about junit

https://github.com/junit-team/junit4/wiki/Getting-started

4.
Documentation https://www.programcreek.com/2012/05/opennlp-tutorial/

5.
Roman
Yampolskiy

,
‘Feature
Extraction
Approaches
for
Optical
Character

Recognition’,

31 Jul 2007

6.
Arindam
Chaudhuri

,

Krupa
Mandaviya

,

Pratixa
Badelia

,

Soumya
K
Ghosh,
‘Optical

Character
Recognition
System
for
Different
Languages
with
Soft
Computing’,
Jan

2017

7.
Stephen
V.
Rice

,

George
Nagy

,

Thomas
A.
Nartker,
‘Optical
Character
Recognition’,

Jan 2013

8.
International
Journal
of
Advanced
Research
in
Computer
Engineering
&
Technology

(IJARCET) Volume 2, Issue 6, ‘Optical Character Recognition Techniques’, June 2013

9.
Ing.
Roberto
Gallerani,
’Natural
Language
Processing
(NLP)
e
Information
Extraction’,

2015

10.
Stefan Tanasa, Cristian Olaru, Stefan Andrei, ’Java de la 0 la expert’, 2011

11.
Thuan Thai

, ’.NET Framework Essentials’, 2003

12.
Patrick LeBlanc

, ‘Microsoft SQL Server 2012 step by step’, 2013

13.
’Programare C#’, http://www.math.uaic.ro/~cgales/csharp/Curs1.pdf

14.
‘Junit CookBook’, https://junit.org/junit4/cookbook.html

15.
Martin
Patsov,
‘Top
10
java
libraries
for
saving
time’,
2017,

https://jaxenter.com/top-10-java-libraries-137587.html

16.


https://stanfordnlp.github.io/CoreNLP/cmdline.html

17.
‘Java
NLP
test
standford’,

https://mailman.stanford.edu/pipermail/java-nlp-user/2011-March/000734.html

18.
Documentation, https://opennlp.apache.org/docs/1.8.0/manual/opennlp.html

9
A
NEXE

Number

TAG

Descption

1

CC

Coordinating conjunction

2

CD

Cardinal number

3

DT

Determiner

4

EX

Existential

there

5

FW

Foreign word

6

IN

Preposition/subordinating

conjunction

7

JJ

Adjective

8

JJR

Adjective, comparative

9

JJS

Adjective, superlative

10

LS

List item marker

11

MD

Modal

12

NN

Noun, singular or mass

13

NNS

Noun, plural

14

NNP

Proper noun, singular

15

NNPS

Proper noun, plural

16

PDT

Predeterminer

17

POS

Possessive ending

18

PRP

Personal pronoun

19

PRP$

Possessive pronoun

20

RB

Adverb

21

RBR

Adverb, comparative

22

RBS

Adverb, superlative

23

RP

Particle

24

SYM

Symbol

25

TO

To

26

UH

Interjection

27

VB

Verb, base form

28

VBD

Verb, past tense

29

VBG

Verb,
gerund
or
present

participle

30

VBN

Verb, past participle

31

VBP

Verb,
non-3

rd
person

singular present

32

VBZ

Verb,
3rd
person
singular

present

33

WDT

Wh-determiner

34

WP

Wh-pronoun

35

WP$

Possessive wh-pronoun

36

WRB

Wh-adverb

Tabel. 1 Alfabetul partilor de vorbire folosite pentru marcare, conform [2]

Similar Posts