首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala:创建基于句子的每个单词的同义词的所有可能的排列

Scala:创建基于句子的每个单词的同义词的所有可能的排列
EN

Stack Overflow用户
提问于 2019-01-23 15:16:17
回答 1查看 345关注 0票数 1

我有一个句子(字符串)和一个函数,它从WordNet生成给定单词的所有同义词。我想根据我的句子的同义词,列出所有可能的变体。

此外,我还想保持原句的顺序,意思排列应该只包含第一个词的同义词作为第一个词,第二个词的排列作为他们的第二个词等等。

例如,如果我的输入是:

代码语言:javascript
复制
"5 centimeters"

我的产出应该是:

代码语言:javascript
复制
5 cm
5 centimetres
5 centi-meters
5 centi-metres
five cm
five centimetres
five centi-meters
five centi-metres

在Scala中进行此操作的最佳方法是什么?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-23 17:56:46

the question mentioned in the comments的一个答案包含了一个有用的crossJoin函数,它加入了任意数量的列表。这是我稍作编辑的版本:

代码语言:javascript
复制
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
      }
  }

您还需要一些方法来获取一个单词的同义词列表:

代码语言:javascript
复制
def synonyms(String): List[String]

那你的解决方案就是

代码语言:javascript
复制
val words: List[String] = "5 centimeters".split("\\s+").toList

crossJoin(words.map(synonyms))

也就是说,用同义词列表替换每个单词,然后交叉连接结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54330356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档