// Copyright 2014 Thomas Müller
// This file is part of HMMLA, which is licensed under GPLv3.
package hmmla.hmm;
import hmmla.util.Ling;
import java.util.Map;
public class SignatureHmmModel implements HmmModel {
HmmModel hmm_model_;
Map<String, double[]> signature_map_;
Model model_;
public SignatureHmmModel(HmmModel hmm_model,
Map<String, double[]> signature_map, Model model) {
hmm_model_ = hmm_model;
signature_map_ = signature_map;
model_ = model;
}
@Override
public void getTransitions(int i, double[] scores) {
hmm_model_.getTransitions(i, scores);
}
@Override
public double getTransitions(int i, int j) {
return hmm_model_.getTransitions(i, j);
}
@Override
public void getEmissions(String word, double[] scores) {
if (model_.isKnown(word)) {
hmm_model_.getEmissions(word, scores);
return;
}
String signature = Ling.signature(word, model_);
double[] probs = signature_map_.get(signature);
if (probs == null) {
System.err.format("Warning: Unknown signature: %s (%s)\n", signature, word);
hmm_model_.getEmissions(word, scores);
return;
}
System.arraycopy(probs, 0, scores, 0, scores.length);
}
}