in core/src/main/scala/com/spotify/featran/transformers/NHotEncoder.scala [70:100]
override def prepare(a: Seq[String]): Set[String] = Set(a: _*)
override def buildFeatures(
a: Option[Seq[String]],
c: SortedMap[String, Int],
fb: FeatureBuilder[_]
): Unit = a match {
case Some(xs) =>
val keys = xs.distinct.sorted
var prev = -1
val unseen = MSet[String]()
keys.foreach { key =>
c.get(key) match {
case Some(curr) =>
val gap = curr - prev - 1
if (gap > 0) fb.skip(gap)
fb.add(name + '_' + key, 1.0)
prev = curr
case None =>
unseen += key
}
}
val gap = c.size - prev - 1
if (gap > 0) fb.skip(gap)
if (encodeMissingValue) {
addMissingValue(fb, unseen, keys)
}
if (unseen.nonEmpty) {
fb.reject(this, FeatureRejection.Unseen(unseen.toSet))
}
case None => addMissingItem(c, fb)
}