У меня проблема с созданием приложения для проверки орфографии.Я пытаюсь использовать алгоритмы 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
Я ищу способ дать подсказки о том, как правильно написать кота