19 using System.Collections;
21 using Lucene.Net.Analysis;
22 using Lucene.Net.Analysis.Tokenattributes;
23 using Lucene.Net.Util;
25 namespace Lucene.Net.Analysis.NGram
32 public static int DEFAULT_MIN_NGRAM_SIZE = 1;
33 public static int DEFAULT_MAX_NGRAM_SIZE = 2;
35 private int minGram, maxGram;
37 private char[] curTermBuffer;
38 private int curTermLength;
39 private int curGramSize;
58 throw new System.ArgumentException(
"minGram must be greater than zero");
60 if (minGram > maxGram)
62 throw new System.ArgumentException(
"minGram must not be greater than maxGram");
64 this.minGram = minGram;
65 this.maxGram = maxGram;
67 this.termAtt = AddAttribute<ITermAttribute>();
68 this.offsetAtt = AddAttribute<IOffsetAttribute>();
76 : this(input, DEFAULT_MIN_NGRAM_SIZE, DEFAULT_MAX_NGRAM_SIZE)
82 public override bool IncrementToken()
86 if (curTermBuffer == null)
88 if (!input.IncrementToken())
94 curTermBuffer = (
char[])termAtt.TermBuffer().Clone();
95 curTermLength = termAtt.TermLength();
96 curGramSize = minGram;
98 tokStart = offsetAtt.StartOffset;
101 while (curGramSize <= maxGram)
103 while (curPos + curGramSize <= curTermLength)
106 termAtt.SetTermBuffer(curTermBuffer, curPos, curGramSize);
107 offsetAtt.SetOffset(tokStart + curPos, tokStart + curPos + curGramSize);
114 curTermBuffer = null;
118 public override void Reset()
121 curTermBuffer = null;