Advertisement
Guest User

Spellchecker

a guest
Dec 9th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.89 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.io.PrintWriter;
  9. import java.util.ArrayList;
  10.  
  11. public class SpellcheckerSuggestion {
  12.    
  13.     private static BufferedReader buf;
  14.  
  15.     public static void main(String[] args) throws Exception {
  16.         String fileName = "dictionary.txt";
  17.         String line = null;
  18.         ArrayList<String> wordsList = new ArrayList<String>();
  19.         try {
  20.             FileReader fileReader = new FileReader(fileName);
  21.             BufferedReader bufferedReader = new BufferedReader(fileReader);
  22.             while((line = bufferedReader.readLine()) != null) {
  23.                 wordsList.add(line);
  24.             }
  25.             fileName = "replacementWords.txt";
  26.             line = null;
  27.             fileReader = new FileReader(fileName);
  28.             bufferedReader = new BufferedReader(fileReader);
  29.             while((line = bufferedReader.readLine()) != null) {
  30.                 wordsList.add(line);
  31.             }
  32.             try {
  33.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  34.                 while (true) {
  35.                     System.out.println("");
  36.                     System.out.println("Put the word that you want to check : ");
  37.                     String str = br.readLine();
  38.                     str = str.toLowerCase();
  39.                     if (wordsList.contains(str)) {
  40.                         System.out.println("'" + str + "'" + " is in your list");
  41.                     }
  42.                     else {
  43.                         System.out.println("'" + str + "'" + " isn't in your list");
  44.                         BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
  45.                         boolean good = false;
  46.                         while (!good) {
  47.                             ArrayList<Integer> LevenshteinDistanceList = new ArrayList<Integer>();
  48.                             ArrayList<String> NearbyWords = new ArrayList<String>();
  49.                             ArrayList<String> TempoList = new ArrayList<String>();
  50.                             TempoList = wordsList;
  51.                             for (int i = 0; i < TempoList.size(); i++) {
  52.                                 LevenshteinDistanceList.add(LevenshteinDistance(str, TempoList.get(i)));
  53.                             }
  54.                             for (int x = 0; x < 8;) {
  55.                                 int bestDistance = LevenshteinDistanceList.get(0);
  56.                                 int index = 0;
  57.                                 for (int i = 0; i < LevenshteinDistanceList.size(); i++) {
  58.                                     if (bestDistance > LevenshteinDistanceList.get(i)) {
  59.                                         bestDistance = LevenshteinDistanceList.get(i);
  60.                                         index = i;
  61.                                     }
  62.                                 }
  63.                                 NearbyWords.add(TempoList.get(index));
  64.                                 TempoList.remove(index);
  65.                                 LevenshteinDistanceList.remove(index);
  66.                                 x++;
  67.                             }
  68.                             System.out.print("List of similar words : ");
  69.                             for (int i = 0; i < NearbyWords.size(); i++) {
  70.                                 System.out.print("'" + NearbyWords.get(i) + "' ");
  71.                             }
  72.                             good = true;
  73.                             System.out.println("");
  74.                             System.out.println("If you want to  add '" + str + "' to the list, write 'add', or you can put a similar word");
  75.                            
  76.                             String answer = br2.readLine();
  77.                             if (answer.equals("add")) {
  78.                                 System.out.println("The word '" + str + "' was added to the list");
  79.                                 FileWriter fw = new FileWriter(fileName, true);
  80.                                 BufferedWriter br3 = new BufferedWriter(fw);
  81.                                 PrintWriter pr = new PrintWriter(br3);
  82.                                 pr.println(str);
  83.                                 wordsList.add(str);
  84.                                 pr.close();
  85.                                 br3.close();
  86.                                 fw.close();
  87.                                 System.out.println("");
  88.                                 good = true;
  89.                             }
  90.                             if (NearbyWords.contains(answer)){
  91.                                 System.out.println("You choosed '" + answer + "'");
  92.                             }
  93.                             if (!answer.equals("add") && !NearbyWords.contains(answer)) {
  94.                                 System.out.println("That's not a correct answer");
  95.                             }
  96.                         }
  97.                     }
  98.                 }
  99.             }
  100.             catch (IOException e) {
  101.                 e.printStackTrace();
  102.             }
  103.             bufferedReader.close();        
  104.         }
  105.         catch(FileNotFoundException ex) {
  106.             System.out.println(
  107.                 "Unable to open file '" +
  108.                 fileName + "'");                
  109.         }
  110.         catch(IOException ex) {
  111.             System.out.println("Error reading file '" + fileName + "'");                  
  112.         }
  113.     }
  114.    
  115.     public static int LevenshteinDistance(String str, String wordInTheList) {
  116.         str = str.toLowerCase();
  117.         wordInTheList = wordInTheList.toLowerCase();
  118.         int [] costs = new int [wordInTheList.length() + 1];
  119.         for (int j = 0; j < costs.length; j++)
  120.             costs[j] = j;
  121.         for (int i = 1; i <= str.length(); i++) {
  122.             costs[0] = i;
  123.             int nw = i - 1;
  124.             for (int j = 1; j <= wordInTheList.length(); j++) {
  125.                 int cj = Math.min(1 + Math.min(costs[j], costs[j - 1]), str.charAt(i - 1) == wordInTheList.charAt(j - 1) ? nw : nw + 1);
  126.                 nw = costs[j];
  127.                 costs[j] = cj;
  128.             }
  129.         }
  130.         return costs[wordInTheList.length()];
  131.     }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement