Как заставить мой алгоритм soundEx работать для моего приложения для проверки орфографии - PullRequest
0 голосов
/ 08 февраля 2019

У меня проблема с созданием приложения для проверки орфографии.Я пытаюсь использовать алгоритмы soundEx для работы, когда есть ошибка в правописании.Я хочу, чтобы он выдвигал предположения о том, каким будет написание, когда пользователь ввел ошибку

ниже, это мое приложение для проверки орфографии

public class SpellChecker2 {

  public static void main(String[] args) throws FileNotFoundException
  {
    SoundEx2 phonetics = new SoundEx2();
    Scanner input = new Scanner(System.in);
    System.out.println("Please enter a String"); 
    String userWord = input.nextLine();
    System.out.println();

    final String theDictionary = "dictionary.txt";

    TreeSet<String> words = dictionary(theDictionary);
    if(words.contains(userWord.toLowerCase()))
    {
      System.out.println("The spelling is correct");
    } else {
      System.out.println("Incorrect spelling of " + userWord);  
    }
  }

  public static TreeSet<String> dictionary(String filename) throws FileNotFoundException
  {
    final String fileName = "dictionary.txt";   
    TreeSet<String> theWords = new TreeSet<String>(); 

    try (Scanner dictionary = new Scanner(new File(fileName))) {
      while (dictionary.hasNextLine()) {
        theWords.add(dictionary.nextLine());
      }
    }
    return theWords;
  }
}

Это мои алгоритмы soundEx, которые я пытался реализовать

public class SoundEx2 {

  public String encode(String s) {
    char[] ex = s.toUpperCase().toCharArray();

    char numberOneLetter = ex[0];

    //This is rule 2
    for(int i = 0; i < ex.length; i++) {
      switch(ex[i]) {
        case 'A': {ex[i] = '0'; break;}
        case 'B': {ex[i] = '1'; break;}
        case 'C': {ex[i] = '2'; break;}
        case 'D': {ex[i] = '3'; break;}
        case 'E': {ex[i] = '0'; break;}
        case 'F': {ex[i] = '1'; break;}
        case 'G': {ex[i] = '2'; break;}
        case 'H': {ex[i] = '0'; break;}
        case 'I': {ex[i] = '0'; break;}
        case 'J': {ex[i] = '2'; break;}
        case 'K': {ex[i] = '2'; break;}
        case 'L': {ex[i] = '4'; break;}
        case 'M': {ex[i] = '5'; break;}
        case 'N': {ex[i] = '5'; break;}
        case 'O': {ex[i] = '0'; break;}
        case 'P': {ex[i] = '1'; break;}
        case 'Q': {ex[i] = '2'; break;}
        case 'R': {ex[i] = '6'; break;}
        case 'S': {ex[i] = '2'; break;}
        case 'T': {ex[i] = '3'; break;}
        case 'U': {ex[i] = '0'; break;}
        case 'V': {ex[i] = '1'; break;}
        case 'W': {ex[i] = '0'; break;}
        case 'X': {ex[i] = '2'; break;}
        case 'Y': {ex[i] = '0'; break;}
        case 'Z': {ex[i] = '2'; break;}     
      } 
    }
    //Applying the rules 
    //rule 1
    String output = "" + numberOneLetter;

    //rule 3
    for(int i = 1; i < ex.length; i++) {
      if(ex[i] != ex[i - 1] && ex[i] != '0') {
        output += ex[i];
      }
    }
    //rule 4
    output = output + "0000";
    return output.substring(0, 4);      
  }
}

есть ли способ исправить мою ошибку или найти способ заставить работать алгоритм soundEx.Результат не выходит должным образом.

Результат, который я получаю:

   Please enter a String
   catsss

   Incorrect spelling of catsss

Я ищу способ дать подсказки о том, как правильно написать кота

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...