// Copyright 2013 Thomas Müller // This file is part of MarMoT, which is licensed under GPLv3. package marmot.core; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import marmot.util.SymbolTable; public abstract class Model implements Serializable { private static final long serialVersionUID = 1L; public static final String BORDER_SYMBOL_ = "<STOP>"; public static final String EMPTY_SYMBOL_ = "<EMPTY>"; private Options options_; private List<SymbolTable<String>> tag_tables_; private SymbolTable<String> catgegory_table_; private int order_; private int boundary_index_; public State getBoundaryState(int level) { State state = new State(boundary_index_); for (int clevel = 0; clevel < level; clevel++) { state = new State(boundary_index_, state); } return state; } public void init(Options options, SymbolTable<String> category_tables) { options_ = options; order_ = options.getOrder(); catgegory_table_ = category_tables; tag_tables_ = new ArrayList<SymbolTable<String>>( catgegory_table_.size()); for (int index = 0; index < catgegory_table_.size(); index++) { SymbolTable<String> tag_table = new SymbolTable<String>(true); tag_table.toIndex(BORDER_SYMBOL_, true); tag_tables_.add(tag_table); } boundary_index_ = 0; } public int getBoundaryIndex() { return boundary_index_; } public List<SymbolTable<String>> getTagTables() { return tag_tables_; } public int getOrder() { return order_; } public Options getOptions() { return options_; } public SymbolTable<String> getCategoryTable() { return catgegory_table_; } abstract public int[] getTagCandidates(Sequence sequence, int index, State state); public abstract void setLemmaCandidates(Token token, State state, boolean pre_pruning_ext, boolean training); public abstract void setLemmaCandidates(State state, boolean pre_pruning_ext); public abstract boolean getMarganlizeLemmas(); }