Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 17511a41 authored by Jean Chalard's avatar Jean Chalard Committed by Android (Google) Code Review
Browse files

Merge "[ML8] Add a language weight"

parents 967cb0f0 6da9b211
Loading
Loading
Loading
Loading
+16 −9
Original line number Diff line number Diff line
@@ -188,7 +188,8 @@ public final class BinaryDictionary extends Dictionary {
            int[][] prevWordCodePointArrays, boolean[] isBeginningOfSentenceArray,
            int prevWordCount, int[] outputSuggestionCount, int[] outputCodePoints,
            int[] outputScores, int[] outputIndices, int[] outputTypes,
            int[] outputAutoCommitFirstWordConfidence, float[] inOutLanguageWeight);
            int[] outputAutoCommitFirstWordConfidence,
            float[] inOutWeightOfLangModelVsSpatialModel);
    private static native boolean addUnigramEntryNative(long dict, int[] word, int probability,
            int[] shortcutTarget, int shortcutProbability, boolean isBeginningOfSentence,
            boolean isNotAWord, boolean isBlacklisted, int timestamp);
@@ -256,7 +257,8 @@ public final class BinaryDictionary extends Dictionary {
    public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
            final SettingsValuesForSuggestion settingsValuesForSuggestion,
            final int sessionId, final float[] inOutLanguageWeight) {
            final int sessionId, final float weightForLocale,
            final float[] inOutWeightOfLangModelVsSpatialModel) {
        if (!isValidDictionary()) {
            return null;
        }
@@ -284,10 +286,12 @@ public final class BinaryDictionary extends Dictionary {
                settingsValuesForSuggestion.mSpaceAwareGestureEnabled);
        session.mNativeSuggestOptions.setAdditionalFeaturesOptions(
                settingsValuesForSuggestion.mAdditionalFeaturesSettingValues);
        if (inOutLanguageWeight != null) {
            session.mInputOutputLanguageWeight[0] = inOutLanguageWeight[0];
        if (inOutWeightOfLangModelVsSpatialModel != null) {
            session.mInputOutputWeightOfLangModelVsSpatialModel[0] =
                    inOutWeightOfLangModelVsSpatialModel[0];
        } else {
            session.mInputOutputLanguageWeight[0] = Dictionary.NOT_A_LANGUAGE_WEIGHT;
            session.mInputOutputWeightOfLangModelVsSpatialModel[0] =
                    Dictionary.NOT_A_WEIGHT_OF_LANG_MODEL_VS_SPATIAL_MODEL;
        }
        // TOOD: Pass multiple previous words information for n-gram.
        getSuggestionsNative(mNativeDict, proximityInfo.getNativeProximityInfo(),
@@ -298,9 +302,11 @@ public final class BinaryDictionary extends Dictionary {
                session.mIsBeginningOfSentenceArray, prevWordsInfo.getPrevWordCount(),
                session.mOutputSuggestionCount, session.mOutputCodePoints, session.mOutputScores,
                session.mSpaceIndices, session.mOutputTypes,
                session.mOutputAutoCommitFirstWordConfidence, session.mInputOutputLanguageWeight);
        if (inOutLanguageWeight != null) {
            inOutLanguageWeight[0] = session.mInputOutputLanguageWeight[0];
                session.mOutputAutoCommitFirstWordConfidence,
                session.mInputOutputWeightOfLangModelVsSpatialModel);
        if (inOutWeightOfLangModelVsSpatialModel != null) {
            inOutWeightOfLangModelVsSpatialModel[0] =
                    session.mInputOutputWeightOfLangModelVsSpatialModel[0];
        }
        final int count = session.mOutputSuggestionCount[0];
        final ArrayList<SuggestedWordInfo> suggestions = new ArrayList<>();
@@ -314,7 +320,8 @@ public final class BinaryDictionary extends Dictionary {
            if (len > 0) {
                suggestions.add(new SuggestedWordInfo(
                        new String(session.mOutputCodePoints, start, len),
                        session.mOutputScores[j], session.mOutputTypes[j], this /* sourceDict */,
                        (int)(session.mOutputScores[j] * weightForLocale), session.mOutputTypes[j],
                        this /* sourceDict */,
                        session.mSpaceIndices[j] /* indexOfTouchPointOfSecondWord */,
                        session.mOutputAutoCommitFirstWordConfidence[0]));
            }
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ public final class DicTraverseSession {
    public final int[] mOutputTypes = new int[MAX_RESULTS];
    // Only one result is ever used
    public final int[] mOutputAutoCommitFirstWordConfidence = new int[1];
    public final float[] mInputOutputLanguageWeight = new float[1];
    public final float[] mInputOutputWeightOfLangModelVsSpatialModel = new float[1];

    public final NativeSuggestOptions mNativeSuggestOptions = new NativeSuggestOptions();

+10 −6
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ import java.util.HashSet;
 */
public abstract class Dictionary {
    public static final int NOT_A_PROBABILITY = -1;
    public static final float NOT_A_LANGUAGE_WEIGHT = -1.0f;
    public static final float NOT_A_WEIGHT_OF_LANG_MODEL_VS_SPATIAL_MODEL = -1.0f;

    // The following types do not actually come from real dictionary instances, so we create
    // corresponding instances.
@@ -88,15 +88,18 @@ public abstract class Dictionary {
     * @param proximityInfo the object for key proximity. May be ignored by some implementations.
     * @param settingsValuesForSuggestion the settings values used for the suggestion.
     * @param sessionId the session id.
     * @param inOutLanguageWeight the language weight used for generating suggestions.
     * inOutLanguageWeight is a float array that has only one element. This can be updated when the
     * different language weight is used.
     * @param weightForLocale the weight given to this locale, to multiply the output scores for
     * multilingual input.
     * @param inOutWeightOfLangModelVsSpatialModel the weight of the language model as a ratio of
     * the spatial model, used for generating suggestions. inOutWeightOfLangModelVsSpatialModel is
     * a float array that has only one element. This can be updated when a different value is used.
     * @return the list of suggestions (possibly null if none)
     */
    abstract public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
            final SettingsValuesForSuggestion settingsValuesForSuggestion,
            final int sessionId, final float[] inOutLanguageWeight);
            final int sessionId, final float weightForLocale,
            final float[] inOutWeightOfLangModelVsSpatialModel);

    /**
     * Checks if the given word has to be treated as a valid word. Please note that some
@@ -190,7 +193,8 @@ public abstract class Dictionary {
        public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
                final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
                final SettingsValuesForSuggestion settingsValuesForSuggestion,
                final int sessionId, final float[] inOutLanguageWeight) {
                final int sessionId, final float weightForLocale,
                final float[] inOutWeightOfLangModelVsSpatialModel) {
            return null;
        }

+4 −3
Original line number Diff line number Diff line
@@ -62,20 +62,21 @@ public final class DictionaryCollection extends Dictionary {
    public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer,
            final PrevWordsInfo prevWordsInfo, final ProximityInfo proximityInfo,
            final SettingsValuesForSuggestion settingsValuesForSuggestion,
            final int sessionId, final float[] inOutLanguageWeight) {
            final int sessionId, final float weightForLocale,
            final float[] inOutWeightOfLangModelVsSpatialModel) {
        final CopyOnWriteArrayList<Dictionary> dictionaries = mDictionaries;
        if (dictionaries.isEmpty()) return null;
        // To avoid creating unnecessary objects, we get the list out of the first
        // dictionary and add the rest to it if not null, hence the get(0)
        ArrayList<SuggestedWordInfo> suggestions = dictionaries.get(0).getSuggestions(composer,
                prevWordsInfo, proximityInfo, settingsValuesForSuggestion, sessionId,
                inOutLanguageWeight);
                weightForLocale, inOutWeightOfLangModelVsSpatialModel);
        if (null == suggestions) suggestions = new ArrayList<>();
        final int length = dictionaries.size();
        for (int i = 1; i < length; ++ i) {
            final ArrayList<SuggestedWordInfo> sugg = dictionaries.get(i).getSuggestions(composer,
                    prevWordsInfo, proximityInfo, settingsValuesForSuggestion, sessionId,
                    inOutLanguageWeight);
                    weightForLocale, inOutWeightOfLangModelVsSpatialModel);
            if (null != sugg) suggestions.addAll(sugg);
        }
        return suggestions;
+5 −2
Original line number Diff line number Diff line
@@ -104,6 +104,7 @@ public class DictionaryFacilitator {
    private static class DictionaryGroup {
        public final Locale mLocale;
        private Dictionary mMainDict;
        public float mWeightForLocale = 1.0f;
        public final ConcurrentHashMap<String, ExpandableBinaryDictionary> mSubDictMap =
                new ConcurrentHashMap<>();

@@ -598,14 +599,16 @@ public class DictionaryFacilitator {
        final SuggestionResults suggestionResults = new SuggestionResults(
                SuggestedWords.MAX_SUGGESTIONS,
                prevWordsInfo.mPrevWordsInfo[0].mIsBeginningOfSentence);
        final float[] languageWeight = new float[] { Dictionary.NOT_A_LANGUAGE_WEIGHT };
        final float[] weightOfLangModelVsSpatialModel =
                new float[] { Dictionary.NOT_A_WEIGHT_OF_LANG_MODEL_VS_SPATIAL_MODEL };
        for (final DictionaryGroup dictionaryGroup : dictionaryGroups) {
            for (final String dictType : DICT_TYPES_ORDERED_TO_GET_SUGGESTIONS) {
                final Dictionary dictionary = dictionaryGroup.getDict(dictType);
                if (null == dictionary) continue;
                final ArrayList<SuggestedWordInfo> dictionarySuggestions =
                        dictionary.getSuggestions(composer, prevWordsInfo, proximityInfo,
                                settingsValuesForSuggestion, sessionId, languageWeight);
                                settingsValuesForSuggestion, sessionId,
                                dictionaryGroup.mWeightForLocale, weightOfLangModelVsSpatialModel);
                if (null == dictionarySuggestions) continue;
                suggestionResults.addAll(dictionarySuggestions);
                if (null != suggestionResults.mRawSuggestions) {
Loading