NgramContext.java revision dfca51726e9dc9a35f462dee39331823eafa07c9
183c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi/*
283c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project
383c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi *
483c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License");
583c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi * you may not use this file except in compliance with the License.
683c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi * You may obtain a copy of the License at
783c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi *
883c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi *      http://www.apache.org/licenses/LICENSE-2.0
983c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi *
1083c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software
1183c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS,
1283c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1383c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi * See the License for the specific language governing permissions and
1483c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi * limitations under the License.
1583c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi */
1683c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi
1783c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagipackage com.android.inputmethod.latin;
1883c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi
19a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi/**
20a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi * Class to represent information of previous words. This class is used to add n-gram entries
21a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi * into binary dictionaries, to get predictions, and to get suggestions.
22a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi */
2317f326b7458c2bde2569e283a96e703755485328Keisuke Kuroyanagi// TODO: Support multiple previous words for n-gram.
2483c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagipublic class PrevWordsInfo {
25a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi    public static final PrevWordsInfo EMPTY_PREV_WORDS_INFO = new PrevWordsInfo(null);
261adca93381d261a6070be2721dbf8b8abafbfe01Keisuke Kuroyanagi    public static final PrevWordsInfo BEGINNING_OF_SENTENCE = new PrevWordsInfo();
271adca93381d261a6070be2721dbf8b8abafbfe01Keisuke Kuroyanagi
28a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi    // The word immediately before the considered word. null means we don't have any context
29a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi    // including the "beginning of sentence context" - we just don't know what to predict.
30a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi    // An example of that is after a comma.
31a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi    // For simplicity of implementation, this may also be null transiently after the WordComposer
32a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi    // was reset and before starting a new composing word, but we should never be calling
33a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi    // getSuggetions* in this situation.
34a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi    // This is an empty string when mIsBeginningOfSentence is true.
3583c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi    public final String mPrevWord;
3683c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi
3717f326b7458c2bde2569e283a96e703755485328Keisuke Kuroyanagi    // TODO: Have sentence separator.
38a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi    // Whether the current context is beginning of sentence or not. This is true when composing at
39a790c5b68324da41428aeb68594d43ca5632f66dKeisuke Kuroyanagi    // the beginning of an input field or composing a word after a sentence separator.
4017f326b7458c2bde2569e283a96e703755485328Keisuke Kuroyanagi    public final boolean mIsBeginningOfSentence;
4117f326b7458c2bde2569e283a96e703755485328Keisuke Kuroyanagi
4217f326b7458c2bde2569e283a96e703755485328Keisuke Kuroyanagi    // Beginning of sentence.
4317f326b7458c2bde2569e283a96e703755485328Keisuke Kuroyanagi    public PrevWordsInfo() {
441adca93381d261a6070be2721dbf8b8abafbfe01Keisuke Kuroyanagi        mPrevWord = "";
4517f326b7458c2bde2569e283a96e703755485328Keisuke Kuroyanagi        mIsBeginningOfSentence = true;
4617f326b7458c2bde2569e283a96e703755485328Keisuke Kuroyanagi    }
4717f326b7458c2bde2569e283a96e703755485328Keisuke Kuroyanagi
4883c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi    public PrevWordsInfo(final String prevWord) {
4983c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi        mPrevWord = prevWord;
5017f326b7458c2bde2569e283a96e703755485328Keisuke Kuroyanagi        mIsBeginningOfSentence = false;
5183c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi    }
521adca93381d261a6070be2721dbf8b8abafbfe01Keisuke Kuroyanagi
531adca93381d261a6070be2721dbf8b8abafbfe01Keisuke Kuroyanagi    public boolean isValid() {
541adca93381d261a6070be2721dbf8b8abafbfe01Keisuke Kuroyanagi        return mPrevWord != null;
551adca93381d261a6070be2721dbf8b8abafbfe01Keisuke Kuroyanagi    }
56dfca51726e9dc9a35f462dee39331823eafa07c9Keisuke Kuroyanagi
57dfca51726e9dc9a35f462dee39331823eafa07c9Keisuke Kuroyanagi    @Override
58dfca51726e9dc9a35f462dee39331823eafa07c9Keisuke Kuroyanagi    public String toString() {
59dfca51726e9dc9a35f462dee39331823eafa07c9Keisuke Kuroyanagi        return "PrevWord: " + mPrevWord + ", isBeginningOfSentence: "
60dfca51726e9dc9a35f462dee39331823eafa07c9Keisuke Kuroyanagi                    + mIsBeginningOfSentence + ".";
61dfca51726e9dc9a35f462dee39331823eafa07c9Keisuke Kuroyanagi    }
6283c40a2301a0b5a42a75eecada48e7887a7c940eKeisuke Kuroyanagi}
63