def isSuperSet()

in nlpcraft/src/main/scala/org/apache/nlpcraft/nlp/parsers/NCSemanticEntityParser.scala [268:297]


            def isSuperSet(toks: Seq[NCToken]): Boolean = idxs.size > toks.size && toks.map(_.getIndex).toSet.subsetOf(idxs)

        var hs = mutable.ArrayBuffer.empty[Holder]

        for (piece <- getPieces(toks) if !hs.exists(_.isSuperSet(piece.baseTokens));
            variant <- Seq(piece.baseTokens) ++ piece.variants)
            def add(elemType: String, value: Option[String]): Unit = hs += Holder(elemType, variant, value)

            val idxs = variant.map(_.getIndex)
            if cache.add(idxs) then
                // Tries to search by stems.
                synsHolder.textSynonyms.get(variant.map(stems).mkString(" ")) match
                    case Some(elems) => elems.foreach(elem => add(elem.elementType, elem.value))
                    case None =>
                        // Combines stems(origin) and stems(lemma)
                        var found = false
                        if stems4Lemms.nonEmpty then
                            for (comb <- combine(variant.map(stems), variant.map(stems4Lemms)) if !found)
                                synsHolder.textSynonyms.get(comb.mkString(" ")) match
                                    case Some(elems) =>
                                        found = true
                                        elems.foreach(elem => add(elem.elementType, elem.value))
                                    case None => // No-op.
                        // With regex.
                        for ((elemType, syns) <- synsHolder.mixedSynonyms.getOrElse(variant.size, List.empty))
                            found = false

                            for (s <- syns if !found)
                                found = s.chunks.zip(variant).
                                    sortBy { (chunk, _) => if chunk.isText then 0 else 1 }.