diff options
author | 2009-06-04 12:20:45 -0700 | |
---|---|---|
committer | 2009-08-13 17:16:39 -0700 | |
commit | c3df2d6fd27f3a5b84040b59aece3367769f0cb6 (patch) | |
tree | c87b274ee2ca1b19fd02e8b1ca4db89276b4b022 /src/com/android/inputmethod/latin/BinaryDictionary.java | |
parent | 5a323e65d06575ccf948a868d18578d8d749e738 (diff) | |
download | latinime-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.java | 26 |
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); |