Skip to main content

Spell Checker




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

Popular posts from this blog

Java: Use BigInteger in for-loop

In my previous post , I mentioned a way to handle large integers by using BigInteger. Now I'm going to provide a very important usage of it. We often use for-loop. So here is the way to use it: Ordinary integers: for(int i = 1; i <= n; i++) {  //Task to do } BigInteger: for (BigInteger bi = BigInteger.valueOf(1);                 bi.compareTo(n) <= 0;                 bi = bi.add(BigInteger.ONE)) { //Task to do } here n is a BigInteger variable.

Anagram search from a file

// All the words are in the file Dictionary.txt import java.io.*; import java.util.*; public class Anag {     static String[] words;     public static void main(String args[]) throws IOException     {         Hashtable<String, List> ht;         try {             FileInputStream fstream = new FileInputStream("Dictionary.txt");             DataInputStream in = new DataInputStream(fstream);             BufferedReader br = new BufferedReader(new InputStreamReader(in));             List<String> lines = new ArrayList<String>();             String ele;             while ((ele = br.readLine...

OS X 10.8 Mountain Lion bootable USB (without MAC)

Download the raw file from here . How to use: 1 - Copy the .raw file to an USB stick using  SUSE Studio Image Writer . If you have error during copy, eject and re-connect the pen drive. When Windows asks if you want to format it, cancel and run Image Writer again. If the problem persists, disable your anti-virus software, it may be blocking raw write to the drive. Another Image Writer for Windows, if SUSE doesn't work https://launchpad.net/win32-image-writer/+download 2 - Boot the USB drive and install. If you need, type  boot options , for example: -v (verbose boot) [default] -x (safe) -s (single user) GraphicsEnabler=yes (enable graphics card drivers) [default] USBBusFix=yes (fix problems with USB devices) npci=0x2000 (use if boot stops at "PCI configuration begin") cpus=1 If you need, use  TransMac  to remove kexts which are causing problems (System/Library/Extensions) and use the flag -f (ignore caches) at boot, or remove /System/Libra...