我有2个输入字符串,我想生成所有成对的字符串组合,其中每个字符串都来自不同的输入字符串。
示例:输入字符串:
[“女士礼服”和“女士礼服”
对于组合,我想将字符串限制为n = 2(二位数)。
预期输出:
女士-女士,女士-礼服,连衣裙-女士,连衣裙-礼服,女式连衣裙-女士,女式连衣裙-礼服,女式连衣裙-女士礼服,女士礼服-女士和女士礼服-礼服
通过对两个输入字符串的所有可能的子字符串(最大长度为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)))
}