packages feed

gf-3.6: src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java

package org.grammaticalframework.pgf;

import java.util.Collections;
import java.util.Iterator;

public class NercLiteralCallback implements LiteralCallback {
	private PGF pgf;
	private Concr concr;

	public NercLiteralCallback(PGF pgf, Concr concr) {
		this.pgf   = pgf;
		this.concr = concr;
	}

	public CallbackResult match(int lin_idx, String sentence, int offset) {
		StringBuilder sbuilder = new StringBuilder();

		int i = 0;
		int end_offset = offset;
		while (offset < sentence.length() &&
			   Character.isUpperCase(sentence.charAt(offset))) {
			if (i > 0)
				sbuilder.append(' ');
			i++;

			while (offset < sentence.length() &&
			       !Character.isWhitespace(sentence.charAt(offset))) {
				sbuilder.append(sentence.charAt(offset));
				offset++;
			}

			end_offset = offset;
			while (offset < sentence.length() &&
			       Character.isWhitespace(sentence.charAt(offset))) {
				offset++;
			}
		}

		if (i > 0) {
			String name = sbuilder.toString();
			String lemma = null;
			double prob = 0;
			for (MorphoAnalysis an : concr.lookupMorpho(name)) {
				if ("PN".equals(pgf.getFunctionType(an.getLemma()).getCategory()) &&
					prob < an.getProb()) {
					lemma = an.getLemma();
					prob  = an.getProb();
				}
			}

			Expr expr;
			if (lemma == null) {
				expr = new Expr(name);
				expr = new Expr("MkSymb", expr);
				expr = new Expr("SymbPN", expr);
			} else {
				expr = new Expr(lemma, new Expr[0]);
			}

			return new CallbackResult(new ExprProb(expr, 0), end_offset);
		}

		return null;
	}
	
	public Iterator<TokenProb> predict(int lin_idx, String prefix) {
		return Collections.<TokenProb>emptyList().iterator();
	}
}