Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.util.ArrayList;
- public class SpellcheckerSuggestion {
- private static BufferedReader buf;
- public static void main(String[] args) throws Exception {
- String fileName = "dictionary.txt";
- String line = null;
- ArrayList<String> wordsList = new ArrayList<String>();
- try {
- FileReader fileReader = new FileReader(fileName);
- BufferedReader bufferedReader = new BufferedReader(fileReader);
- while((line = bufferedReader.readLine()) != null) {
- wordsList.add(line);
- }
- fileName = "replacementWords.txt";
- line = null;
- fileReader = new FileReader(fileName);
- bufferedReader = new BufferedReader(fileReader);
- while((line = bufferedReader.readLine()) != null) {
- wordsList.add(line);
- }
- try {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- while (true) {
- System.out.println("");
- System.out.println("Put the word that you want to check : ");
- String str = br.readLine();
- str = str.toLowerCase();
- if (wordsList.contains(str)) {
- System.out.println("'" + str + "'" + " is in your list");
- }
- else {
- System.out.println("'" + str + "'" + " isn't in your list");
- BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
- boolean good = false;
- while (!good) {
- ArrayList<Integer> LevenshteinDistanceList = new ArrayList<Integer>();
- ArrayList<String> NearbyWords = new ArrayList<String>();
- ArrayList<String> TempoList = new ArrayList<String>();
- TempoList = wordsList;
- for (int i = 0; i < TempoList.size(); i++) {
- LevenshteinDistanceList.add(LevenshteinDistance(str, TempoList.get(i)));
- }
- for (int x = 0; x < 8;) {
- int bestDistance = LevenshteinDistanceList.get(0);
- int index = 0;
- for (int i = 0; i < LevenshteinDistanceList.size(); i++) {
- if (bestDistance > LevenshteinDistanceList.get(i)) {
- bestDistance = LevenshteinDistanceList.get(i);
- index = i;
- }
- }
- NearbyWords.add(TempoList.get(index));
- TempoList.remove(index);
- LevenshteinDistanceList.remove(index);
- x++;
- }
- System.out.print("List of similar words : ");
- for (int i = 0; i < NearbyWords.size(); i++) {
- System.out.print("'" + NearbyWords.get(i) + "' ");
- }
- good = true;
- System.out.println("");
- System.out.println("If you want to add '" + str + "' to the list, write 'add', or you can put a similar word");
- String answer = br2.readLine();
- if (answer.equals("add")) {
- System.out.println("The word '" + str + "' was added to the list");
- FileWriter fw = new FileWriter(fileName, true);
- BufferedWriter br3 = new BufferedWriter(fw);
- PrintWriter pr = new PrintWriter(br3);
- pr.println(str);
- wordsList.add(str);
- pr.close();
- br3.close();
- fw.close();
- System.out.println("");
- good = true;
- }
- if (NearbyWords.contains(answer)){
- System.out.println("You choosed '" + answer + "'");
- }
- if (!answer.equals("add") && !NearbyWords.contains(answer)) {
- System.out.println("That's not a correct answer");
- }
- }
- }
- }
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- bufferedReader.close();
- }
- catch(FileNotFoundException ex) {
- System.out.println(
- "Unable to open file '" +
- fileName + "'");
- }
- catch(IOException ex) {
- System.out.println("Error reading file '" + fileName + "'");
- }
- }
- public static int LevenshteinDistance(String str, String wordInTheList) {
- str = str.toLowerCase();
- wordInTheList = wordInTheList.toLowerCase();
- int [] costs = new int [wordInTheList.length() + 1];
- for (int j = 0; j < costs.length; j++)
- costs[j] = j;
- for (int i = 1; i <= str.length(); i++) {
- costs[0] = i;
- int nw = i - 1;
- for (int j = 1; j <= wordInTheList.length(); j++) {
- int cj = Math.min(1 + Math.min(costs[j], costs[j - 1]), str.charAt(i - 1) == wordInTheList.charAt(j - 1) ? nw : nw + 1);
- nw = costs[j];
- costs[j] = cj;
- }
- }
- return costs[wordInTheList.length()];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement