Sunteți pe pagina 1din 17

MINISTERUL EDUCAIEI AL REPUBLICII MOLDOVA

UNIVERSITATEA TEHNIC A MOLDOVEI

Facultatea Calculatoare,Informatic i Microelectronic


Catedra Informatica Aplicat

la disciplina: Analiza deterministico-stastistic a


datelor

Tema: Corectarea erorilor n texte

Autor:
studentul grupei IA151,
Grosu Dumitru

Conductor tiinific:
dr., conf. univ.
Bobicev Victoria,
Chiinu - 2017
CUPRINS

INTRODUCERE........................................................................................................................................3
CAPITOLUL I. CORECTAREA ERORILOR............................................................................................4
1. 1. Cauzele erorilor...........................................................................................................................4
1.2. Variantele de corectare a erorilor (clasice)...................................................................................4
1.3. Metode de corectare a erorilor.....................................................................................................5
1.4. Algoritmul general.......................................................................................................................5
CAPITOLUL II. IMPLEMENTAREA LUCRRII...................................................................................6
2.1. Scopul lucrrii:............................................................................................................................6
2.2. Sarcina lucrrii.............................................................................................................................6
2.3. Descrierea programului................................................................................................................6
2.4. Compararea textelor.....................................................................................................................7
2.5. Listing-ul programului..............................................................................................................10
CONCLUZIE............................................................................................................................................13
BIBLIOGRAFIE.......................................................................................................................................14
INTRODUCERE
Fiinele umane, uneori, nu pot recunoate cuvintele in mod corect, mai ales in cazul n
care vorbitorul i ascultator provin din diferite regiuni, sau n cazul, n care vorbitorul discuta un
subiect necunoscut, sau n cazul, n care cuvintele nu sunt bine articulate. In plus, cnd am auzit
un cuvnt pentru prima dat, este posibil sa nu tim cum s-l scriem. Unii oameni pot scrie in
moduri diferite (cum ar fi Gene / Jean, Hansen / Hanson). Noi de multe ori trebuie sa verificm
modul in care un cuvint se scrie corect cu ajutorul dicionarului.

Oamenii au nevoie din ce n ce mai mult s comunice n aceasta lingua franca a lumii.
Muli studeni se nscrie la cursuri de limbi straine, cursuri la coli secundare i universiti, dar
timpul n sala de clasa este greu adecvat pentru teorie i practica necesare pentru a inva sa-i
exprime corect cuvintele ntr-o limb strin. Ca urmare, elevii caut adesea meditaii
suplimentare, i se bazeaz pe profesori i corectorii pentru a corecta greeli n scrierea lor.

Prezenta lucrare urmrete sa promoveze corectarea automat a erorilor gramaticale din


text, iar sarcina este strins legata de generarea elementelor de testare, adica compararea
dicionarului existent i a textului de erori. Vom efectua o analiza bazat pe limba matern.
Programul utilizat,se aplic pe unele dintre erorile de utilizare cele mai comune, inclusv
nlocuirea literelor(ex: i ->, a->, t->, s->), spaiile ntre cuvinte care sunt eliminate din text,
schimbri de litere, litere ce sunt pierdude n cuvintele textului, etc.
CAPITOLUL I.
CORECTAREA ERORILOR

Analiza erorilor presupune detectarea, diagnosticarea i corectarea discrepanelor dintre


textul incorect i ceea ce ar trebui sa fie corect. Folosirea diferitelor moduri de scriere, cum ar fi
procesare de text pe baza de tastatura i de recunoatere a vorbirii, cauze diferite tipuri de erori n
timpul produciei de text. In timp ce muli factori determin alegerea strategiei de corecie a
erorilor, crearea unui program este o contribuie majora la aceasta alegere. Aceasta cercetare
arata modul n care un program n timpul analizei de eroare afecteaz alegerea strategiei i
succesul n corectarea erorilor. Programul de text este de a fi influenat cel mai mult de
deschidere eroare, adica, daca eroarea se intinde pe mai mult sau mai puin de doua caractere. In
continuare, acesta este influenat de modul de intrare, adica, daca eroarea a fost generata de
program, i in cele din urma de lexicality, adica, daca eroarea cuprinde un cuvant existent.
Corectarea deschideri mai mari de eroare este mai mult succes decat cea de erori mai mici. In
timpul deschideri mari de eroare, exista o tendina de a opta pentru corectarea erorilor in primul
rand.

