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

搜索引擎

开发平台:

C#

  1. /*
  2.  * Copyright 2004-2005 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> A filter that replaces accented characters in the ISO Latin 1 character set 
  20. /// (ISO-8859-1) by their unaccented equivalent. The case will not be altered.
  21. /// <p>
  22. /// For instance, '&agrave;' will be replaced by 'a'.
  23. /// <p>
  24. /// </summary>
  25. public class ISOLatin1AccentFilter : TokenFilter
  26. {
  27. public ISOLatin1AccentFilter(TokenStream input):base(input)
  28. {
  29. }
  30. public override Token Next()
  31. {
  32. Token t = input.Next();
  33. if (t == null)
  34. return null;
  35. // Return a token with filtered characters.
  36. return new Token(RemoveAccents(t.TermText()), t.StartOffset(), t.EndOffset(), t.Type());
  37. }
  38. /// <summary> To replace accented characters in a String by unaccented equivalents.</summary>
  39. public static System.String RemoveAccents(System.String input)
  40. {
  41. System.Text.StringBuilder output = new System.Text.StringBuilder();
  42. for (int i = 0; i < input.Length; i++)
  43. {
  44. switch (input[i])
  45. {
  46. case 'u00C0': 
  47. // Ã€
  48. case 'u00C1': 
  49. // Ã?
  50. case 'u00C2': 
  51. // Ã‚
  52. case 'u00C3': 
  53. // Ãƒ
  54. case 'u00C4': 
  55. // Ã„
  56. case 'u00C5':  // Ã…
  57. output.Append("A");
  58. break;
  59. case 'u00C6':  // Ã†
  60. output.Append("AE");
  61. break;
  62. case 'u00C7':  // Ã‡
  63. output.Append("C");
  64. break;
  65. case 'u00C8': 
  66. // Ãˆ
  67. case 'u00C9': 
  68. // Ã‰
  69. case 'u00CA': 
  70. // ÃŠ
  71. case 'u00CB':  // Ã‹
  72. output.Append("E");
  73. break;
  74. case 'u00CC': 
  75. // ÃŒ
  76. case 'u00CD': 
  77. // Ã?
  78. case 'u00CE': 
  79. // ÃŽ
  80. case 'u00CF':  // Ã?
  81. output.Append("I");
  82. break;
  83. case 'u00D0':  // Ã?
  84. output.Append("D");
  85. break;
  86. case 'u00D1':  // Ã‘
  87. output.Append("N");
  88. break;
  89. case 'u00D2': 
  90. // Ã’
  91. case 'u00D3': 
  92. // Ã“
  93. case 'u00D4': 
  94. // Ã”
  95. case 'u00D5': 
  96. // Ã•
  97. case 'u00D6': 
  98. // Ã–
  99. case 'u00D8':  // Ã˜
  100. output.Append("O");
  101. break;
  102. case 'u0152':  // Å’
  103. output.Append("OE");
  104. break;
  105. case 'u00DE':  // Ãž
  106. output.Append("TH");
  107. break;
  108. case 'u00D9': 
  109. // Ã™
  110. case 'u00DA': 
  111. // Ãš
  112. case 'u00DB': 
  113. // Ã›
  114. case 'u00DC':  // Ãœ
  115. output.Append("U");
  116. break;
  117. case 'u00DD': 
  118. // Ã?
  119. case 'u0178':  // Å¸
  120. output.Append("Y");
  121. break;
  122. case 'u00E0': 
  123. // Ã 
  124. case 'u00E1': 
  125. // Ã¡
  126. case 'u00E2': 
  127. // Ã¢
  128. case 'u00E3': 
  129. // Ã£
  130. case 'u00E4': 
  131. // Ã¤
  132. case 'u00E5':  // Ã¥
  133. output.Append("a");
  134. break;
  135. case 'u00E6':  // Ã¦
  136. output.Append("ae");
  137. break;
  138. case 'u00E7':  // Ã§
  139. output.Append("c");
  140. break;
  141. case 'u00E8': 
  142. // Ã¨
  143. case 'u00E9': 
  144. // Ã©
  145. case 'u00EA': 
  146. // Ãª
  147. case 'u00EB':  // Ã«
  148. output.Append("e");
  149. break;
  150. case 'u00EC': 
  151. // Ã¬
  152. case 'u00ED': 
  153. // Ã­
  154. case 'u00EE': 
  155. // Ã®
  156. case 'u00EF':  // Ã¯
  157. output.Append("i");
  158. break;
  159. case 'u00F0':  // Ã°
  160. output.Append("d");
  161. break;
  162. case 'u00F1':  // Ã±
  163. output.Append("n");
  164. break;
  165. case 'u00F2': 
  166. // Ã²
  167. case 'u00F3': 
  168. // Ã³
  169. case 'u00F4': 
  170. // Ã´
  171. case 'u00F5': 
  172. // Ãµ
  173. case 'u00F6': 
  174. // Ã¶
  175. case 'u00F8':  // Ã¸
  176. output.Append("o");
  177. break;
  178. case 'u0153':  // Å“
  179. output.Append("oe");
  180. break;
  181. case 'u00DF':  // ÃŸ
  182. output.Append("ss");
  183. break;
  184. case 'u00FE':  // Ã¾
  185. output.Append("th");
  186. break;
  187. case 'u00F9': 
  188. // Ã¹
  189. case 'u00FA': 
  190. // Ãº
  191. case 'u00FB': 
  192. // Ã»
  193. case 'u00FC':  // Ã¼
  194. output.Append("u");
  195. break;
  196. case 'u00FD': 
  197. // Ã½
  198. case 'u00FF':  // Ã¿
  199. output.Append("y");
  200. break;
  201. default: 
  202. output.Append(input[i]);
  203. break;
  204. }
  205. }
  206. return output.ToString();
  207. }
  208. }
  209. }