aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorJean Chalard <jchalard@google.com>2014-11-21 18:56:55 +0900
committerJean Chalard <jchalard@google.com>2014-11-26 17:29:59 +0900
commite752aab70dc15c993a65d7db8314a72bb9e0f8b2 (patch)
treedb0d4e46b4a0e9200c546e34c64148736720ad8b /java
parent20da4f07be9cdf58835a79e619785b4cafd428ff (diff)
downloadlatinime-e752aab70dc15c993a65d7db8314a72bb9e0f8b2.tar.gz
latinime-e752aab70dc15c993a65d7db8314a72bb9e0f8b2.tar.xz
latinime-e752aab70dc15c993a65d7db8314a72bb9e0f8b2.zip
Use confidence to fix whitelist
With this the most obvious problem is fixed. However there are two remaining items : we should still enforce whitelist when there are no close candidates at all, and we should start in confident mode when pressing the globe key. Bug: 18063142 Bug: 18130489 Bug: 18132240 Bug: 18136721 Bug: 18200415 Change-Id: Ibc0571ae35fc28f8d13760aa86b25db1163d3e31
Diffstat (limited to 'java')
-rw-r--r--java/src/com/android/inputmethod/latin/DictionaryFacilitator.java14
-rw-r--r--java/src/com/android/inputmethod/latin/Suggest.java19
2 files changed, 29 insertions, 4 deletions
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
index 2ee4068b6..f2d7a8c3c 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
@@ -63,6 +63,9 @@ public class DictionaryFacilitator {
// HACK: This threshold is being used when adding a capitalized entry in the User History
// dictionary.
private static final int CAPITALIZED_FORM_MAX_PROBABILITY_FOR_INSERT = 140;
+ // How many words we need to type in a row ({@see mConfidenceInMostProbableLanguage}) to
+ // declare we are confident the user is typing in the most probable language.
+ private static final int CONFIDENCE_THRESHOLD = 3;
private DictionaryGroup[] mDictionaryGroups = new DictionaryGroup[] { new DictionaryGroup() };
private DictionaryGroup mMostProbableDictionaryGroup = mDictionaryGroups[0];
@@ -293,6 +296,14 @@ public class DictionaryFacilitator {
}
}
+ public boolean isConfidentAboutCurrentLanguageBeing(final Locale mLocale) {
+ final DictionaryGroup mostProbableDictionaryGroup = mMostProbableDictionaryGroup;
+ if (!mostProbableDictionaryGroup.mLocale.equals(mLocale)) {
+ return false;
+ }
+ return mostProbableDictionaryGroup.mConfidence >= CONFIDENCE_THRESHOLD;
+ }
+
@Nullable
private static ExpandableBinaryDictionary getSubDict(final String dictType,
final Context context, final Locale locale, final File dictFile,
@@ -634,7 +645,8 @@ public class DictionaryFacilitator {
final int timeStampInSeconds, final boolean blockPotentiallyOffensive) {
final ExpandableBinaryDictionary userHistoryDictionary =
dictionaryGroup.getSubDict(Dictionary.TYPE_USER_HISTORY);
- if (userHistoryDictionary == null) {
+ if (userHistoryDictionary == null
+ || !isConfidentAboutCurrentLanguageBeing(userHistoryDictionary.mLocale)) {
return;
}
final int maxFreq = getFrequency(word);
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 2d0ec42a6..93a21043c 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -32,6 +32,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
+import javax.annotation.Nonnull;
import javax.annotation.Nullable;
/**
@@ -117,7 +118,8 @@ public final class Suggest {
return suggestionsContainer;
}
- private static String getWhitelistedWordOrNull(final ArrayList<SuggestedWordInfo> suggestions) {
+ private static SuggestedWordInfo getWhitelistedWordInfoOrNull(
+ @Nonnull final ArrayList<SuggestedWordInfo> suggestions) {
if (suggestions.isEmpty()) {
return null;
}
@@ -125,7 +127,7 @@ public final class Suggest {
if (!firstSuggestedWordInfo.isKindOf(SuggestedWordInfo.KIND_WHITELIST)) {
return null;
}
- return firstSuggestedWordInfo.mWord;
+ return firstSuggestedWordInfo;
}
// Retrieves suggestions for non-batch input (typing, recorrection, predictions...)
@@ -156,7 +158,18 @@ public final class Suggest {
SuggestedWordInfo.removeDupsAndReturnSourceOfTypedWord(wordComposer.getTypedWord(),
mostProbableLocale /* preferredLocale */, suggestionsContainer);
- final String whitelistedWord = getWhitelistedWordOrNull(suggestionsContainer);
+ final SuggestedWordInfo whitelistedWordInfo =
+ getWhitelistedWordInfoOrNull(suggestionsContainer);
+ final String whitelistedWord;
+ if (null != whitelistedWordInfo &&
+ mDictionaryFacilitator.isConfidentAboutCurrentLanguageBeing(
+ whitelistedWordInfo.mSourceDict.mLocale)) {
+ whitelistedWord = whitelistedWordInfo.mWord;
+ } else {
+ // Even if we have a whitelist candidate, we don't use it unless we are confident
+ // the user is typing in the language this whitelist candidate comes from.
+ whitelistedWord = null;
+ }
final boolean resultsArePredictions = !wordComposer.isComposingWord();
// We allow auto-correction if we have a whitelisted word, or if the word had more than