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

Commit 337dce80 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Consolidate WordProperty and Word."

parents 0c088e2d 5f5feeba
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