// Path: src/main/java/com/davidehrmann/classifier4J/bayesian/WordsDataSourceException.java
// public class WordsDataSourceException extends ClassifierException {
// 
//     /**
// 	 * 
// 	 */
// 	private static final long serialVersionUID = 8194847102295629454L;
// 
// 	public WordsDataSourceException(String message) {
//         super(message);
//     }
// 
//     public WordsDataSourceException(String message, Throwable throwable) {
//         super(message, throwable);
//     }
// }


import com.davidehrmann.classifier4j.bayesian.WordsDataSourceException;

package com.davidehrmann.classifier4j;



public abstract class AbstractCategorizedTrainableClassifier<C,I> extends AbstractClassifier<I> implements ITrainableClassifier<C,I> {

    /**
     * @see IClassifier#classify(java.lang.String)
     */
	
	protected final C defaultCategory;
	
	public AbstractCategorizedTrainableClassifier() {
		this(null);
	}
	
	public AbstractCategorizedTrainableClassifier(C defaultCategory) {
		this.defaultCategory = defaultCategory;
	}
	

// Path: src/main/java/com/davidehrmann/classifier4J/bayesian/WordsDataSourceException.java
// public class WordsDataSourceException extends ClassifierException {
// 
//     /**
// 	 * 
// 	 */
// 	private static final long serialVersionUID = 8194847102295629454L;
// 
// 	public WordsDataSourceException(String message) {
//         super(message);
//     }
// 
//     public WordsDataSourceException(String message, Throwable throwable) {
//         super(message, throwable);
//     }
// }


// Path: src/main/java/com/davidehrmann/classifier4J/AbstractCategorizedTrainableClassifier.java
import com.davidehrmann.classifier4j.bayesian.WordsDataSourceException;

package com.davidehrmann.classifier4j;



public abstract class AbstractCategorizedTrainableClassifier<C,I> extends AbstractClassifier<I> implements ITrainableClassifier<C,I> {

    /**
     * @see IClassifier#classify(java.lang.String)
     */
	
	protected final C defaultCategory;
	
	public AbstractCategorizedTrainableClassifier() {
		this(null);
	}
	
	public AbstractCategorizedTrainableClassifier(C defaultCategory) {
		this.defaultCategory = defaultCategory;
	}
	

    public double classify(I input) throws WordsDataSourceException, ClassifierException {
