PorterStemFilter.cs
上传用户:zhangkuixh
上传日期:2013-09-30
资源大小:5473k
文件大小:2k
源码类别:

搜索引擎

开发平台:

C#

  1. /*
  2.  * Copyright 2004 The Apache Software Foundation
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  * 
  8.  * http://www.apache.org/licenses/LICENSE-2.0
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */
  16. using System;
  17. namespace Lucene.Net.Analysis
  18. {
  19. /// <summary>Transforms the token stream as per the Porter stemming algorithm.
  20. /// Note: the input to the stemming filter must already be in lower case,
  21. /// so you will need to use LowerCaseFilter or LowerCaseTokenizer farther
  22. /// down the Tokenizer chain in order for this to work properly!
  23. /// <P>
  24. /// To use this filter with other analyzers, you'll want to write an
  25. /// Analyzer class that sets up the TokenStream chain as you want it.
  26. /// To use this with LowerCaseTokenizer, for example, you'd write an
  27. /// analyzer like this:
  28. /// <P>
  29. /// <PRE>
  30. /// class MyAnalyzer extends Analyzer {
  31. /// public final TokenStream tokenStream(String fieldName, Reader reader) {
  32. /// return new PorterStemFilter(new LowerCaseTokenizer(reader));
  33. /// }
  34. /// }
  35. /// </PRE>
  36. /// </summary>
  37. public sealed class PorterStemFilter : TokenFilter
  38. {
  39. private PorterStemmer stemmer;
  40. public PorterStemFilter(TokenStream in_Renamed) : base(in_Renamed)
  41. {
  42. stemmer = new PorterStemmer();
  43. }
  44. /// <summary>Returns the next input Token, after being stemmed </summary>
  45. public override Token Next()
  46. {
  47. Token token = input.Next();
  48. if (token == null)
  49. return null;
  50. else
  51. {
  52. System.String s = stemmer.Stem(token.termText);
  53. if ((System.Object) s != (System.Object) token.termText)
  54. // Yes, I mean object reference comparison here
  55. token.termText = s;
  56. return token;
  57. }
  58. }
  59. }
  60. }