Commit d13f6145 authored by Moises Bensadon's avatar Moises Bensadon
Browse files

added callbacks instead of string builder to corrector in gui

parent 8a164729
Loading
Loading
Loading
Loading
+17 −42
Original line number Diff line number Diff line
@@ -9,9 +9,17 @@ import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;

import javax.swing.text.*;

import scala.collection.mutable.StringBuilder;

import java.awt.Color;
import java.awt.BorderLayout;
import java.util.zip.Deflater;
@@ -259,42 +267,6 @@ 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());

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

    private void runCorrector(String input, boolean isFile) {
        try {
            String content;
@@ -303,28 +275,31 @@ public class MainApp extends JFrame {
            else
                content = input;
            Corrector corrector = new Corrector(languageFile);
            Consumer<String> outputCallback = output -> {
                resultArea.append(output);
                resultArea.setCaretPosition(resultArea.getDocument().getLength());
            };
            corrector.setCallback(outputCallback);
            String[] sentences = TextProcessor.extractSentences(content).toArray(new String[0]);
            progressBar.setValue(0);
            progressBar.setStringPainted(true);
            progressBar.setString(null);
            progressBar.setMaximum(sentences.length*2);

            StringBuilder result = new StringBuilder();
            for (String sentence : sentences) {
                progressBar.setValue(progressBar.getValue() + 1);
                sentence = sentence.replaceAll("[^a-zA-Z0-9\\s]", "");
                String[] corrected = corrector.correct(sentence);
                progressBar.setValue(progressBar.getValue() + 2);
                if (corrected.length == 0) {
                    result.append(sentence + " | No corrections found for this sentence.\n\n");
                    outputCallback.accept(sentence + " | No corrections found for this sentence.\n\n");
                    continue;
                }
                result.append(sentence + " | Corrected Sentence Suggestions:\n");
                printSentencesInOrderOfChanges(corrected, sentence, result);
                result.append("\n");
                outputCallback.accept(sentence + " | Corrected Sentence Suggestions:\n");
                corrector.printSentencesInOrderOfChanges(corrected, sentence);
            }

            resultArea.setText(result.toString());
            // resultArea.setText(result.toString());
            // ISSUE #30 - Feedback for corrector
            // Add a pop up to input the best correction for each sentence
            TrieNode node = corrector.getDetector();