added word completion in the Android UI

This commit is contained in:
kr.angelov
2014-03-07 21:30:54 +00:00
parent 2132eb6bed
commit 178d06d5a2
2 changed files with 42 additions and 4 deletions

View File

@@ -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();

View File

@@ -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 {