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); }
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); }
internal void readNextRange(int num, NgramTrieModel.TrieRange trieRange) { int num2 = num * this.totalBits; num2 += this.wordBits; num2 += this.getQuantBits(); trieRange.begin = NgramTrie.access_100(this.this_0).readInt(this.memPtr, num2, this.nextMask); num2 += this.totalBits; trieRange.end = NgramTrie.access_100(this.this_0).readInt(this.memPtr, num2, this.nextMask); }
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 float getProbabilityRaw(WordSequence wordSequence) { int num = wordSequence.size(); int num2 = ((Integer)this.unigramIDMap.get(wordSequence.getWord(num - 1))).intValue(); NgramTrieModel.TrieRange trieRange = new NgramTrieModel.TrieRange(this.unigrams[num2].next, this.unigrams[num2 + 1].next); float num3 = this.unigrams[num2].prob; this.curDepth = 1; if (num == 1) { return(num3); } num3 = this.getAvailableProb(wordSequence, trieRange, num3); if (this.curDepth < num) { num3 += this.getAvailableBackoff(wordSequence); } return(num3); }
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); }