如何从一对输入字符串中创建(双字母组的)组合对?

问题描述 投票:0回答:1

我有2个输入字符串,我想生成所有成对的字符串组合,其中每个字符串都来自不同的输入字符串

示例:输入字符串:

[“女士礼服”和“女士礼服”

对于组合,我想将字符串限制为n = 2(二位数)。

预期输出:

女士-女士,女士-礼服,连衣裙-女士,连衣裙-礼服,女式连衣裙-女士,女式连衣裙-礼服,女式连衣裙-女士礼服,女士礼服-女士和女士礼服-礼服

string scala apache-spark combinations n-gram
1个回答
0
投票

通过对两个输入字符串的所有可能的子字符串(最大长度为2)进行叉积解决。

示例:如果我们的输入字符串是"1 2""3 4"

然后,

输入字符串1的所有子字符串,直到长度2 = sub1 = {"1", "2", "1 2"}

输入字符串2的所有子字符串,直到长度2 = sub2 = {"3", "4", "3 4"}

解决方案= sub1sub2的叉积= {(“ 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)))
  }
© www.soinside.com 2019 - 2024. All rights reserved.