added caching to be able to quickly generate the inflection table for Finnish

This commit is contained in:
kr.angelov
2013-11-28 22:06:55 +00:00
parent 134f6a200f
commit 4ae1a16a1e

View File

@@ -17,6 +17,7 @@ import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -223,9 +224,10 @@ public class Translator {
if (res == 0) if (res == 0)
return ""; return "";
Map<String,Map<String,String>> cache = new HashMap<String,Map<String,String>>();
String cat = getGrammar().getFunctionType(lemma).getCategory(); String cat = getGrammar().getFunctionType(lemma).getCategory();
Expr expr = Expr.readExpr(lemma);
Map<String,String> lins = targetLang.tabularLinearize(expr);
XmlResourceParser parser = mContext.getResources().getXml(res); XmlResourceParser parser = mContext.getResources().getXml(res);
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.append("<html><head><meta charset=\"UTF-8\"/></head><body>"); builder.append("<html><head><meta charset=\"UTF-8\"/></head><body>");
@@ -282,11 +284,18 @@ public class Translator {
} else if (state == 4 && "form".equals(parser.getName())) { } else if (state == 4 && "form".equals(parser.getName())) {
form = false; form = false;
} else if (state == 4 && lin && "lin".equals(parser.getName())) { } else if (state == 4 && lin && "lin".equals(parser.getName())) {
Expr expr2 = Expr.readExpr(abstrBuilder.toString()); String s = abstrBuilder.toString();
if (formName == null) if (formName == null) {
builder.append(TextUtils.htmlEncode(targetLang.linearize(expr2))); Expr expr = Expr.readExpr(s);
else { builder.append(TextUtils.htmlEncode(targetLang.linearize(expr)));
String elin = targetLang.tabularLinearize(expr2).get(formName); } else {
Map<String,String> elins = cache.get(s);
if (elins == null) {
Expr expr = Expr.readExpr(s);
elins = targetLang.tabularLinearize(expr);
cache.put(s, elins);
}
String elin = elins.get(formName);
builder.append(TextUtils.htmlEncode(elin)); builder.append(TextUtils.htmlEncode(elin));
} }
@@ -302,7 +311,13 @@ public class Translator {
emit = true; emit = true;
} else if (state == 4 && emit) { } else if (state == 4 && emit) {
if (form) { if (form) {
String s = lins.get(parser.getText()); Map<String,String> elins = cache.get(lemma);
if (elins == null) {
Expr expr = Expr.readExpr(lemma);
elins = targetLang.tabularLinearize(expr);
cache.put(lemma, elins);
}
String s = elins.get(parser.getText());
if (s != null) if (s != null)
builder.append(TextUtils.htmlEncode(s)); builder.append(TextUtils.htmlEncode(s));
} else { } else {