1. 1. CAUZELE ERORILOR

Erorile recunoaterii textului din documente scanate (OCR)


Erorile recunoaterii textului scris de mn
Erorile n textul cules n grab
Erorile gramaticale (fonetice)
Lipsa semnelor speciale (diacritice)

Erorile care produc cuvinte greite (se detecteaz de Word prin compararea cu dicionarul)

1.2. VARIANTELE DE CORECTARE A ERORILOR (CLASICE)

Inserarea literei (insertion)


scrsoare - scrisoare
tergerea literei (deletion)
scrissoare - scrisoare
nlocuirea literei (substitution)
scrosoare - scrisoare
Schimbarea a dou litere (transposition)
srcisoare scrisoare
1.3. METODE DE CORECTARE A ERORILOR

n primul rnd eroarea trebuie sa fie detectat.


Exemplu:
Mi-am perfectat toate documentele si am devenit un cetatean roman.
cautarea n dicionar
acress -> actress inserarea
acress -> acres tergerea
acress -> caress schimbarea
acress -> access nlocuirea
Tabel 1. Erorile tipice

1.4. ALGORITMUL GENERAL

1. Detectm cuvintele greite

comparm cu cuvintele din dicionar


calculm probabilitatea lor
2. Generm variantele de corectare
comparm cu tabelul erorilor tipice
analizm erorile clasice (inserarea, tergerea, etc.)
cautm variantele apropiate n dicionar
3. Selectm varianta cea mai potrivit
Calculm probabilitatea variantelor de corectare
CAPITOLUL II.
IMPLEMENTAREA LUCRRII

2.1. SCOPUL LUCRRII:

Corectarea textelor pe baza unei erori, i crearea unui dicionar care include cuvinte
corecte, ce va ajuta la compararea textului incorect i corectarea lui pe baza dicionarului creat.

2.2. SARCINA LUCRRII

Din fiierul incorect se corecteaz 148 de litere a cu . Se va folosi fiierul correct


Asimov - O piatra pe cer_1.txt corect i fiierul incorect Asimov - O piatra pe cer_2.

2.3. DESCRIEREA PROGRAMULUI

Software-ul utilizeaza indicii contextuale i dicionarul creat pentru a ghici ce sa


corecteaz, dar, uneori, nu se poate ghici corect. In special, aceasta poate sa nu recunoasca
cuvinte mai puin frecvente la prima incercare. Ea nu poate recunoate i transcrie un cuvant care
niciodata nu a fost vazut n dicionar.

Folosind acest program, folosind tehnica de corecie corespunzatoare, i instrumentele de


vocabular se va reduce numarul de erori.

n final, sunt corectate numai 70 de litere de , n loc de 148, ceea ce nseamn c o parte
de cuvinte nu sunt recunoscute de program, deoarece ele poate s se fie aceeai dup coninut
ns sensul lui s fie cu totul altul.

De exemplu, cum ar fi n urmtoarele propoziii:


n urma navei sale se dezlanuise urletul sirenelor de alarma
iar ordinele de a se ntoarce cutremurau vazduhul pn la el

Explicaii din dicionar:

Primul sens:

ALRM, alarmez, vb. I. Refl. i tranz. o


A (se) neliniti, a (se) ngrijora.
o Tranz. A pune n stare de alert, de pregtiri, a da alarma (la apropierea unei
primejdii)

Al doilea sens:

ALRM, alarme, s. f.
o 1. Anunare a unei primejdii sau calamiti care amenin populaia; semnal prin
care se anun asemenea primejdii.
o 2. Nelinite, team, spaim de care este cuprins cineva la apropierea unei
primejdii

ennius i rennoise propunerea iniiala ca populaia pmntului


sa fie evacuat pe o alta planeta dar pmntenii refuzasera

alta alt

planeta planet

2.4. COMPARAREA TEXTELOR

1) n continuare, vom compara fiierul cu textul corect i incorect , iar rezultatele obinute sunt
prezentate mai jos:

2 nc nca nc - true positive


