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

Commit 5f5feeba authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Consolidate WordProperty and Word.

Bug: 11281877
Bug: 12810574
Change-Id: I9dc99188f80f25a8780c1860dab46e4aa80a23e5
parent df1d3e73
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -26,12 +26,12 @@ import com.android.inputmethod.latin.makedict.DictionaryHeader;
import com.android.inputmethod.latin.makedict.FormatSpec;
import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions;
import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
import com.android.inputmethod.latin.makedict.WordProperty;
import com.android.inputmethod.latin.settings.NativeSuggestOptions;
import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.JniUtils;
import com.android.inputmethod.latin.utils.LanguageModelParam;
import com.android.inputmethod.latin.utils.StringUtils;
import com.android.inputmethod.latin.utils.WordProperty;

import java.io.File;
import java.util.ArrayList;
+1 −1
Original line number Diff line number Diff line
@@ -23,13 +23,13 @@ import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.makedict.DictionaryHeader;
import com.android.inputmethod.latin.makedict.FormatSpec;
import com.android.inputmethod.latin.makedict.WordProperty;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.utils.AsyncResultHolder;
import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.FileUtils;
import com.android.inputmethod.latin.utils.LanguageModelParam;
import com.android.inputmethod.latin.utils.PrioritizedSerialExecutor;
import com.android.inputmethod.latin.utils.WordProperty;

import java.io.File;
import java.util.ArrayList;
+9 −7
Original line number Diff line number Diff line
@@ -606,19 +606,21 @@ public final class BinaryDictDecoderUtils {

        FusionDictionary newDict = new FusionDictionary(root, fileHeader.mDictionaryOptions);
        if (null != dict) {
            for (final Word w : dict) {
                if (w.mIsBlacklistEntry) {
                    newDict.addBlacklistEntry(w.mWord, w.mShortcutTargets, w.mIsNotAWord);
            for (final WordProperty wordProperty : dict) {
                if (wordProperty.mIsBlacklistEntry) {
                    newDict.addBlacklistEntry(wordProperty.mWord, wordProperty.mShortcutTargets,
                            wordProperty.mIsNotAWord);
                } else {
                    newDict.add(w.mWord, w.mFrequency, w.mShortcutTargets, w.mIsNotAWord);
                    newDict.add(wordProperty.mWord, wordProperty.getProbability(),
                            wordProperty.mShortcutTargets, wordProperty.mIsNotAWord);
                }
            }
            for (final Word w : dict) {
            for (final WordProperty wordProperty : dict) {
                // By construction a binary dictionary may not have bigrams pointing to
                // words that are not also registered as unigrams so we don't have to avoid
                // them explicitly here.
                for (final WeightedString bigram : w.mBigrams) {
                    newDict.setBigram(w.mWord, bigram.mWord, bigram.getProbability());
                for (final WeightedString bigram : wordProperty.mBigrams) {
                    newDict.setBigram(wordProperty.mWord, bigram.mWord, bigram.getProbability());
                }
            }
        }
+11 −9
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ import java.util.LinkedList;
 * A dictionary that can fusion heads and tails of words for more compression.
 */
@UsedForTesting
public final class FusionDictionary implements Iterable<Word> {
public final class FusionDictionary implements Iterable<WordProperty> {
    private static final boolean DBG = MakedictLog.DBG;

    private static int CHARACTER_NOT_FOUND_INDEX = -1;
@@ -76,8 +76,12 @@ public final class FusionDictionary implements Iterable<Word> {
        public ProbabilityInfo mProbabilityInfo;

        public WeightedString(final String word, final int probability) {
            this(word, new ProbabilityInfo(probability));
        }

        public WeightedString(final String word, final ProbabilityInfo probabilityInfo) {
            mWord = word;
            mProbabilityInfo = new ProbabilityInfo(probability);
            mProbabilityInfo = probabilityInfo;
        }

        public int getProbability() {
@@ -90,9 +94,7 @@ public final class FusionDictionary implements Iterable<Word> {

        @Override
        public int hashCode() {
            return Arrays.hashCode(new Object[] { mWord, mProbabilityInfo.mProbability,
                    mProbabilityInfo.mTimestamp, mProbabilityInfo.mLevel,
                    mProbabilityInfo.mCount });
            return Arrays.hashCode(new Object[] { mWord, mProbabilityInfo});
        }

        @Override
@@ -704,7 +706,7 @@ public final class FusionDictionary implements Iterable<Word> {
     *
     * This is purely for convenience.
     */
    public static final class DictionaryIterator implements Iterator<Word> {
    public static final class DictionaryIterator implements Iterator<WordProperty> {
        private static final class Position {
            public Iterator<PtNode> pos;
            public int length;
@@ -734,7 +736,7 @@ public final class FusionDictionary implements Iterable<Word> {
        }

        @Override
        public Word next() {
        public WordProperty next() {
            Position currentPos = mPositions.getLast();
            mCurrentString.setLength(currentPos.length);

@@ -751,7 +753,7 @@ public final class FusionDictionary implements Iterable<Word> {
                        mPositions.addLast(currentPos);
                    }
                    if (currentPtNode.mFrequency >= 0) {
                        return new Word(mCurrentString.toString(), currentPtNode.mFrequency,
                        return new WordProperty(mCurrentString.toString(), currentPtNode.mFrequency,
                                currentPtNode.mShortcutTargets, currentPtNode.mBigrams,
                                currentPtNode.mIsNotAWord, currentPtNode.mIsBlacklistEntry);
                    }
@@ -777,7 +779,7 @@ public final class FusionDictionary implements Iterable<Word> {
     * and say : for (Word w : x) {}
     */
    @Override
    public Iterator<Word> iterator() {
    public Iterator<WordProperty> iterator() {
        return new DictionaryIterator(mRootNodeArray.mData);
    }
}
+22 −10
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.android.inputmethod.latin.makedict;
import com.android.inputmethod.latin.BinaryDictionary;
import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString;

import java.util.Arrays;

public final class ProbabilityInfo {
    public final int mProbability;
    // mTimestamp, mLevel and mCount are historical info. These values are depend on the
@@ -44,9 +46,19 @@ public final class ProbabilityInfo {
        return mTimestamp != BinaryDictionary.NOT_A_VALID_TIMESTAMP;
    }

    @Override
    public int hashCode() {
        if (hasHistoricalInfo()) {
            return Arrays.hashCode(new Object[] { mProbability, mTimestamp, mLevel, mCount });
        } else {
            return Arrays.hashCode(new Object[] { mProbability });
        }
    }

    @Override
    public String toString() {
        return mTimestamp + ":" + mLevel + ":" + mCount;
        return "f=" + mProbability + (hasHistoricalInfo() ?
                ",historicalInfo=" + mTimestamp + ":" + mLevel + ":" + mCount : "");
    }

    @Override
Loading