Class CommonGramsFilter
- All Implemented Interfaces:
Closeable,AutoCloseable,Unwrappable<TokenStream>
PositionIncrementAttribute.setPositionIncrement(int). Bigrams have a type of GRAM_TYPE
Example:
- input:"the quick brown fox"
- output:|"the","the-quick"|"brown"|"fox"|
- "the-quick" has a position increment of 0 so it is in the same position as "the" "the-quick" has a term.type() of "gram"
-
Nested Class Summary
Nested classes/interfaces inherited from class org.apache.lucene.util.AttributeSource
AttributeSource.State -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final StringBuilderprivate final CharArraySetstatic final Stringprivate intprivate booleanprivate final OffsetAttributeprivate final PositionIncrementAttributeprivate final PositionLengthAttributeprivate AttributeSource.Stateprivate static final charprivate final CharTermAttributeprivate final TypeAttributeFields inherited from class org.apache.lucene.analysis.TokenFilter
inputFields inherited from class org.apache.lucene.analysis.TokenStream
DEFAULT_TOKEN_ATTRIBUTE_FACTORY -
Constructor Summary
ConstructorsConstructorDescriptionCommonGramsFilter(TokenStream input, CharArraySet commonWords) Construct a token stream filtering the given input using a Set of common words to create bigrams. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidConstructs a compound token.booleanInserts bigrams for common words into a token stream.private booleanisCommon()Determines if the current token is a common termvoidreset()This method is called by a consumer before it begins consumption usingTokenStream.incrementToken().private voidSaves this information to form the left part of a gramMethods inherited from class org.apache.lucene.analysis.TokenFilter
close, end, unwrapMethods inherited from class org.apache.lucene.util.AttributeSource
addAttribute, addAttributeImpl, captureState, clearAttributes, cloneAttributes, copyTo, endAttributes, equals, getAttribute, getAttributeClassesIterator, getAttributeFactory, getAttributeImplsIterator, hasAttribute, hasAttributes, hashCode, reflectAsString, reflectWith, removeAllAttributes, restoreState, toString
-
Field Details
-
GRAM_TYPE
- See Also:
-
SEPARATOR
private static final char SEPARATOR- See Also:
-
commonWords
-
buffer
-
termAttribute
-
offsetAttribute
-
typeAttribute
-
posIncAttribute
-
posLenAttribute
-
lastStartOffset
private int lastStartOffset -
lastWasCommon
private boolean lastWasCommon -
savedState
-
-
Constructor Details
-
CommonGramsFilter
Construct a token stream filtering the given input using a Set of common words to create bigrams. Outputs both unigrams with position increment and bigrams with position increment 0 type=gram where one or both of the words in a potential bigram are in the set of common words .- Parameters:
input- TokenStream input in filter chaincommonWords- The set of common words.
-
-
Method Details
-
incrementToken
Inserts bigrams for common words into a token stream. For each input token, output the token. If the token and/or the following token are in the list of common words also output a bigram with position increment 0 and type="gram"TODO:Consider adding an option to not emit unigram stopwords as in CDL XTF BigramStopFilter, CommonGramsQueryFilter would need to be changed to work with this.
TODO: Consider optimizing for the case of three commongrams i.e "man of the year" normally produces 3 bigrams: "man-of", "of-the", "the-year" but with proper management of positions we could eliminate the middle bigram "of-the"and save a disk seek and a whole set of position lookups.
- Specified by:
incrementTokenin classTokenStream- Returns:
- false for end of stream; true otherwise
- Throws:
IOException
-
reset
Description copied from class:TokenFilterThis method is called by a consumer before it begins consumption usingTokenStream.incrementToken().Resets this stream to a clean state. Stateful implementations must implement this method so that they can be reused, just as if they had been created fresh.
If you override this method, always call
super.reset(), otherwise some internal state will not be correctly reset (e.g.,Tokenizerwill throwIllegalStateExceptionon further usage).NOTE: The default implementation chains the call to the input TokenStream, so be sure to call
super.reset()when overriding this method.- Overrides:
resetin classTokenFilter- Throws:
IOException
-
isCommon
private boolean isCommon()Determines if the current token is a common term- Returns:
trueif the current token is a common term,falseotherwise
-
saveTermBuffer
private void saveTermBuffer()Saves this information to form the left part of a gram -
gramToken
private void gramToken()Constructs a compound token.
-