Merge "Adjust the used frequency of the user dictionary words."

This commit is contained in:
Jean Chalard 2013-01-07 22:00:32 -08:00 committed by Android (Google) Code Review
commit 26f2e453a7

View File

@ -31,14 +31,15 @@ import android.text.TextUtils;
import java.util.Arrays; import java.util.Arrays;
/** /**
* An expandable dictionary that stores the words in the user unigram dictionary. * An expandable dictionary that stores the words in the user dictionary provider into a binary
* * dictionary file to use it from native code.
* Largely a copy of UserDictionary, will replace that class in the future.
*/ */
public class UserBinaryDictionary extends ExpandableBinaryDictionary { public class UserBinaryDictionary extends ExpandableBinaryDictionary {
// The user dictionary provider uses an empty string to mean "all languages". // The user dictionary provider uses an empty string to mean "all languages".
private static final String USER_DICTIONARY_ALL_LANGUAGES = ""; private static final String USER_DICTIONARY_ALL_LANGUAGES = "";
private static final int HISTORICAL_DEFAULT_USER_DICTIONARY_FREQUENCY = 250;
private static final int LATINIME_DEFAULT_USER_DICTIONARY_FREQUENCY = 160;
// TODO: use Words.SHORTCUT when we target JellyBean or above // TODO: use Words.SHORTCUT when we target JellyBean or above
final static String SHORTCUT = "shortcut"; final static String SHORTCUT = "shortcut";
@ -233,6 +234,19 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
mContext.startActivity(intent); mContext.startActivity(intent);
} }
private int scaleFrequencyFromDefaultToLatinIme(final int defaultFrequency) {
// The default frequency for the user dictionary is 250 for historical reasons.
// Latin IME considers a good value for the default user dictionary frequency
// is about 160 considering the scale we use. So we are scaling down the values.
if (defaultFrequency > Integer.MAX_VALUE / LATINIME_DEFAULT_USER_DICTIONARY_FREQUENCY) {
return (defaultFrequency / HISTORICAL_DEFAULT_USER_DICTIONARY_FREQUENCY)
* LATINIME_DEFAULT_USER_DICTIONARY_FREQUENCY;
} else {
return (defaultFrequency * LATINIME_DEFAULT_USER_DICTIONARY_FREQUENCY)
/ HISTORICAL_DEFAULT_USER_DICTIONARY_FREQUENCY;
}
}
private void addWords(final Cursor cursor) { private void addWords(final Cursor cursor) {
final boolean hasShortcutColumn = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; final boolean hasShortcutColumn = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
clearFusionDictionary(); clearFusionDictionary();
@ -245,12 +259,13 @@ public class UserBinaryDictionary extends ExpandableBinaryDictionary {
final String word = cursor.getString(indexWord); final String word = cursor.getString(indexWord);
final String shortcut = hasShortcutColumn ? cursor.getString(indexShortcut) : null; final String shortcut = hasShortcutColumn ? cursor.getString(indexShortcut) : null;
final int frequency = cursor.getInt(indexFrequency); final int frequency = cursor.getInt(indexFrequency);
final int adjustedFrequency = scaleFrequencyFromDefaultToLatinIme(frequency);
// Safeguard against adding really long words. // Safeguard against adding really long words.
if (word.length() < MAX_WORD_LENGTH) { if (word.length() < MAX_WORD_LENGTH) {
super.addWord(word, null, frequency); super.addWord(word, null, adjustedFrequency);
} }
if (null != shortcut && shortcut.length() < MAX_WORD_LENGTH) { if (null != shortcut && shortcut.length() < MAX_WORD_LENGTH) {
super.addWord(shortcut, word, frequency); super.addWord(shortcut, word, adjustedFrequency);
} }
cursor.moveToNext(); cursor.moveToNext();
} }