StandardFilter.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. using Lucene.Net.Analysis;
  18. namespace Lucene.Net.Analysis.Standard
  19. {
  20. /// <summary>Normalizes tokens extracted with {@link StandardTokenizer}. </summary>
  21. public sealed class StandardFilter : TokenFilter
  22. {
  23. /// <summary>Construct filtering <i>in</i>. </summary>
  24. public StandardFilter(TokenStream in_Renamed) : base(in_Renamed)
  25. {
  26. }
  27. private static readonly System.String APOSTROPHE_TYPE = Lucene.Net.Analysis.Standard.StandardTokenizerConstants.tokenImage[Lucene.Net.Analysis.Standard.StandardTokenizerConstants.APOSTROPHE];
  28. private static readonly System.String ACRONYM_TYPE = Lucene.Net.Analysis.Standard.StandardTokenizerConstants.tokenImage[Lucene.Net.Analysis.Standard.StandardTokenizerConstants.ACRONYM];
  29. /// <summary>Returns the next token in the stream, or null at EOS.
  30. /// <p>Removes <tt>'s</tt> from the end of words.
  31. /// <p>Removes dots from acronyms.
  32. /// </summary>
  33. public override Lucene.Net.Analysis.Token Next()
  34. {
  35. Lucene.Net.Analysis.Token t = input.Next();
  36. if (t == null)
  37. return null;
  38. System.String text = t.TermText();
  39. System.String type = t.Type();
  40. if (type == APOSTROPHE_TYPE && (text.EndsWith("'s") || text.EndsWith("'S")))
  41. {
  42. return new Lucene.Net.Analysis.Token(text.Substring(0, (text.Length - 2) - (0)), t.StartOffset(), t.EndOffset(), type);
  43. }
  44. else if (type == ACRONYM_TYPE)
  45. {
  46. // remove dots
  47. System.Text.StringBuilder trimmed = new System.Text.StringBuilder();
  48. for (int i = 0; i < text.Length; i++)
  49. {
  50. char c = text[i];
  51. if (c != '.')
  52. trimmed.Append(c);
  53. }
  54. return new Lucene.Net.Analysis.Token(trimmed.ToString(), t.StartOffset(), t.EndOffset(), type);
  55. }
  56. else
  57. {
  58. return t;
  59. }
  60. }
  61. }
  62. }