This is a program which takes a word as input and gives possible suggestions to correct the spelling of the word, by searching them from the dictionary of words(a text file Dictionary.txt).
// Spell.java
import java.io.*;
import java.util.*;
public class Spell
{
static ArrayList<String> wordsList = new ArrayList<String>();
public static void main(String args[]) throws IOException
{
try {
long build1 = System.currentTimeMillis();
FileInputStream fstream = new FileInputStream("Dictionary.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String ele;
while ((ele = br.readLine()) != null)
wordsList.add(ele);
long build2 = System.currentTimeMillis();
System.out.println("Time to build data structure is:" + (build2 - build1));
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the word :");
String wd = br1.readLine();
possible(wd);
if (!wordsList.contains(wd)) {
System.out.println("Do you want to add word to dictionary [y/n]: ");
if (br1.readLine().equals("y")) {
long add1 = System.currentTimeMillis();
wordsList.add(wd);
try {
FileWriter fstream = new FileWriter("Dictionary.txt", true);
BufferedWriter out = new BufferedWriter(fstream);
out.write("n" + wd);
out.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
long add2 = System.currentTimeMillis();
System.out.println("Time to add word to data structure is:" + (add2 - add1));
}
}
}
public static void possible(String word) {
long find1 = System.currentTimeMillis();
Set<String> result = new HashSet<String>();
// Remove a character
for (int i = 0; i < word.length(); ++i)
result.add(word.substring(0, i) + word.substring(i + 1));
// Swap two consecutive characters
for (int i = 0; i < word.length() - 1; ++i)
result.add(word.substring(0, i) + word.substring(i + 1, i + 2) + word.substring(i, i + 1)
+ word.substring(i + 2));
// Replace a character with other
for (int i = 0; i < word.length(); ++i)
for (char c = 'a'; c <= 'z'; ++c)
result.add(word.substring(0, i) + String.valueOf(c) + word.substring(i + 1));
// Add a new character
for (int i = 0; i <= word.length(); ++i)
for (char c = 'a'; c <= 'z'; ++c)
result.add(word.substring(0, i) + String.valueOf(c) + word.substring(i));
ArrayList<String> res = new ArrayList<String>(result);
int j = 0;
for (int i = 0; i < result.size(); i++)
if (wordsList.contains(res.get(i))) {
if (j == 0)
System.out.print("You could have typed : ");
System.out.print(res.get(i) + " ");
j++;
}
long find2 = System.currentTimeMillis();
System.out.println("nTime to find possibilities is:" + (find2 - find1));
}
}
Comments
Post a Comment