
com.inet.jortho.DictionaryFactory Maven / Gradle / Ivy
/*
* JOrtho
*
* Copyright (C) 2005-2010 by i-net software
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*
* Created on 15.06.2007
*/
package com.inet.jortho;
import java.io.IOException;
import java.net.URL;
import java.util.Iterator;
/**
* With the DictionaryFactory you can create / load a Dictionary. A Dictionary is list of word with a API for searching.
* The list is saved internal as a tree.
* @see Dictionary
* @author Volker Berlin
*/
class DictionaryFactory {
private final Node root = new Node( (char)0 );
private char[] tree;
private int size;
/**
* Empty Constructor.
*/
public DictionaryFactory(){
/* empty */
}
/**
* Load the directory from a compressed list of words with UTF8 encoding. The words must be delimited with
* newlines. This method can be called multiple times.
*
* @param filename
* the name of the file
* @throws IOException
* If an I/O error occurs.
* @throws NullPointerException
* If filename is null.
*/
public void loadWordList( URL filename ) throws IOException {
loadWords( new WordIterator( filename ) );
}
public void loadWords( Iterator words ) {
while( words.hasNext() ) {
String word = words.next();
if( word != null && word.length() > 1 ) {
add( word );
}
}
}
/**
* Add a word to the tree. If it already exist then it has no effect.
* @param word the new word.
*/
public void add(String word){
Node node = root;
for(int i=0; i tree.length){
char[] puffer = new char[Math.max(newSize, 2*tree.length)];
System.arraycopy(tree, 0, puffer, 0, size);
tree = puffer;
}
}
/**
* A node in the search tree. Every Node can include a list of NodeEnties
*/
private final static class Node extends LowMemoryArrayList{
private final char c;
private boolean isWord;
Node(char c){
this.c = c;
}
Node searchCharOrAdd( char c ) {
for(int i=0; i> 16);
factory.tree[idx++] = (char)(offset);
}
factory.tree[idx] = DictionaryBase.LAST_CHAR;
return start;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy