diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2014-03-07 21:30:54 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2014-03-07 21:30:54 +0000 |
| commit | 178d06d5a2d814b180388d88c61e998a4d46f1e8 (patch) | |
| tree | 931e6cadde7557df449f737cc1a5f58b4bfd6024 /src/ui/android | |
| parent | 2132eb6beddc838470e454a63248b3ad652a230d (diff) | |
added word completion in the Android UI
Diffstat (limited to 'src/ui/android')
| -rw-r--r-- | src/ui/android/src/org/grammaticalframework/ui/android/Translator.java | 39 | ||||
| -rw-r--r-- | src/ui/android/src/org/grammaticalframework/ui/android/TranslatorInputMethodService.java | 7 |
2 files changed, 42 insertions, 4 deletions
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<WordProb> { + String word; + double prob; + + @Override + public int compareTo(WordProb another) { + return Double.compare(prob, another.prob); + } + } + + public List<String> lookupWordPrefix(String prefix) { + PriorityQueue<WordProb> queue = new PriorityQueue<WordProb>(); + 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<String> list = new ArrayList<String>(); + 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<String> list = new ArrayList<String>(); - list.add(mComposing.toString()); - list.add("alfa"); - list.add("beta"); + List<String> list = + mTranslator.lookupWordPrefix(mComposing.toString()); + list.add(0, mComposing.toString()); setSuggestions(list, true, true); Log.d("KEYBOARD", mComposing.toString()); } else { |
