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

搜索引擎

开发平台:

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>A Token is an occurence of a term from the text of a field.  It consists of
  20. /// a term's text, the start and end offset of the term in the text of the field,
  21. /// and a type string.
  22. /// The start and end offsets permit applications to re-associate a token with
  23. /// its source text, e.g., to display highlighted query terms in a document
  24. /// browser, or to show matching text fragments in a KWIC (KeyWord In Context)
  25. /// display, etc.
  26. /// The type is an interned string, assigned by a lexical analyzer
  27. /// (a.k.a. tokenizer), naming the lexical or syntactic class that the token
  28. /// belongs to.  For example an end of sentence marker token might be implemented
  29. /// with type "eos".  The default token type is "word".  
  30. /// </summary>
  31. public sealed class Token
  32. {
  33. internal System.String termText; // the text of the term
  34. internal int startOffset; // start in source text
  35. internal int endOffset; // end in source text
  36. internal System.String type = "word"; // lexical type
  37. private int positionIncrement = 1;
  38. /// <summary>Constructs a Token with the given term text, and start & end offsets.
  39. /// The type defaults to "word." 
  40. /// </summary>
  41. public Token(System.String text, int start, int end)
  42. {
  43. termText = text;
  44. startOffset = start;
  45. endOffset = end;
  46. }
  47. /// <summary>Constructs a Token with the given text, start and end offsets, & type. </summary>
  48. public Token(System.String text, int start, int end, System.String typ)
  49. {
  50. termText = text;
  51. startOffset = start;
  52. endOffset = end;
  53. type = typ;
  54. }
  55. /// <summary>Set the position increment.  This determines the position of this token
  56. /// relative to the previous Token in a {@link TokenStream}, used in phrase
  57. /// searching.
  58. /// 
  59. /// <p>The default value is one.
  60. /// 
  61. /// <p>Some common uses for this are:<ul>
  62. /// 
  63. /// <li>Set it to zero to put multiple terms in the same position.  This is
  64. /// useful if, e.g., a word has multiple stems.  Searches for phrases
  65. /// including either stem will match.  In this case, all but the first stem's
  66. /// increment should be set to zero: the increment of the first instance
  67. /// should be one.  Repeating a token with an increment of zero can also be
  68. /// used to boost the scores of matches on that token.
  69. /// 
  70. /// <li>Set it to values greater than one to inhibit exact phrase matches.
  71. /// If, for example, one does not want phrases to match across removed stop
  72. /// words, then one could build a stop word filter that removes stop words and
  73. /// also sets the increment to the number of stop words removed before each
  74. /// non-stop word.  Then exact phrase queries will only match when the terms
  75. /// occur with no intervening stop words.
  76. /// 
  77. /// </ul>
  78. /// </summary>
  79. /// <seealso cref="Lucene.Net.index.TermPositions">
  80. /// </seealso>
  81. public void  SetPositionIncrement(int positionIncrement)
  82. {
  83. if (positionIncrement < 0)
  84. throw new System.ArgumentException("Increment must be zero or greater: " + positionIncrement);
  85. this.positionIncrement = positionIncrement;
  86. }
  87. /// <summary>Returns the position increment of this Token.</summary>
  88. /// <seealso cref="setPositionIncrement">
  89. /// </seealso>
  90. public int GetPositionIncrement()
  91. {
  92. return positionIncrement;
  93. }
  94. /// <summary>Returns the Token's term text. </summary>
  95. public System.String TermText()
  96. {
  97. return termText;
  98. }
  99. /// <summary>Returns this Token's starting offset, the position of the first character
  100. /// corresponding to this token in the source text.
  101. /// Note that the difference between endOffset() and startOffset() may not be
  102. /// equal to termText.length(), as the term text may have been altered by a
  103. /// stemmer or some other filter. 
  104. /// </summary>
  105. public int StartOffset()
  106. {
  107. return startOffset;
  108. }
  109. /// <summary>Returns this Token's ending offset, one greater than the position of the
  110. /// last character corresponding to this token in the source text. 
  111. /// </summary>
  112. public int EndOffset()
  113. {
  114. return endOffset;
  115. }
  116. /// <summary>Returns this Token's lexical type.  Defaults to "word". </summary>
  117. public System.String Type()
  118. {
  119. return type;
  120. }
  121. public override System.String ToString()
  122. {
  123. System.Text.StringBuilder sb = new System.Text.StringBuilder();
  124. sb.Append("(" + termText + "," + startOffset + "," + endOffset);
  125. if (!type.Equals("word"))
  126. sb.Append(",type=" + type);
  127. if (positionIncrement != 1)
  128. sb.Append(",posIncr=" + positionIncrement);
  129. sb.Append(")");
  130. return sb.ToString();
  131. }
  132. }
  133. }