5 trit trait trit - true positive
10 trecuser trecusera trecuser - true positive
18 prsise parasise parasise - false negative
25 destinat destinata destinata - false negative
33 dezlnuise dezlanuise dezlanuise - false negative
37 alarm alarma alarma - false negative
45 vzduhul vazduhul vazduhul - false negative
46 pn pna pn - true positive
63 su sau sau - false negative
67 oficial oficiala oficiala - false negative
78 afar afara afara - false negative
89 primiser primisera primisera - false negative
106 fcuse facuse fcuse - true positive
125 s sa sa - false negative
128 pagin pagina pagina - false negative
129 strlucit stralucita stralucita - false negative
141 ctre catre ctre - true positive
152 strluceau straluceau strluceau - true positive
164 tulburri tulburari tulburri - true positive
167 rzmeriei razmeriei rzmeriei - true positive
172 pmntenii pamntenii pmntenii - true positive
178 s sa sa - false negative
190 s sa sa - false negative
191 soseasc soseasca soseasc - true positive
196 iniial iniiala iniiala - false negative
199 pmntului pamntului pmntului - true positive
200 s sa sa - false negative
202 evacuat evacuata evacuat - true positive
205 alt alta alta - false negative
206 planet planeta planeta - false negative
208 pmntenii pamntenii pmntenii - true positive
209 refuzaser refuzasera refuzasera - false negative
220 ans ansa ansa - false negative
227 planet planeta planeta - false negative
228 s sa sa - false negative
229 reconstruiasc reconstruiasca reconstruiasca - false
negative
231 strmoilor stramoilor strmoilor - true positive
234 leagn leagan leagan - false negative
237 s sa sa - false negative
238 trudeasc trudeasca trudeasca - false negative
243 pmntul pamntul pmntul - true positive
247 sntos sanatos sanatos - false negative
248 semnnd semannd semannd - false negative
249 verdea verdeaa verdeaa - false negative
253 tria traia tria - true positive
255 fcnd facnd fcnd - true positive
256 s sa sa - false negative
257 nfloreasc nfloreasca nfloreasca - false negative
262 munc munca munca - false negative
263 imens imensa imensa - false negative
265 s sa sa - false negative
272 s sa sa - false negative
278 s sa sa - false negative
280 trimit trimita trimit - true positive
281 hran hrana hrana - false negative
282 s sa sa - false negative
296 s sa sa - false negative
302 pmntenii pamntenii pmntenii - true positive
315 planet planeta planeta - false negative
320 s sa sa - false negative
321 priveasc priveasca priveasc - true positive
331 btea batea btea - true positive
342 scrile scarile scrile - true positive
346 sptmna saptamna saptamna - false negative
347 urmtoare urmatoare urmtoare - true positive
349 s sa sa - false negative
351 mpreun mpreuna mpreuna - false negative
354 s sa sa - false negative
365 prsise parasise parasise - false negative
366 vreodat vreodata vreodat - true positive
367 pmntul pamntul pmntul - true positive
369 clip clipa clipa - false negative
375 pmnt pamnt pmnt - true positive
376 pmntul pamntul pmntul - true positive
388 trecuser trecusera trecuser - true positive
393 jumtate jumatate jumtate - true positive
397 s sa sa - false negative
405 jumtatea jumatatea jumtatea - true positive
410 rsunau rasunau rsunau - true positive
413 dinuntru dinauntru dinuntru - true positive
430 simire simire simir - false positive
432 adnc adnca adnc - true positive
436 cuprins cuprinsa cuprins - true positive
456 sturat saturat saturat - false negative
465 dornic dornica dornica - false negative
472 deplin deplina deplina - false negative
477 rspunse raspunse rspunse - true positive
486 inuta inuta inut - false positive
488 provincial provinciala provinciala - false negative
499 urm urma urma - false negative
504 p pa pa - false negative
511 dac daca daca - false negative
513 ntreab ntreaba ntreab - true positive
517 c ca ca - false negative
519 originar originara originara - false negative
522 pmnt pamnt pmnt - true positive
524 cetean cetaeana ceteana - true positive corectare
gresita
527 dac daca daca - false negative
532 amnunte amanunte amnunte - true positive
538 dup dupa dup - true positive
562 lum luam luam - false negative
569 vizitm vizitam vizitam - false negative
576 lsm lasam lasam - false negative
577 s sa sa - false negative
586 s sa sa - false negative
587 cltorim calatorim calatorim - false negative
590 potal potala potala - false negative
604 frumoas frumoasa frumoasa - false negative
605 lun luna luna - false negative
611 cumpra cumpara cumpra - true positive
621 pmnt pamnt pmnt - true positive
627 munc munca munca - false negative
632 urmtorii urmatorii urmtorii - true positive
637 via viaa viaa - false negative
639 pmnt pamnt pmnt - true positive
640 sntos sanatos sanatos - false negative
642 s sa sa - false negative
652 c ca ca - false negative
658 pru paru pru - true positive
659 c ca ca - false negative
668 c ca ca - false negative
680 pmntean pamntean pmntean - true positive
695 ncet nceta nceta - false negative
697 ns nsa ns - true positive
712 s sa sa - false negative
717 s sa sa - false negative
729 strad strada strada - false negative
732 strlucirea stralucirea strlucirea - true positive
736 ntreag ntreaga ntreaga - false negative
740 vzute vazute vzute - true positive
742 nevzute nevazute nevazute - false negative
749 pmntul pamntul pmntul - true positive
750 renscut renascut renascut - false negative
760 repet repeta repeta - false negative
763 strvechi stravechi strvechi - true positive
775 s sa sa - false negative
776 mbtrnim mbatrnim mbtrnim - true positive
total cuvintelor: 777;
136 erori
55 corectari
1 corectari gresite
true positive 52
true negative 639
false positive 2
false negative 83
2) Deci, rezulta c precizia dup compararea rezultatelor este

