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

Commit 3e236828 authored by Jean Chalard's avatar Jean Chalard
Browse files

Reinforce user-history based bigram use.

- Have user-history based bigrams used as soon as they are entered,
  not after 6 times.
- Limit bigram frequency to 255 (this limits the multiplier to 1.8, and
  has no effect on main dict bigrams which already have this limit)
- Some TODO resolving

bug: 4192129

Change-Id: I4777f1a58c43dd55381c4b01252d722ab3a70547
parent fd58877d
Loading
Loading
Loading
Loading
+16 −13
Original line number Diff line number Diff line
@@ -32,12 +32,14 @@ public class ExpandableDictionary extends Dictionary {
     */
    protected static final int MAX_WORD_LENGTH = 32;

    // Bigram frequency is a fixed point number with 1 meaning 1.2 and 255 meaning 1.8.
    protected static final int BIGRAM_MAX_FREQUENCY = 255;

    private Context mContext;
    private char[] mWordBuilder = new char[MAX_WORD_LENGTH];
    private int mDicTypeId;
    private int mMaxDepth;
    private int mInputLength;
    private StringBuilder sb = new StringBuilder(MAX_WORD_LENGTH);

    private static final char QUOTE = '\'';

@@ -98,6 +100,7 @@ public class ExpandableDictionary extends Dictionary {

        public int addFrequency(int add) {
            mFrequency += add;
            if (mFrequency > BIGRAM_MAX_FREQUENCY) mFrequency = BIGRAM_MAX_FREQUENCY;
            return mFrequency;
        }
    }
@@ -462,6 +465,9 @@ public class ExpandableDictionary extends Dictionary {
        }
    }

    // Local to reverseLookUp, but do not allocate each time.
    private final char[] mLookedUpString = new char[MAX_WORD_LENGTH];

    /**
     * reverseLookUp retrieves the full word given a list of terminal nodes and adds those words
     * through callback.
@@ -474,20 +480,17 @@ public class ExpandableDictionary extends Dictionary {
        for (NextWord nextWord : terminalNodes) {
            node = nextWord.mWord;
            freq = nextWord.getFrequency();
            // TODO Not the best way to limit suggestion threshold
            if (freq >= UserBigramDictionary.SUGGEST_THRESHOLD) {
                sb.setLength(0);
            int index = MAX_WORD_LENGTH;
            do {
                    sb.insert(0, node.mCode);
                --index;
                mLookedUpString[index] = node.mCode;
                node = node.mParent;
            } while (node != null);

                // TODO better way to feed char array?
                callback.addWord(sb.toString().toCharArray(), 0, sb.length(), freq, mDicTypeId,
            callback.addWord(mLookedUpString, index, MAX_WORD_LENGTH - index, freq, mDicTypeId,
                    DataType.BIGRAM);
        }
    }
    }

    /**
     * Search for the terminal node of the word
+0 −6
Original line number Diff line number Diff line
@@ -44,12 +44,6 @@ public class UserBigramDictionary extends ExpandableDictionary {
    /** Maximum frequency for all pairs */
    private static final int FREQUENCY_MAX = 127;

    /**
     * If this pair is typed 6 times, it would be suggested.
     * Should be smaller than ContactsDictionary.FREQUENCY_FOR_CONTACTS_BIGRAM
     */
    protected static final int SUGGEST_THRESHOLD = 6 * FREQUENCY_FOR_TYPED;

    /** Maximum number of pairs. Pruning will start when databases goes above this number. */
    private static int sMaxUserBigrams = 10000;