public void findTerms( final RareWordDictionary dictionary,
final List<FastLookupToken> allTokens, final List<Integer> lookupTokenIndices,
final Collection<SpannedRareWordTerm> termsFromDictionary ) {
Collection<RareWordTerm> rareWordHits;
for ( Integer lookupTokenIndex : lookupTokenIndices ) {
final FastLookupToken lookupToken = allTokens.get( lookupTokenIndex );
rareWordHits = dictionary.getRareWordHits( lookupToken );
if ( rareWordHits == null || rareWordHits.isEmpty() ) {
continue;
}
for ( RareWordTerm rareWordHit : rareWordHits ) {
if ( rareWordHit.getTokenCount() == 1 ) {
// Single word term, add and move on
termsFromDictionary.add( new SpannedRareWordTerm( rareWordHit, lookupToken.getTextSpan() ) );
continue;
}
final int termStartIndex = lookupTokenIndex - rareWordHit.getRareWordIndex();
if ( termStartIndex < 0 || termStartIndex + rareWordHit.getTokenCount() > allTokens.size() ) {
// term will extend beyond window