package hu.ppke.itk.nlpg.purepos.common; import hu.ppke.itk.nlpg.purepos.model.ITagMapper; import hu.ppke.itk.nlpg.purepos.model.IProbabilityModel; import java.util.List; import java.util.Map; public class OneWordLexicalModel implements IProbabilityModel<Integer, String> { protected Map<Integer, Double> probs; protected String word; public OneWordLexicalModel(Map<Integer, Double> probs, String word) { this.probs = probs; this.word = word; } protected ITagMapper<String> elementMapper = null; protected ITagMapper<Integer> contextMapper = null; @Override public void setElementMapper(ITagMapper<String> mapper) { this.elementMapper = mapper; } @Override public void setContextMapper(ITagMapper<Integer> mapper) { this.contextMapper = mapper; } @Override public Double getProb(List<Integer> context, String word) { return Math.exp(getLogProb(context, word)); } @Override public Double getLogProb(List<Integer> context, String word) { if (elementMapper != null) { word = elementMapper.map(word); } if (contextMapper != null) { context = contextMapper.map(context); } Integer tag = context.get(context.size() - 1); if (word.equals(this.word) && probs.containsKey(tag)) { return probs.get(tag); } return Double.NEGATIVE_INFINITY; } @Override public ITagMapper<Integer> getContextMapper() { return contextMapper; } }