Sunteți pe pagina 1din 7

Structuri de date: Tema 3

Grafuri de cuvinte
Tudor Berariu
tudor.berariu@gmail.com
10 mai 2015

Pe scurt...

Pentru rezolvarea acestei teme va trebui construit un graf de cuvinte (pe


baza unui text dat). Se va parcurge apoi acel graf pentru a construi fraze ce
ncep s, i se termina cu doua cuvinte date.

Graful de cuvinte

Se da un text n limba romana. Se va parsa acest text s, i se vor separa


cuvintele (fara semne de punctuat, ie, cratime, etc.). Fiecare cuvant va deveni
nod ntr-un graf de cuvinte. Intre fiecare doua cuvinte consecutive din text
va exista o muchie. Costul unei muchii va reprezenta un scor pentru acea
secvent, a de doua cuvinte calculat dupa cum urmeaza.
Pentru doua cuvinte wordA s, i wordB vom calcula o matrice de contingent, a:

U = wordA
U 6= wordA

V = wordB
AB
O11
AB
O21

V 6= wordB
AB
O12
AB
O22

unde:
AB
O11
reprezinta numarul total de aparit, ii ale sintagmei word1 word2 n
text.

AB
O12
reprezinta numarul total de aparit, ii ale unor sintagme n care
word1 este urmat de alt cuvant n afara de word2 .
AB
reprezinta numarul total de aparit, ii ale unor sintagme n care
O21
word2 este precedat de alt cuvant n afara de word1 .
AB
O22
reprezinta numarul total de aparit, ii ale unor sintagme n care
primul cuvant nu este word1 , iar cel de-al doilea nu este word2 .
AB
AB
AB
AB
Desigur, O11
+ O12
+ O21
+ O22
= M (numarul total de secvent, e
consecutive de doua cuvinte).
Pe baza tabelei de contingent, a a doua cuvinte wordA s, i wordB se calculeaza o masura1 pentru sintagma (colocat, ia) wordA wordB :


AB
AB
O22
O11
OddsRatio(wordA , wordB ) = log
AB
AB
O12
O21


AB
AB
= log O11
+ log O22


AB
AB
log O12
log O21


Deoarece este posibil ca unii termeni sa fie zero, n practica se foloses, te:
!

AB
AB
+
0.5
+
0.5

O
O
22
11
OddsRatio (wordA , wordB ) = log
AB
AB
O12
O21


AB
AB
= log O11
+ 0.5 + log O22
+ 0.5


AB
AB
log O12
+ 0.5 log O21
+ 0.5
Deoarece masura OddsRatio(wordA , wordB ) este o masura a cat de puternica este alaturarea dintre cele doua cuvinte, costul unui arc ntre nodurile
wordA s, i wordB va fi:
Cost(wordA , wordB ) = 1 +

min

OddsRatio (wordX , wordY )

(wordX ,wordY )

OddsRatio (wordA , wordB )


Pentru doua cuvinte ce nu au aparit, ii consecutive n text nu va exista
muchie ntre varfurile corespunzatoare acestora.
1

http://www.collocations.de/AM/

Cerint, e

3.1

Cerint, a 1 : Construirea grafului de cuvinte

Se da un text n limba romana. Sa se extraga cuvintele s, i sa se construiasca graful de cuvinte, calculandu-se scorul muchiilor conform formulei din
sect, iunea 2.
Toate simbolurile ., % vor fi eliminate, iar cratima va fi considerat separator ntre cuvinte.
Testarea se va face prin verificarea costurilor pentru cateva muchii alese
la ntamplare.

3.2

Cerint, a 2: Construirea unei fraze

Se dau doua cuvinte wordstart s, i wordend . Sa se construiasca o fraza corespunzatoare drumului de cost minim ntre cele doua noduri.
Pentru rezolvarea acestei cerint, e se va implementa o coada de prioritat, i.

3.3

Bonus: Fraze de lungime fix


a

Se da un cuvant wordend s, i un numar n. Sa se construiasca fraza de lungime


n ce se ncheie cu wordend de cost minim. Atent, ie: acelas, i cuvant poate
aparea de mai multe ori.

Trimiterea temei

Pentru trimiterea temei se va trimite o arhiva cu:


