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

Commit bcbbceba authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android Git Automerger
Browse files

am 108dad14: Merge "Introduce NgramProperty in Java side."

* commit '108dad14':
  Introduce NgramProperty in Java side.
parents b4226d48 108dad14
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -169,8 +169,14 @@ public class NgramContext {

    @Override
    public int hashCode() {
        // Just for having equals().
        return mPrevWordsInfo[0].hashCode();
        int hashValue = 0;
        for (final WordInfo wordInfo : mPrevWordsInfo) {
            if (wordInfo == null || !WordInfo.EMPTY_WORD_INFO.equals(wordInfo)) {
                break;
            }
            hashValue ^= wordInfo.hashCode();
        }
        return hashValue;
    }

    @Override
+26 −0
Original line number Diff line number Diff line
package com.android.inputmethod.latin.makedict;

import com.android.inputmethod.latin.NgramContext;

public class NgramProperty {
    public final WeightedString mTargetWord;
    public final NgramContext mNgramContext;

    public NgramProperty(final WeightedString targetWord, final NgramContext ngramContext) {
        mTargetWord = targetWord;
        mNgramContext = ngramContext;
    }

    @Override
    public int hashCode() {
        return mTargetWord.hashCode() ^ mNgramContext.hashCode();
    }

    @Override
    public boolean equals(Object o) {
        if (o == this) return true;
        if (!(o instanceof NgramProperty)) return false;
        final NgramProperty n = (NgramProperty)o;
        return mTargetWord.equals(n.mTargetWord) && mNgramContext.equals(n.mNgramContext);
    }
}
+41 −16
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.inputmethod.latin.makedict;

import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.BinaryDictionary;
import com.android.inputmethod.latin.NgramContext;
import com.android.inputmethod.latin.NgramContext.WordInfo;
import com.android.inputmethod.latin.utils.CombinedFormatUtils;
import com.android.inputmethod.latin.utils.StringUtils;

@@ -33,16 +35,17 @@ public final class WordProperty implements Comparable<WordProperty> {
    public final String mWord;
    public final ProbabilityInfo mProbabilityInfo;
    public final ArrayList<WeightedString> mShortcutTargets;
    public final ArrayList<WeightedString> mBigrams;
    public final ArrayList<NgramProperty> mNgrams;
    // TODO: Support mIsBeginningOfSentence.
    public final boolean mIsBeginningOfSentence;
    public final boolean mIsNotAWord;
    public final boolean mIsBlacklistEntry;
    public final boolean mHasShortcuts;
    public final boolean mHasBigrams;
    public final boolean mHasNgrams;

    private int mHashCode = 0;

    // TODO: Support n-gram.
    @UsedForTesting
    public WordProperty(final String word, final ProbabilityInfo probabilityInfo,
            final ArrayList<WeightedString> shortcutTargets,
@@ -51,11 +54,17 @@ public final class WordProperty implements Comparable<WordProperty> {
        mWord = word;
        mProbabilityInfo = probabilityInfo;
        mShortcutTargets = shortcutTargets;
        mBigrams = bigrams;
        mNgrams = new ArrayList<>();
        final NgramContext ngramContext = new NgramContext(new WordInfo(mWord));
        if (bigrams != null) {
            for (final WeightedString bigramTarget : bigrams) {
                mNgrams.add(new NgramProperty(bigramTarget, ngramContext));
            }
        }
        mIsBeginningOfSentence = false;
        mIsNotAWord = isNotAWord;
        mIsBlacklistEntry = isBlacklistEntry;
        mHasBigrams = bigrams != null && !bigrams.isEmpty();
        mHasNgrams = bigrams != null && !bigrams.isEmpty();
        mHasShortcuts = shortcutTargets != null && !shortcutTargets.isEmpty();
    }

@@ -78,19 +87,24 @@ public final class WordProperty implements Comparable<WordProperty> {
        mWord = StringUtils.getStringFromNullTerminatedCodePointArray(codePoints);
        mProbabilityInfo = createProbabilityInfoFromArray(probabilityInfo);
        mShortcutTargets = new ArrayList<>();
        mBigrams = new ArrayList<>();
        mNgrams = new ArrayList<>();
        mIsBeginningOfSentence = isBeginningOfSentence;
        mIsNotAWord = isNotAWord;
        mIsBlacklistEntry = isBlacklisted;
        mHasShortcuts = hasShortcuts;
        mHasBigrams = hasBigram;

        final int bigramTargetCount = bigramTargets.size();
        for (int i = 0; i < bigramTargetCount; i++) {
            final String bigramTargetString =
        mHasNgrams = hasBigram;

        final int relatedNgramCount = bigramTargets.size();
        final WordInfo currentWordInfo =
                mIsBeginningOfSentence ? WordInfo.BEGINNING_OF_SENTENCE : new WordInfo(mWord);
        final NgramContext ngramContext = new NgramContext(currentWordInfo);
        for (int i = 0; i < relatedNgramCount; i++) {
            final String ngramTargetString =
                    StringUtils.getStringFromNullTerminatedCodePointArray(bigramTargets.get(i));
            mBigrams.add(new WeightedString(bigramTargetString,
                    createProbabilityInfoFromArray(bigramProbabilityInfo.get(i))));
            final WeightedString ngramTarget = new WeightedString(ngramTargetString,
                    createProbabilityInfoFromArray(bigramProbabilityInfo.get(i)));
            // TODO: Support n-gram.
            mNgrams.add(new NgramProperty(ngramTarget, ngramContext));
        }

        final int shortcutTargetCount = shortcutTargets.size();
@@ -102,6 +116,17 @@ public final class WordProperty implements Comparable<WordProperty> {
        }
    }

    // TODO: Remove
    public ArrayList<WeightedString> getBigrams() {
        final ArrayList<WeightedString> bigrams = new ArrayList<>();
        for (final NgramProperty ngram : mNgrams) {
            if (ngram.mNgramContext.getPrevWordCount() == 1) {
                bigrams.add(ngram.mTargetWord);
            }
        }
        return bigrams;
    }

    public int getProbability() {
        return mProbabilityInfo.mProbability;
    }
@@ -110,8 +135,8 @@ public final class WordProperty implements Comparable<WordProperty> {
        return Arrays.hashCode(new Object[] {
                word.mWord,
                word.mProbabilityInfo,
                word.mShortcutTargets.hashCode(),
                word.mBigrams.hashCode(),
                word.mShortcutTargets,
                word.mNgrams,
                word.mIsNotAWord,
                word.mIsBlacklistEntry
        });
@@ -142,9 +167,9 @@ public final class WordProperty implements Comparable<WordProperty> {
        if (!(o instanceof WordProperty)) return false;
        WordProperty w = (WordProperty)o;
        return mProbabilityInfo.equals(w.mProbabilityInfo) && mWord.equals(w.mWord)
                && mShortcutTargets.equals(w.mShortcutTargets) && mBigrams.equals(w.mBigrams)
                && mShortcutTargets.equals(w.mShortcutTargets) && mNgrams.equals(w.mNgrams)
                && mIsNotAWord == w.mIsNotAWord && mIsBlacklistEntry == w.mIsBlacklistEntry
                && mHasBigrams == w.mHasBigrams && mHasShortcuts && w.mHasBigrams;
                && mHasNgrams == w.mHasNgrams && mHasShortcuts && w.mHasNgrams;
    }

    @Override
+4 −3
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ public class CombinedFormatUtils {
            builder.append("," + BLACKLISTED_TAG + "=true");
        }
        builder.append("\n");
        if (wordProperty.mShortcutTargets != null) {
        if (wordProperty.mHasShortcuts) {
            for (final WeightedString shortcutTarget : wordProperty.mShortcutTargets) {
                builder.append("  " + SHORTCUT_TAG + "=" + shortcutTarget.mWord);
                builder.append(",");
@@ -75,8 +75,9 @@ public class CombinedFormatUtils {
                builder.append("\n");
            }
        }
        if (wordProperty.mBigrams != null) {
            for (final WeightedString bigram : wordProperty.mBigrams) {
        if (wordProperty.mHasNgrams) {
            // TODO: Support ngram.
            for (final WeightedString bigram : wordProperty.getBigrams()) {
                builder.append("  " + BIGRAM_TAG + "=" + bigram.mWord);
                builder.append(",");
                builder.append(formatProbabilityInfo(bigram.mProbabilityInfo));
+10 −8
Original line number Diff line number Diff line
@@ -1105,7 +1105,7 @@ public class BinaryDictionaryTests extends AndroidTestCase {
            assertTrue(wordProperty.isValid());
            assertEquals(isNotAWord, wordProperty.mIsNotAWord);
            assertEquals(isBlacklisted, wordProperty.mIsBlacklistEntry);
            assertEquals(false, wordProperty.mHasBigrams);
            assertEquals(false, wordProperty.mHasNgrams);
            assertEquals(false, wordProperty.mHasShortcuts);
            assertEquals(unigramProbability, wordProperty.mProbabilityInfo.mProbability);
            assertTrue(wordProperty.mShortcutTargets.isEmpty());
@@ -1142,13 +1142,14 @@ public class BinaryDictionaryTests extends AndroidTestCase {
            final HashSet<String> bigramWord1s = bigrams.get(word0);
            final WordProperty wordProperty = binaryDictionary.getWordProperty(word0,
                    false /* isBeginningOfSentence */);
            assertEquals(bigramWord1s.size(), wordProperty.mBigrams.size());
            for (int j = 0; j < wordProperty.mBigrams.size(); j++) {
                final String word1 = wordProperty.mBigrams.get(j).mWord;
            assertEquals(bigramWord1s.size(), wordProperty.mNgrams.size());
            // TODO: Support ngram.
            for (final WeightedString bigramTarget : wordProperty.getBigrams()) {
                final String word1 = bigramTarget.mWord;
                assertTrue(bigramWord1s.contains(word1));
                if (canCheckBigramProbability(formatVersion)) {
                    final int bigramProbability = bigramProbabilities.get(new Pair<>(word0, word1));
                    assertEquals(bigramProbability, wordProperty.mBigrams.get(j).getProbability());
                    assertEquals(bigramProbability, bigramTarget.getProbability());
                }
            }
        }
@@ -1235,13 +1236,14 @@ public class BinaryDictionaryTests extends AndroidTestCase {
                    wordProperty.mProbabilityInfo.mProbability);
            wordSet.remove(word0);
            final HashSet<String> bigramWord1s = bigrams.get(word0);
            for (int j = 0; j < wordProperty.mBigrams.size(); j++) {
                final String word1 = wordProperty.mBigrams.get(j).mWord;
            // TODO: Support ngram.
            for (final WeightedString bigramTarget : wordProperty.getBigrams()) {
                final String word1 = bigramTarget.mWord;
                assertTrue(bigramWord1s.contains(word1));
                final Pair<String, String> bigram = new Pair<>(word0, word1);
                if (canCheckBigramProbability(formatVersion)) {
                    final int bigramProbability = bigramProbabilitiesToCheckLater.get(bigram);
                    assertEquals(bigramProbability, wordProperty.mBigrams.get(j).getProbability());
                    assertEquals(bigramProbability, bigramTarget.getProbability());
                }
                bigramSet.remove(bigram);
            }
Loading