Решается путем перекрестного произведения всех возможных подстрок (до длины 2) обеих входных строк.
Пример: если наши входные строки "1 2"
и "3 4"
Тогда ,
Все подстроки входной строки 1 до длины 2 = sub1 = {"1", "2", "1 2"}
Все подстроки входной строки 2 до длины 2 = sub2 = {"3", "4", "3 4"}
Решение = перекрестное произведение sub1
и sub2
= {("1", "3"), ("1", "4"), ("1", "3 4"), ("2", "3"), («2», «4»), («2», «3 4»), («1 2», «3»), («1 2», «4»), («1 2», « 3 4 ")}
Используемые методы:
//create subsets of length 1 AND 2 (bigrams)
private def createSubSets(str: String): List[String] = {
val arr = str.split(" ").filter(StringUtils.isNotBlank(_)).toSet[String]
var subsets = arr.subsets(1).map(_.mkString).toList
if(arr.size > 1) subsets ++= arr.subsets(2).map(_.mkString(" ")).toList
subsets
}
private def generateSynonymCandidatesFromPair(str1: String, str2: String): List[(String, String)] ={
createSubSets(str1).flatMap(s1 => createSubSets(str2).map(s2 => (s1, s2)))
}