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

JavaScript - Singleton Pattern

The singleton design pattern is probably the simplest and most common pattern in JavaScript. So why should you use the singleton pattern? Encapsulation of members & functions Creates its own Namespace A singleton is a single instance object Encourages code reuse Improves readability because you can logically organise your code The point of a singleton is to only have one instance. A shopping cart is a good example of something that you may want only a single instance of at one time. The simplest form of Singleton is an object literal. This loose form of Singleton cannot be instantiated. All of the members are now accessible through the Singleton variable, accessible through dot notation. var myCart = {     self: this ,     totalCost: 0,     totalQty: 0,     cart: {},     getCart: function (){ },     updateCart: function (){ } }; alert( "Total cost: ...

Reverse Engineering : Android Dex files to Class files

In my previous post, we have seen how to extract the contents of img file . After extraction, you will find that most of the files have ".dex" extension. These are Compiled Android application code files. In order to convert them into executable format (.class or .jar), you can use dex2jar tool. Extract it to a proper location and open the terminal to this location. Now run the following command: ./d2j-dex2jar.sh <Path-to-dex_file> It will bundle the dex files into a jar file, and stores it in the current directory. dex2jar can also be used to convert dex files into variuos other formats. For detailed info, click here .