/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using Token = Lucene.Net.Analysis.Token;
using TokenFilter = Lucene.Net.Analysis.TokenFilter;
using TokenStream = Lucene.Net.Analysis.TokenStream;
namespace Lucene.Net.Analysis.DE
{
/// A filter that stems German words. It supports a table of words that should
/// not be stemmed at all. The stemmer used can be changed at runtime after the
/// filter object is created (as long as it is a GermanStemmer).
///
///
/// Gerhard Schwarz
///
/// $Id: GermanStemFilter.java,v 1.8 2004/03/30 15:54:48 otis Exp $
///
public sealed class GermanStemFilter : TokenFilter
{
/// The actual token in the input stream.
private Token token = null;
private GermanStemmer stemmer = null;
private System.Collections.Hashtable exclusionSet = null;
public GermanStemFilter(TokenStream in_Renamed) : base(in_Renamed)
{
stemmer = new GermanStemmer();
}
/// Builds a GermanStemFilter that uses an exclusiontable.
/// Use {@link #GermanStemFilter(Lucene.Net.Analysis.TokenStream, java.util.Set)} instead.
///
public GermanStemFilter(TokenStream in_Renamed, System.Collections.Hashtable exclusiontable):this(in_Renamed)
{
exclusionSet = new System.Collections.Hashtable(new System.Collections.Hashtable(exclusiontable));
}
/// Returns the next token in the stream, or null at EOS
///
public override Token Next()
{
if ((token = input.Next()) == null)
{
return null;
}
// Check the exclusiontable
else if (exclusionSet != null && exclusionSet.Contains(token.TermText()))
{
return token;
}
else
{
System.String s = stemmer.Stem(token.TermText());
// If not stemmed, dont waste the time creating a new token
if (!s.Equals(token.TermText()))
{
return new Token(s, token.StartOffset(), token.EndOffset(), token.Type());
}
return token;
}
}
/// Set a alternative/custom GermanStemmer for this filter.
public void SetStemmer(GermanStemmer stemmer)
{
if (stemmer != null)
{
this.stemmer = stemmer;
}
}
/// Set an alternative exclusion list for this filter.
/// Use {@link #SetExclusionSet(java.util.Set)} instead.
///
public void SetExclusionTable(System.Collections.Hashtable exclusiontable)
{
exclusionSet = new System.Collections.Hashtable(new System.Collections.Hashtable(exclusiontable));
}
/// Set an alternative exclusion list for this filter.
public void SetExclusionSet(System.Collections.Hashtable exclusionSet)
{
this.exclusionSet = exclusionSet;
}
}
}