/** * Gets the "key" (word + context offset) for a given offset * * @param contextOffset_ * @param ngramOrder * @return */ private long getKey(long offset, final int ngramOrder) { return maps[ngramOrder].getKey(offset); }
/** * Gets the "key" (word + context offset) for a given offset * * @param contextOffset_ * @param ngramOrder * @return */ private long getKey(final long offset, final int ngramOrder) { return getMap(ngramOrder).getKey(offset); }
public int[] getNgramForOffset(long offset, int ngramOrder) { int[] ret = new int[ngramOrder + 1]; long offset_ = offset; for (int i = 0; i <= ngramOrder; ++i) { long key = maps[ngramOrder - i].getKey(offset_); offset_ = AbstractNgramMap.contextOffsetOf(key); int word_ = AbstractNgramMap.wordOf(key); ret[reversed ? (i) : (ret.length - i - 1)] = word_; } return ret; }
public int getLastWordForOffset(final long offset, final int ngramOrder) { final long key = getMap(ngramOrder).getKey(offset); return wordOf(key); }
public int[] getNgramForOffset(final long offset, final int ngramOrder, final int[] ret) { long offset_ = offset; for (int i = 0; i <= ngramOrder; ++i) { final long key = getMap(ngramOrder - i).getKey(offset_); offset_ = contextOffsetOf(key); final int word_ = wordOf(key); ret[reversed ? (i) : (ngramOrder - i)] = word_; } return ret; }
public int getFirstWordForOffset(final long offset, final int ngramOrder) { final long key = getMap(ngramOrder).getKey(offset); if (ngramOrder == 0) return wordOf(key); else return getFirstWordForOffset(contextOffsetOf(key), ngramOrder - 1); }
private void rehash(final int changedNgramOrder, final long newCapacity) { final ValueContainer<T> newValues = values.createFreshValues(); final long[] newCapacities = new long[maps.length]; Arrays.fill(newCapacities, -1L); for (int ngramOrder = 0; ngramOrder < maps.length; ++ngramOrder) { if (maps[ngramOrder] == null) break; newCapacities[ngramOrder] = ngramOrder == changedNgramOrder ? newCapacity : maps[ngramOrder].getCapacity(); } final HashNgramMap<T> newMap = new HashNgramMap<T>(newValues, opts, newCapacities, reversed); for (int ngramOrder = 0; ngramOrder < maps.length; ++ngramOrder) { final HashMap currMap = maps[ngramOrder]; if (currMap == null) continue; for (long actualIndex = 0; actualIndex < currMap.getCapacity(); ++actualIndex) { final long key = currMap.getKey(actualIndex); if (currMap.isEmptyKey(key)) continue; final int[] ngram = getNgramFromContextEncoding(AbstractNgramMap.contextOffsetOf(key), ngramOrder - 1, AbstractNgramMap.wordOf(key)); final T val = values.getScratchValue(); values.getFromOffset(actualIndex, ngramOrder, val); newMap.put(ngram, 0, ngram.length, val); } } System.arraycopy(newMap.maps, 0, maps, 0, newMap.maps.length); values.setFromOtherValues(newValues); values.setMap(this); }