summaryrefslogtreecommitdiff
path: root/src/ui/android
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2014-03-07 21:30:54 +0000
committerkr.angelov <kr.angelov@gmail.com>2014-03-07 21:30:54 +0000
commit178d06d5a2d814b180388d88c61e998a4d46f1e8 (patch)
tree931e6cadde7557df449f737cc1a5f58b4bfd6024 /src/ui/android
parent2132eb6beddc838470e454a63248b3ad652a230d (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.java39
-rw-r--r--src/ui/android/src/org/grammaticalframework/ui/android/TranslatorInputMethodService.java7
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 {