Sunteți pe pagina 1din 6

Ministerul Educației al Republicii Moldova

Universitatea tehnică a Moldovei

Departamentul Informatică și Ingineria Sistemelor

Raport
Lucrarea de LABORATOR NR. 3
Obiectul: Analiza statistică a datelor
Tema: Corectarea Corectarea erorilor în text

A efectuat: st. Gr. IA-171 Ungureanu Mihail


A verificat: Lector universitar: Victoria Bobiicev

Chișinău 2019
Scopul lucrării: De creat o aplicație care efectuează corectarea erorilor într-un text.

Sarcina:
1. De creat vocabularul de cuvinte corecte din prima parte a carţii.
2. De creat un script pentru corectarea erorilor în partea a doua a cărţii.
3. De rulat scriptul şi de verificat lucrul lui.
4. De evaluat rezultatele corectării calculînd Precision şi Recall.
5. De analizat erorile comise de script şi de facut schimbările necesare pentru a mări
Precision şi Recall (mărirea vocabularului, schimbarea scriptului, etc.).
6. De scris concluzia în care :
a. De prezentat rezultatele obţinute (Precizia, Recall)
b. De analizat erorile necorectate
c. De propus căile de rezolvare a problemelor evidenţiate

Varianta:9
Codul sursă:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

// D:\Univer\Anul 2\Semestrul 2\Analiza statistica a datelor\laboratoare\lab 3 corectarea


erorilor\
// /home/silver/Documents/Univer/ASAD/laboratoare/lab 3 corectarea erorilor/
final private static String dictionaryInputFileName = "A doua fundatie corect.txt";
final private static String dictionaryOutputFileName = "dictionar.txt";
final private static String textInputFileName = "A doua fundatie corectat.txt";
final private static String textOutputFileName = "textul corectat.txt";
final private static File dictionaryInputFile = new File(
"D:\\Univer\\Anul 2\\Semestrul 2\\Analiza statistica a datelor\\laboratoare\\lab 3
corectarea erorilor\\" + dictionaryInputFileName);
final private static File textInputFile = new File(
"D:\\Univer\\Anul 2\\Semestrul 2\\Analiza statistica a datelor\\laboratoare\\lab 3
corectarea erorilor\\" + textInputFileName
);

// Driver method
public static void main(String[] args) throws IOException {
Set<String> dictionary = new HashSet<>(readFromFileAsList(dictionaryInputFile));
String textToCorrect = readFromFileAsString(textInputFile);

writeDictionaryToFile(new File(dictionaryOutputFileName), dictionary);


writeTextToFile(new File(textOutputFileName), spellCorrector(textToCorrect));
}

// Correct spelling errors in a file


private static String spellCorrector(String toCorrect) {
return toCorrect.replaceAll(Pattern.compile("#").toString(), " ");
}

// Read all contents from file and return a String


private static String readFromFileAsString(final File file) throws IOException {
return new String(
Files.readAllBytes(Paths.get(file.getAbsolutePath())),
StandardCharsets.UTF_8
);
}

// Read all contents from file and return as a list of words


private static ArrayList<String> readFromFileAsList(final File file) throws IOException {
String data = new String(
Files.readAllBytes(Paths.get(file.getAbsolutePath())),
StandardCharsets.UTF_8
);
return new ArrayList<>(Arrays.asList(data.split("\\P{L}+")));
}

// Writes a given set to an output file


private static void writeDictionaryToFile(final File file, final Set<String> data) throws
IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(file.getAbsolutePath()));

writer.write("Dictionarul de cuvinte:\n");
for (String word : data) {
writer.write(word + "\n");
}
writer.close();
}

// Write all contents of a string to a file


private static void writeTextToFile(final File file, final String text) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(file.getAbsolutePath()));
writer.write(text);
writer.close();
}

Execuția:

Textul până la corectare:


Textul după corectare:
Concluzii:

În această lucrare de laborator noi am învățat ce reprezintă corectarea erorilor într-un text.
Conform sarcinei am avut de creat o aplicație care corectează erorile într-un text. Aplicația am
realizat-o în limbajul de programare Java. Pentru început, am citit tot textul propus din fișier în
codarea UTF8 (deoarece textul conține simboluri diacritice). Pentru a crea dicționarul de cuvinte
corecte, am împărțit textul citit pe cuvinte cu ajutorul expresiei Regex: \P{L}+, care poate lucre
cu orice character din orice limbă. Apoi, am creat un arbore binar din aceste cuvinte pentru ca să
nu să se repete, după care l-am înscris intr-un fișier. Pentru a corecta erorile din text, deasemenea
am folosit Regex, care înlocuiește toate aparițiile caracterului # cu spațiu.