in core/src/main/scala/com/spotify/featran/transformers/NGrams.scala [73:107]
override def prepare(a: Seq[String]): Set[String] = ngrams(a).toSet
override def buildFeatures(
a: Option[Seq[String]],
c: SortedMap[String, Int],
fb: FeatureBuilder[_]
): Unit =
super.buildFeatures(a.map(ngrams), c, fb)
private[transformers] def ngrams(a: Seq[String]): Seq[String] = {
val max = if (high == -1) a.length else high
val b = Seq.newBuilder[String]
var i = low
while (i <= max) {
if (i == 1) {
b ++= a
} else if (i <= a.size) {
val q = mutable.Queue[String]()
var j = 0
val it = a.iterator
while (j < i) {
q.enqueue(it.next())
j += 1
}
b += mkNGram(q, sep)
while (it.hasNext) {
q.dequeue()
q.enqueue(it.next())
b += mkNGram(q, sep)
}
}
i += 1
}
b.result()
}