toate fis, ierele sursa,
Makefile care produce executabilul words.
Executabilul words va primi doua argumente: numele fis, ierului de intrare
(cu testele) s, i numele fis, ierului de ies, ire.

4.1

Fis, ierul de intrare

Fis, ierul de intrare va cont, ine pe prima linie numele fis, ierului cu textul pe
baza caruia se va construi graful de cuvinte.
3

Pe linia a doua se va gasi un numar L. Pe urmatoarele L linii se vor gasi


cate doua cuvinte ce formeaza o sintagma. Pentru fiecare pereche de cuvinte
trebuie scris n fis, ierul de ies, ire costul arcului dintre ele (cerint, a 1).
Pe linia 2 + L + 1 se va gasi un numar M . Pe urmatoarele M linii se
vor gasi cate doua cuvinte. Pentru fiecare dintre acestea trebuie afis, ata fraza
corespunzatoare drumului de cost minim dintre acestea (cerint, a 2).
Pe linia 2 + L + 1 + M + 1 se va gasi un numar N . Pe urmatoarele N linii
se vor gasi cate un numar n s, i un cuvant w. Pentru fiecare dintre acestea se
vor scrie n fis, ierul de ies, ire propozit, iile de cost minim de dimensiune n ce se
termina cu w.
Vezi exemplu n Sect, iunea5.2.

4.2

Fis, ierul de ies, ire

Fis, ierul de ies, ire va avea L linii pe care se va gasi cate o valoare reala corespunzatoare costului arcului descris la linia 3 l 2 + L.
Urmatoarele M linii corespund frazelor construite pentru drumul de cost
minim ntre cuvintele date pe linia 2 + L + 2 m 2 + L + 1 + M n fis, ierul
de intrare.
Pentru cerint, a de la bonus, se vor produce N grupuri de linii, fiecare
avand urmatoarea component, a: o linie cu numarul soln de solut, ii, urmate
de soln cu frazele respective.
Vezi exemplu n Sect, iunea5.3.

5
5.1

Exemplu
Graful de cuvinte

Fie fis, ierul text1:


Fisier de test...
...cu cinci linii de test,
...linii scurte,
...linii foarte scurte,
...linii SCURTE de test!
Cele 8 cuvinte din graf vor fi: f isier, de, test, cu, cinci, linii, f oarte,
scurte.
4

Sunt n total 16 bi-grame (sintagme formate din doua cuvinte). Pentru a


calcula costul arcului linii scurte, calculam ntai matricea de contingent, a
pentru acea bigrama.

U = linii
U 6= linii

V = scurte
O11 = 2
O21 = 1

V =
6 scurte
O12 = 2
O22 = 11

Scorul OddRatio va fi:


OddsRatio (wordA , wordB ) = log (O11 + 0.5) + log (O22 + 0.5)
log (O12 + 0.5) log (O21 + 0.5)
= log (2.5) + log (11.5) log (2.5) log (1.5) = 2.06388
Pentru celelalte sintagme
Sintamga
OddRatio
f isier de
-2.78501
de test
5.24175
test linii
1.18958
test cu
3.3673
cu cinci
4.5326
cinci linii
2.37158
linii f oarte
2.37158
linii scurte
2.03688
linii de
0.587787
scurte de
1.01523
scurte linii
2.03688
f oarte scurte
2.78501
Tabela 1: Masura OddRatio calculata pentru toate bigramele din text1
Cea mai mare valoare corespunde sintagmei detest s, i aceasta va fi folosita
pentru calculul costului arcelor:
Cost(linii, scurte) = 5.24175 2.03688 + 1 = 4.20487

sier

3.456

de
5.22652
1
3.45674

scurte
4.20487

foarte

5.65396

4.20487

3.456

test
2.87445

5.05216

linii

cu

3.87017

1.70915

cinci

Figura 1: Graful corespunzator fis, ierului text1

5.2

Fis, ierul de intrare

data/text1
6
fisier de
linii scurte
foarte scurte
test linii
de test
scurte de
2
fisier scurte
scurte test
1
5 test

5.3

Fis, ierul de ies, ire

3.45674
4.20487
3.45674
5.05216
6

1
5.22652
fisier de test linii scurte
scurte de test
1
cu cinci linii de test

Evaluare