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

Reverse Engineering : Extract contents from .img file

Unyaffs is a program to extract files from a YAFFS2 file system image. Currently it can only extract images created by mkyaffs2image. Download the source from here . Compiling : Extract the contents into a suitable place and run the following command make Usage : unyaffs [options] <image_file_name> [<extract_directory>] Options: -d detection of flash layout, no extraction -b spare contains bad block information -c <chunk size> set chunk size in KByte (default: autodetect, max: 16) -s <spare size> set spare size in Byte (default: autodetect, max: 512) -t list image contents -v verbose output -V print version Source: Official github repository

Mac Yosemite : Ugly turned out to be Uglier and Ugliest

You might have read my review on Mac OSX Yosemite , The Good, bad and ugly. Now it turned out to be UGLIEST. No more words. Here's the image. If you are on Yosemite, you might be familiar with it. Most of the times, you get stuck on boot logo. I've seen complaints regarding it saying that fellow members are ignorant of it and they deny such possibility, even though many are still facing it. Workarounds suggested by our online friends: Just reboot your mac as many times it takes to your desktop. Boot into safe mode, by holding SHIFT and then reboot. Comment your workaround below, mine is the first one. If you are still on Mavericks, be there till Apple provides a fix for this.

Karabiner: Mouse/keyboard customizer for OS X

For beginners, or the one who migrated from Windows environment, Natural Gestures (Scrolling and Swiping) might be bit confusing. But, once you get familiarized with them, it may feel like "What was I doing, all those days?". It all changed, when I connected external mouse to my Macbook. When you start using that WHEEL, you will be confused. Luckily there is a setting for mouse, to change scroll behavior (natural or the other way). But, here's the catch. If you toggle that setting, it also toggles the same for TRACKPAD!!!!! I've seen that many people were freaked out and even raised BUG report to Apple. But, all those reports were closed, saying that is not a bug, but intentional feature!!! For those, who can't leave with such one-sided settings, here is a simple util, which came to my rescue: Karabiner It's simple, powerful and stable mouse/keyboard customizer for OSX. Without going into much detail, here's the configuration I used to ret...