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

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

Merge "Make WeightedString have ProbabilityInfo."

parents e42380a4 df1d3e73
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -511,7 +511,7 @@ public final class BinaryDictDecoderUtils {
                        final WeightedString word = getWordAtPosition(dictDecoder, headerSize,
                                bigram.mAddress, options);
                        final int reconstructedFrequency =
                                BinaryDictIOUtils.reconstructBigramFrequency(word.mFrequency,
                                BinaryDictIOUtils.reconstructBigramFrequency(word.getProbability(),
                                        bigram.mFrequency);
                        bigrams.add(new WeightedString(word.mWord, reconstructedFrequency));
                    }
@@ -618,7 +618,7 @@ public final class BinaryDictDecoderUtils {
                // 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.mFrequency);
                    newDict.setBigram(w.mWord, bigram.mWord, bigram.getProbability());
                }
            }
        }
+26 −15
Original line number Diff line number Diff line
@@ -67,29 +67,40 @@ public final class FusionDictionary implements Iterable<Word> {
    }

    /**
     * A string with a frequency.
     * A string with a probability.
     *
     * This represents an "attribute", that is either a bigram or a shortcut.
     */
    public static final class WeightedString {
        public final String mWord;
        public int mFrequency;
        public WeightedString(String word, int frequency) {
        public ProbabilityInfo mProbabilityInfo;

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

        public int getProbability() {
            return mProbabilityInfo.mProbability;
        }

        public void setProbability(final int probability) {
            mProbabilityInfo = new ProbabilityInfo(probability);
        }

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

        @Override
        public boolean equals(Object o) {
            if (o == this) return true;
            if (!(o instanceof WeightedString)) return false;
            WeightedString w = (WeightedString)o;
            return mWord.equals(w.mWord) && mFrequency == w.mFrequency;
            final WeightedString w = (WeightedString)o;
            return mWord.equals(w.mWord) && mProbabilityInfo.equals(w.mProbabilityInfo);
        }
    }

@@ -200,18 +211,18 @@ public final class FusionDictionary implements Iterable<Word> {
        }

        /**
         * Adds a word to the bigram list. Updates the frequency if the word already
         * Adds a word to the bigram list. Updates the probability if the word already
         * exists.
         */
        public void addBigram(final String word, final int frequency) {
        public void addBigram(final String word, final int probability) {
            if (mBigrams == null) {
                mBigrams = new ArrayList<WeightedString>();
            }
            WeightedString bigram = getBigram(word);
            if (bigram != null) {
                bigram.mFrequency = frequency;
                bigram.setProbability(probability);
            } else {
                bigram = new WeightedString(word, frequency);
                bigram = new WeightedString(word, probability);
                mBigrams.add(bigram);
            }
        }
@@ -273,8 +284,8 @@ public final class FusionDictionary implements Iterable<Word> {
                        final WeightedString existingShortcut = getShortcut(shortcut.mWord);
                        if (existingShortcut == null) {
                            mShortcutTargets.add(shortcut);
                        } else if (existingShortcut.mFrequency < shortcut.mFrequency) {
                            existingShortcut.mFrequency = shortcut.mFrequency;
                        } else if (existingShortcut.getProbability() < shortcut.getProbability()) {
                            existingShortcut.setProbability(shortcut.getProbability());
                        }
                    }
                }
@@ -289,8 +300,8 @@ public final class FusionDictionary implements Iterable<Word> {
                        final WeightedString existingBigram = getBigram(bigram.mWord);
                        if (existingBigram == null) {
                            mBigrams.add(bigram);
                        } else if (existingBigram.mFrequency < bigram.mFrequency) {
                            existingBigram.mFrequency = bigram.mFrequency;
                        } else if (existingBigram.getProbability() < bigram.getProbability()) {
                            existingBigram.setProbability(bigram.getProbability());
                        }
                    }
                }
+17 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.inputmethod.latin.makedict;

import com.android.inputmethod.latin.BinaryDictionary;
import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString;

public final class ProbabilityInfo {
    public final int mProbability;
@@ -39,8 +40,24 @@ public final class ProbabilityInfo {
        mCount = count;
    }

    public boolean hasHistoricalInfo() {
        return mTimestamp != BinaryDictionary.NOT_A_VALID_TIMESTAMP;
    }

    @Override
    public String toString() {
        return mTimestamp + ":" + mLevel + ":" + mCount;
    }

    @Override
    public boolean equals(Object o) {
      if (o == this) return true;
      if (!(o instanceof ProbabilityInfo)) return false;
      final ProbabilityInfo p = (ProbabilityInfo)o;
      if (!hasHistoricalInfo() && !p.hasHistoricalInfo()) {
          return mProbability == p.mProbability;
      }
      return mProbability == p.mProbability && mTimestamp == p.mTimestamp && mLevel == p.mLevel
              && mCount == p.mCount;
  }
}
 No newline at end of file
+2 −2
Original line number Diff line number Diff line
@@ -197,7 +197,7 @@ public class Ver2DictEncoder implements DictEncoder {
            final WeightedString target = shortcutIterator.next();
            final int shortcutFlags = BinaryDictEncoderUtils.makeShortcutFlags(
                    shortcutIterator.hasNext(),
                    target.mFrequency);
                    target.getProbability());
            mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, shortcutFlags,
                    FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE);
            final int shortcutShift = CharEncoding.writeString(mBuffer, mPosition, target.mWord);
@@ -231,7 +231,7 @@ public class Ver2DictEncoder implements DictEncoder {
            final int offset = addressOfBigram
                    - (mPosition + FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE);
            final int bigramFlags = BinaryDictEncoderUtils.makeBigramFlags(bigramIterator.hasNext(),
                    offset, bigram.mFrequency, unigramFrequencyForThisWord, bigram.mWord);
                    offset, bigram.getProbability(), unigramFrequencyForThisWord, bigram.mWord);
            mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, bigramFlags,
                    FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE);
            mPosition += BinaryDictEncoderUtils.writeChildrenPosition(mBuffer, mPosition,
+2 −2
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ public class Ver4DictEncoder implements DictEncoder {
            } else {
                for (final WeightedString shortcutTarget : word.mShortcutTargets) {
                    binaryDict.addUnigramWord(word.mWord, word.mFrequency,
                            shortcutTarget.mWord, shortcutTarget.mFrequency,
                            shortcutTarget.mWord, shortcutTarget.getProbability(),
                            word.mIsNotAWord, word.mIsBlacklistEntry, 0 /* timestamp */);
                }
            }
@@ -91,7 +91,7 @@ public class Ver4DictEncoder implements DictEncoder {
        for (final Word word0 : dict) {
            if (null == word0.mBigrams) continue;
            for (final WeightedString word1 : word0.mBigrams) {
                binaryDict.addBigramWords(word0.mWord, word1.mWord, word1.mFrequency,
                binaryDict.addBigramWords(word0.mWord, word1.mWord, word1.getProbability(),
                        0 /* timestamp */);
                if (binaryDict.needsToRunGC(true /* mindsBlockByGC */)) {
                    binaryDict.flushWithGC();
Loading