private float getAvailableBackoff(WordSequence wordSequence) { float num = 0f; int num2 = wordSequence.size(); int num3 = ((Integer)this.unigramIDMap.get(wordSequence.getWord(num2 - 2))).intValue(); NgramTrieModel.TrieRange trieRange = new NgramTrieModel.TrieRange(this.unigrams[num3].next, this.unigrams[num3 + 1].next); if (this.curDepth == 1) { num += this.unigrams[num3].backoff; } int i = num2 - 3; int num4 = 0; while (i >= 0) { int wordId = ((Integer)this.unigramIDMap.get(wordSequence.getWord(i))).intValue(); float num5 = this.trie.readNgramBackoff(wordId, num4, trieRange, this.quant); if (!trieRange.getFound()) { break; } num += num5; if (!trieRange.isSearchable()) { break; } i--; num4++; } return(num); }
private float getAvailableProb(WordSequence wordSequence, NgramTrieModel.TrieRange trieRange, float num) { if (!trieRange.isSearchable()) { return(num); } for (int i = wordSequence.size() - 2; i >= 0; i--) { int num2 = wordSequence.size() - 2 - i; if (num2 + 1 == this.maxDepth) { break; } int wordId = ((Integer)this.unigramIDMap.get(wordSequence.getWord(i))).intValue(); float num3 = this.trie.readNgramProb(wordId, num2, trieRange, this.quant); if (!trieRange.getFound()) { break; } num = num3; this.curDepth++; if (!trieRange.isSearchable()) { break; } } return(num); }