public virtual float readNgramProb(int wordId, int orderMinusTwo, NgramTrieModel.TrieRange range, NgramTrieQuant quant) { NgramTrie.NgramSet ngram = this.getNgram(orderMinusTwo); int num; if ((num = this.findNgram(ngram, wordId, range)) < 0) { return(0f); } return(quant.readProb(this.bitArr, ngram.memPtr, ngram.getNgramWeightsOffset(num), orderMinusTwo)); }
private int findNgram(NgramTrie.NgramSet ngramSet, int num, NgramTrieModel.TrieRange trieRange) { trieRange.begin--; int num2; if ((num2 = this.uniformFind(ngramSet, trieRange, num)) < 0) { trieRange.setFound(false); return(-1); } if (ngramSet is NgramTrie.MiddleNgramSet) { ((NgramTrie.MiddleNgramSet)ngramSet).readNextRange(num2, trieRange); } return(num2); }
private int uniformFind(NgramTrie.NgramSet ngramSet, NgramTrieModel.TrieRange trieRange, int num) { NgramTrieModel.TrieRange trieRange2 = new NgramTrieModel.TrieRange(0, ngramSet.maxVocab); while (trieRange.getWidth() > 1) { int num2 = trieRange.begin + 1 + this.calculatePivot(num - trieRange2.begin, trieRange2.getWidth(), trieRange.getWidth() - 1); int num3 = ngramSet.readNgramWord(num2); if (num3 < num) { trieRange.begin = num2; trieRange2.begin = num3; } else { if (num3 <= num) { return(num2); } trieRange.end = num2; trieRange2.end = num3; } } return(-1); }