diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java index ad12983ff..8834d83ae 100644 --- a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java +++ b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java @@ -8,6 +8,7 @@ import android.util.Log; import org.grammaticalframework.pgf.Concr; import org.grammaticalframework.pgf.Expr; +import org.grammaticalframework.pgf.FullFormEntry; import org.grammaticalframework.pgf.MorphoAnalysis; import org.grammaticalframework.pgf.PGF; import org.grammaticalframework.pgf.ParseError; @@ -16,10 +17,13 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.PriorityQueue; public class Translator { @@ -297,6 +301,41 @@ public class Translator { return getSourceConcr().lookupMorpho(sentence); } + private static class WordProb implements Comparable { + String word; + double prob; + + @Override + public int compareTo(WordProb another) { + return Double.compare(prob, another.prob); + } + } + + public List lookupWordPrefix(String prefix) { + PriorityQueue queue = new PriorityQueue(); + for (FullFormEntry entry : getSourceConcr().lookupWordPrefix(prefix)) { + WordProb wp = new WordProb(); + wp.word = entry.getForm(); + wp.prob = 0; + + for (MorphoAnalysis an : entry.getAnalyses()) { + wp.prob += an.getProb(); + } + + queue.add(wp); + if (queue.size() >= 1000) + break; + } + + List list = new ArrayList(); + while (list.size() < 5 && queue.size() > 0) { + list.add(queue.poll().word); + } + Collections.sort(list); + + return list; + } + private PGF getGrammar() { try { mGrammarLoader.join(); diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/TranslatorInputMethodService.java b/src/ui/android/src/org/grammaticalframework/ui/android/TranslatorInputMethodService.java index 487fb2e13..d88215008 100644 --- a/src/ui/android/src/org/grammaticalframework/ui/android/TranslatorInputMethodService.java +++ b/src/ui/android/src/org/grammaticalframework/ui/android/TranslatorInputMethodService.java @@ -439,10 +439,9 @@ public class TranslatorInputMethodService extends InputMethodService private void updateCandidates() { if (!mCompletionOn) { if (mComposing.length() > 0) { - ArrayList list = new ArrayList(); - list.add(mComposing.toString()); - list.add("alfa"); - list.add("beta"); + List list = + mTranslator.lookupWordPrefix(mComposing.toString()); + list.add(0, mComposing.toString()); setSuggestions(list, true, true); Log.d("KEYBOARD", mComposing.toString()); } else {