52

LISTING-UL PROGRAMULUI

#importm modulul care lucreaz cu expresii regulate


# -*- coding: utf-8 -*-
import re, collections, codecs

#extreagem cuvintele individuale, folosind funcia words,


ce convertete totul n litere mici
#creem o variabil model pentru probabilitatea cuvintelor, care
calculeaz de cte ori apare n cuvntul dat n text, folosind
funcia train
corectari=0
def words(text): return re.findall(u'[a-z]+',
text.lower()) def train(features):
model = collections.defaultdict(lambda:
1) for f in features:
model[f] +=
1 return model
# se creaz o variabil samples pentru deschide i
citirea cuvintelor din fiierul orig.txt

samples = train(words(codecs.open('orig.txt', 'r',


encoding='utf-8').read()))
alphabet = u''

O piatra pe cer

Isaac Asimov

CAPITOLUL l

NTRE UN PAS I CELLALT

Cu dou minute nainte de-a prsi pentru totdeauna Pmntul pe care-l tia, Joseph Schwartz se
plimba agale pe strzile plcute din suburbia Chicago-ului, recitnd n gnd nite versuri de Browning.
Faptul ar fi prut surprinztor unui ins oarecare, fiindc Schwartz cu greu ar fi putut trece drept genul
de om care s recite din Browning. Arta exact ceea ce era: un croitor la pensie, total lipsit de ceea ce
pedanii de azi numesc "educaie clasic". Totui, firea sa iscoditoare l ndemnase s-i cheltuiasc o
bun parte din timp cu tot felul de lecturi, reuind s-i nsueasc o spoial de cultur mai din toate i,
ajutat de o memorie neobinuit, pstrase totul n bun rnduial.

Pe cnd era mai tnr, citise i recitise poemul Rabbi ben Ezra de Browning, nct l nvase pe
dinafar. Nu-l prea nelesese n cea mai mare parte, dar cele trei rnduri de la nceput i mergeau la inim
n ultimii ani. n aceast nsorit diminea de var a lui 1949 le intona din nou, ascultndu-le ecoul n
adncul tcut al minii.

#creem funcia edits1 pentru editarea ntre cele 2 cuvinte,


prin alterarea lor, adic pentru schimbarea unei litere cu alta
i returneaz un set de cuvinte editate

def edits1(word):
n = len(word)
return set([word[0:i]+c+word[i+1:] for i in range(n) for c
in alphabet]) # alteration

#funcia correct, ajut la schimbarea cuvintelor

def known(wordlist): return set(w for w in wordlist if w in samples)

def correct(word):
candidates = known([word]) or known(edits1(word)) or
[word] return max(candidates, key=lambda w: samples[w])
# se creaz o variabil broken pentru deschide i citirea
cuvintelor incorecte din fiierul incorect.txt

