Commit 0fdb3aac authored by Manuel  Segimon's avatar Manuel Segimon
Browse files

Merge branch '18-fix-corrector-in-gui' into 'master'

Refactor Corrector class to improve sentence sorting and remove unused imports

Closes #18

See merge request ec504/ec504_projects/group7!10
parents 3c7a69e1 86c24220
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -93,11 +93,11 @@ public class Corrector {
        // Convert to array of just sentences
        String[] topSentences = new String[topPairs.length];
        for (int i = 0; i < topPairs.length; i++) {
            // Remove sentence that are not in the 0.1 percentile of the best sentence
            // Remove sentence that are not in the 0.5 percentile of the best sentence
            if (topPairs[i].score > topPairs[0].score * 1.5) {
                topSentences[i] = "";
            } else {
                topSentences[i] = topPairs[i].sentence;
                topSentences[i] = topPairs[i].sentence + " | Score: " + topPairs[i].score;
            }
        }

@@ -150,14 +150,16 @@ public class Corrector {

        for (String sentence : sentences) {
            if (sentence == null || sentence.isEmpty())
                continue; // Skip empty sentences (not in the 0.1 percentile of the best sentence)
                continue; // Skip empty sentences (not in the 0.5 percentile of the best sentence)

            String sentencePart = sentence.split(" | Score: ")[0]; // Remove score (if present

            int changes = 0;
            if (sentence.length() != originalSentence.length()) {
                changes = Math.abs(sentence.split(" ").length - originalSentence.split(" ").length) + 1;
            if (sentencePart.length() != originalSentence.length()) {
                changes = Math.abs(sentencePart.split(" ").length - originalSentence.split(" ").length) + 1;
            } else {
                String[] originalWords = originalSentence.split(" ");
                String[] correctedWords = sentence.split(" ");
                String[] correctedWords = sentencePart.split(" ");
                for (int i = 0; i < originalWords.length; i++) {
                    if (!originalWords[i].equals(correctedWords[i])) {
                        changes++;
+49 −2
Original line number Diff line number Diff line
@@ -15,12 +15,16 @@ import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;



public class MainApp extends JFrame {
    private final JTextField urlField;
    private JTextArea resultArea;
@@ -216,6 +220,40 @@ public class MainApp extends JFrame {
        }
    }

    private void printSentencesInOrderOfChanges(String[] sentences, String originalSentence, StringBuilder result) {
        // Order the sentences by the number of changes needed
        Map<String, Integer> changesMap = new HashMap<>();

        for (String sentence : sentences) {
            if (sentence == null || sentence.isEmpty())
                continue; // Skip empty sentences (not in the 0.5 percentile of the best sentence)

            String sentencePart = sentence.split(" | Score: ")[0]; // Remove score (if present

            int changes = 0;
            if (sentencePart.length() != originalSentence.length()) {
                changes = Math.abs(sentencePart.split(" ").length - originalSentence.split(" ").length) + 1;
            } else {
                String[] originalWords = originalSentence.split(" ");
                String[] correctedWords = sentencePart.split(" ");
                for (int i = 0; i < originalWords.length; i++) {
                    if (!originalWords[i].equals(correctedWords[i])) {
                        changes++;
                    }
                }
            }

            changesMap.put(sentence, changes);
        }

        List<Map.Entry<String, Integer>> sortedList = new ArrayList<>(changesMap.entrySet());
        sortedList.sort(Map.Entry.comparingByValue());

        for (Map.Entry<String, Integer> entry : sortedList) {
            result.append("    " + entry.getKey() + " | Changes: " + entry.getValue() + "\n");
        }
    }

    private void runCorrector(String input, boolean isFile) {
        try {
            String content;
@@ -224,8 +262,17 @@ public class MainApp extends JFrame {
            else
                content = input;
            Corrector corrector = new Corrector();
            String corrected = corrector.correct(content);
            resultArea.setText("Corrected Text:\n" + corrected);
            String[] sentences = TextProcessor.extractSentences(content).toArray(new String[0]);

            StringBuilder result = new StringBuilder();
            for (String sentence : sentences) {
                sentence = sentence.replaceAll("[^a-zA-Z0-9\\s]", "");
                String[] corrected = corrector.correct(sentence);
                result.append(sentence + " | Corrected Sentence Suggestions:\n");
                printSentencesInOrderOfChanges(corrected, sentence, result);
            }

            resultArea.setText(result.toString());
        } catch (Exception e) {
            resultArea.setText("Error: " + e.getMessage());
        }