gpt4 book ai didi

java - 地道的 Scala 列表理解 - 第一项匹配

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:14:13 25 4
gpt4 key购买 nike

亲们, 我最近一直在用 Scala 编写一些代码来自学这门语言,在最近的一些实验中,我使用了 an NLP library to produce a set of part-of-speech tagged words来自用户的输入。

我想写一个函数来给出句子中的第一个动词。如果没有动词,那么我想假设集合中的第一个词是动词(例如,如果玩家刚刚输入“who”或“uptime”,我的游戏将这些视为动词)。

以下是一段只有母亲才会喜欢的丑陋代码,它散发着命令式编程的味道,我想将其重构为更像惯用 Scala 的代码,最好是没有单个“if”语句的代码

def firstVerb = {
if (words.size == 1)
words.head.value
else {
val outWords = words.filter( word => word.pos == Verb)
if (outWords == Set.empty)
words.head.value
else
outWords.head.value
}
}

“words”变量的类型为 ListBuffer[EnrichedWord],其中 EnrichedWord 是我的类,它包含词性(pos,包含 Verb、Noun 等格对象)和原始单词(值)。

如果您是 Scala 天才,可以提供任何有关重构这个丑陋代码的指导,那将是非常棒的。

最佳答案

这还处理了 words 为空的情况,试一试:

words.find(_.pos == Verb).orElse(words.headOption).map(_.value).getOrElse("")

如果您确定 words 永远不会是一个空的 Set,这个更简单:

words.find(_.pos == Verb).getOrElse(words.head).value

顺便说一句,如果您使用的是 HashSet,那么某些元素位于第一个的概念实际上没有意义。如果每个元素代表一个句子中的一个词,它应该是一个 List 或一个 Seq

关于java - 地道的 Scala 列表理解 - 第一项匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9362952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com