broken = words(codecs.open(incorect.txt', 'r',


encoding='utf-8').read())

CAPITOLUL XXII
NCA NU AM TRAIT CE-I MAI FRUMOS

Trecusera treizeci de zile de cnd Joseph Schwartz parasise pista de decolare ntr-o noapte destinata
distrugerii Galaxiei. n urma navei sale se dezlanuise urletul sirenelor de alarma, iar ordinele de a se
ntoarce cutremurau vazduhul pna la el.

Nu se ntorsese; cel puin nu nainte de a distruge Templul din Senloo.

Eroismul sau primise acum recunoatere oficiala.


Avea n buzunar Ordinul Cosmonavei i Soarelui, Clasa I. n afara de el, numai doi oameni din
ntreaga Galaxiei l mai primisera n timpul vieii.

Era ceva, pentru un croitor la pensie!

Desigur, nimeni nu tia exact ce facuse, cu excepia unui cerc foarte restrns de persoane oficiale,
dar nu conta. ntr-o zi, toate acestea aveau sa fie o pagina stralucita i nemuritoare a istoriei galactice.

# se creaz o variabil fixed pentru deschide i nscrierea


textul corectat n fiierul myfile.txt.

capitolul xxii nc nu am trit ce i mai frumos trecuser treizeci de zile de cnd joseph schwartz
parasise pista de decolare ntr o noapte destinata distrugerii galaxiei n urma navei sale se dezlanuise
urletul sirenelor de alarma iar ordinele de a se ntoarce cutremurau vazduhul pn la el nu se ntorsese
cel puin nu nainte de a distruge templul din senloo eroismul sau primise acum recunoatere oficiala
avea n buzunar ordinul cosmonavei i soarelui clasa i n afara de el numai doi oameni din ntreaga
galaxiei l mai primisera n timpul vieii era ceva pentru un croitor la pensie desigur nimeni nu tia
exact ce fcuse cu excepia unui cerc foarte restrns de persoane oficiale dar nu conta ntr o zi toate
acestea aveau sa fie o pagina stralucita i nemuritoare a istoriei galactice

#i crearea unui ciclu for pentru cuvintele care trebuie verificate


de erori i afiarea lor
fixed = codecs.open(myfile.txt', 'w', encoding='utf-8')

for word in broken:


if word !=correct(word):
corectari =
corectari+1
print (word)," -> ", correct(word)
fixed.write(correct(word) + ' ')
nca tulburari imensa
trait pamntenii trimita
trecusera ocupe hrana
pna soseasca scara
oficiala iniiala pamntenii
pamntului priveasca
facuse pamntenii batea
pagina pamntul urca
catre traia
straluceau facnd

#afisare unui mesaj cu numrul de erori care au fost corectate


print ("\nNumarul de corectari >>> ",corectari)

Numarul de corectari >>> 70


CONCLUZIE
Lucrarea mea de curs reprezint problema corectrii erorilor dintr-un text greit. Am
ncercat s rezolv problema cnd din text au fost scrise incorecte un numr anumit de litera a
cu . n final, sunt corectate numai 70 de litere de , n loc de 148.
Acest program, ns are un dezavantaj destul de mare, semnele de punctuaie
(punctul, virgula, linia de dialog, etc.) sunt eliminate din text, cnd sunt corectate erorea
indicata i sunt uninite ca fiind cuvinte independente , iar textul n aa mod nu are nici un
sens.
Pe viitor, a ncerca s modific acest program n aa mod ca, textul care va fi corectat,
n final, s fie ca i cel original, cu toate liniile de punctuaie, aliate i cu liniile de dialog.

BIBLIOGRAFIE
1. Corectarea erorilor din texte.ppt. Curs. V.Bobicev
2. Correcting Text Production Errors: Isolating the Effects of Writing Mode From Error Span,
Input Mode, and Lexicality
https://www.researchgate.net/publication/236775504_Correcting_Text_Production_Error
s_Isolating_the_Effects_of_Writing_Mode_From_Error_Span_Input_Mode_and_Lexical ity
3. John Sie Yuen Lee, Automatic Correction of Grammatical Errors,2009. pdf

S-ar putea să vă placă și