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