private LinkedList<String> extractKeywords(String filename)
    {
        LinkedList<String> keywords = new LinkedList<String>();
        
        //remove file extension
        int posOfDot = filename.lastIndexOf('.');
        if (posOfDot != -1)
        {
            keywords.add(filename.substring(posOfDot));
            filename = filename.substring(0,posOfDot);
        }
        
        //replace all digits with a space 
        //(Used to remove all digits but keep seperation created by the digits)
        //hello5world -> 'hello', 'world' as opposed to 'helloworld'
        filename = filename.replaceAll("[0-9]+", " ").trim();
        
        //this splits the filename at camelCase or by deliminators (-,_,., )
        //Example: helloWorld-And the_Universe -> hello, World, And, the, Universe
        String[] splitCamelAndDelim = filename.split("((?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])|[ |.|_|\\-|\\(|\\)])");//split across camelCase
        
        keywords.addAll(Arrays.asList(splitCamelAndDelim));
                
        for (Iterator<String> iter = keywords.iterator(); iter.hasNext();)
        {
            //removes empty or digits only (up to 3 long)
            //if (iter.next().trim().matches("^\\d{0,3}$"))
            //    iter.remove();
            
            //remove keywords of less than length 4 or length 3 in CAPS
            String item = iter.next().trim();
            if (item.length() < 4 && !(item.length() == 3 && item.equals(item.toUpperCase())))
                iter.remove();
        }
        
        return keywords;
    }