我有一个句子(字符串)和一个从WordNet生成给定单词的所有同义词的函数。我想根据其同义词列出我的句子的所有可能变体。
此外,我想维持原始句子的顺序,这意味着排列应仅包含第一个单词的同义词作为第一个单词,而第二个单词的排列作为第二个单词,依此类推。
例如,如果我输入的是:
"5 centimeters"
我的输出应遵循以下内容:
5 cm
5 centimetres
5 centi-meters
5 centi-metres
five cm
five centimetres
five centi-meters
five centi-metres
在Scala中进行此操作的最佳方法是什么?谢谢!
答案 0 :(得分:0)
对the question mentioned in the comments的一个答案包含一个有用的crossJoin
函数,该函数可以加入任意数量的列表。这是我对其进行的稍微修改的版本:
def crossJoin[T](list: Traversable[Traversable[T]]): Traversable[Traversable[T]] =
list match {
case Nil => Nil
case x :: Nil => x map (Traversable(_))
case x :: xs =>
val xsJoin = crossJoin(xs)
for {
i <- x
j <- xsJoin
} yield {
Traversable(i) ++ j
}
}
您还需要某种方式来获取单词的同义词列表:
def synonyms(String): List[String]
那么您的解决方案就是
val words: List[String] = "5 centimeters".split("\\s+").toList
crossJoin(words.map(synonyms))
也就是说,将每个单词替换为其同义词列表,然后交叉连接结果。