You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala执行代码得到Array[Boolean],如何转为含0和1的Array[Int]?

解决Scala中返回Array[Boolean]而非Array[Int]的问题

看起来你是在处理情感分析时,不小心让map操作返回了布尔值而不是预期的0/1整数。这种情况通常是因为代码中某个分支返回了布尔表达式,而非明确的Int类型值——比如直接把AFINN.lookup(...).length > 0这样的判断作为返回结果,而不是返回你定义的senti变量。

下面给你两种修正方案,既解决类型问题,又让代码更简洁安全:

方案1:修复原有代码逻辑,明确返回Int

保留你原来的变量写法,确保最后返回的是定义的Int类型变量senti,同时避免索引越界问题:

val reviewSenti = extracted_reviews.map(reviewText => {
  val reviewWordsSentiment = reviewText.getString(0).split(" ").map(word => {
    var senti: Int = 0
    val lowerWord = word.toLowerCase()
    val sentimentList = AFINN.lookup(lowerWord)
    if (sentimentList.nonEmpty) {
      // 这里可以根据你的需求调整:比如找到情感词就设为1,或者用情感值的正负来设1/0
      senti = 1 
      // 如果是根据情感值正负:senti = if (sentimentList(0) > 0) 1 else 0
    }
    senti // 必须明确返回这个Int变量,而不是if表达式的结果
  })
  reviewWordsSentiment
})

方案2:用函数式风格简化代码(推荐)

去掉可变变量var,用headOption安全处理空数组的情况,代码更简洁且不易出错:

val reviewSenti = extracted_reviews.map(reviewText => {
  reviewText.getString(0).split(" ").map(word => {
    val lowerWord = word.toLowerCase()
    // 检查是否找到情感词,找到返回1,否则返回0
    AFINN.lookup(lowerWord).headOption.map(_ => 1).getOrElse(0)
    // 如果需要根据情感值正负返回1/0:
    // AFINN.lookup(lowerWord).headOption.map(s => if (s > 0) 1 else 0).getOrElse(0)
  })
})

关键注意点:

  • 避免直接用AFINN.lookup(...)(0),如果lookup返回空数组会抛出索引越界异常,用headOption更安全
  • 确保map操作的最后一行是Int类型的值,而不是布尔表达式(比如sentimentList.nonEmpty本身是Boolean,如果把它作为返回值,就会得到Array[Boolean])

内容的提问来源于stack exchange,提问作者Parv bali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:25:41