我有一个句子(字符串)和一个函数,它从WordNet生成给定单词的所有同义词。我想根据我的句子的同义词,列出所有可能的变体。
此外,我还想保持原句的顺序,意思排列应该只包含第一个词的同义词作为第一个词,第二个词的排列作为他们的第二个词等等。
例如,如果我的输入是:
"5 centimeters"我的产出应该是:
5 cm
5 centimetres
5 centi-meters
5 centi-metres
five cm
five centimetres
five centi-meters
five centi-metres在Scala中进行此操作的最佳方法是什么?谢谢!
发布于 2019-01-23 17:56:46
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))也就是说,用同义词列表替换每个单词,然后交叉连接结果。
https://stackoverflow.com/questions/54330356
复制相似问题