aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/android/inputmethod/latin/BinaryDictionary.java
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2009-06-04 12:20:45 -0700
committerJean-Baptiste Queru <jbq@google.com>2009-08-13 17:16:39 -0700
commitc3df2d6fd27f3a5b84040b59aece3367769f0cb6 (patch)
treec87b274ee2ca1b19fd02e8b1ca4db89276b4b022 /src/com/android/inputmethod/latin/BinaryDictionary.java
parent5a323e65d06575ccf948a868d18578d8d749e738 (diff)
downloadlatinime-c3df2d6fd27f3a5b84040b59aece3367769f0cb6.tar.gz
latinime-c3df2d6fd27f3a5b84040b59aece3367769f0cb6.tar.xz
latinime-c3df2d6fd27f3a5b84040b59aece3367769f0cb6.zip
Correction algorithm to check for missing single characters.
Searches for alternative words by trying wild-card characters at different character positions.
Diffstat (limited to 'src/com/android/inputmethod/latin/BinaryDictionary.java')
-rw-r--r--src/com/android/inputmethod/latin/BinaryDictionary.java26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/com/android/inputmethod/latin/BinaryDictionary.java b/src/com/android/inputmethod/latin/BinaryDictionary.java
index bb4f1ba46..ab66c5b87 100644
--- a/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -32,6 +32,7 @@ public class BinaryDictionary extends Dictionary {
private static final int MAX_WORDS = 16;
private static final int TYPED_LETTER_MULTIPLIER = 2;
+ private static final boolean ENABLE_MISSED_CHARACTERS = true;
private int mNativeDict;
private int[] mInputCodes = new int[MAX_WORD_LENGTH * MAX_ALTERNATIVES];
@@ -64,7 +65,7 @@ public class BinaryDictionary extends Dictionary {
private native boolean isValidWordNative(int nativeData, char[] word, int wordLength);
private native int getSuggestionsNative(int dict, int[] inputCodes, int codesSize,
char[] outputChars, int[] frequencies,
- int maxWordLength, int maxWords, int maxAlternatives);
+ int maxWordLength, int maxWords, int maxAlternatives, int skipPos);
private native void setParamsNative(int typedLetterMultiplier,
int fullWordMultiplier);
@@ -88,9 +89,24 @@ public class BinaryDictionary extends Dictionary {
Math.min(alternatives.length, MAX_ALTERNATIVES));
}
Arrays.fill(mOutputChars, (char) 0);
-
- int count = getSuggestionsNative(mNativeDict, mInputCodes, codesSize, mOutputChars, mFrequencies,
- MAX_WORD_LENGTH, MAX_WORDS, MAX_ALTERNATIVES);
+ Arrays.fill(mFrequencies, 0);
+
+ int count = getSuggestionsNative(mNativeDict, mInputCodes, codesSize,
+ mOutputChars, mFrequencies,
+ MAX_WORD_LENGTH, MAX_WORDS, MAX_ALTERNATIVES, -1);
+
+ // If there aren't sufficient suggestions, search for words by allowing wild cards at
+ // the different character positions. This feature is not ready for prime-time as we need
+ // to figure out the best ranking for such words compared to proximity corrections and
+ // completions.
+ if (ENABLE_MISSED_CHARACTERS && count < 5) {
+ for (int skip = 0; skip < codesSize; skip++) {
+ count = getSuggestionsNative(mNativeDict, mInputCodes, codesSize,
+ mOutputChars, mFrequencies,
+ MAX_WORD_LENGTH, MAX_WORDS, MAX_ALTERNATIVES, skip);
+ if (count > 0) break;
+ }
+ }
for (int j = 0; j < count; j++) {
if (mFrequencies[j] < 1) break;
@@ -111,7 +127,7 @@ public class BinaryDictionary extends Dictionary {
char[] chars = word.toString().toLowerCase().toCharArray();
return isValidWordNative(mNativeDict, chars, chars.length);
}
-
+
public synchronized void close() {
if (mNativeDict != 0) {
closeNative(mNativeDict);