当我执行此代码时,我必须得到Array[Int]
由1和0组成。但我得到的输出是Array[Boolean]
,由true和false组成。
这为进一步执行带来了麻烦。我想得到0和1只应该做什么?
val reviewSenti = extracted_reviews.map(reviewText => {
val reviewWordsSentiment = reviewText.getString(0).split(" ").map(word => {
var senti: Int = 0;
if (AFINN.lookup(word.toLowerCase()).length > 0) {
senti = AFINN.lookup(word.toLowerCase())(0)
};
senti;
});
val reviewSentiment = reviewWordsSentiment.sum
(reviewSentiment)
if (reviewSentiment >= 3){
reviewSentiment == 1;
}
else {
reviewSentiment == 0;
}
})
reviewSenti: Array[Boolean] = Array(false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, ...
答案 0 :(得分:2)
尝试将1
和另一个设为0
和if (reviewSentiment >= 3) 1 else 0
。这可能会对你有所帮助。
就像
一样{{1}}
答案 1 :(得分:1)
不确定代码的某些上下文。所以我在某些假设中可能是错的。在代码的第一部分中,您可能希望避免双重调用AFINN.lookup(word.toLowerCase())
,所以基本上您可以使用以下内容进行映射:
val afinnLookup = AFINN.lookup(word.toLowerCase())
if (afinnLookup.length > 0)
afinnLookup(0)
else
0
然后我再次确定你从AFFIN
得到什么,但你可以使用模式匹配来避免查看长度并使用if:
affinLookup match {
case head :: tail ⇒ head
case _ ⇒ 0
}
或者您甚至可以使用headOption
执行此操作:然后您将返回Option[Int]
,但之后它可能会遵循库的意图,即没有亲和力或类似的东西。基本上它可以简短:
val reviewWordsSentiment = reviewText.getString(0).split(" ").map(
word => AFINN.lookup(word.toLowerCase()).headOption)
这会返回你Option [Int]这可能会或可能不会让你复杂化。如果你决定走这条路,这是一个非常好的指南: http://danielwestheide.com/blog/2012/12/19/the-neophytes-guide-to-scala-part-5-the-option-type.html
或者您可以在headOption之后使用fold(0){identity}
或getOrElse(0)
来避免选项[Int]:
val reviewWordsSentiment = reviewText.getString(0).split(" ").map(
word => AFINN.lookup(word.toLowerCase()).headOption.getOrElse(0))
这样您就可以稍后执行sum
,甚至可以跳过为它分配一个最终可能需要的值。
if (reviewWordsSentiment.sum >= 3) 1 else 0
对于您提供的代码和问题,这是一个相对较多的假设。我希望这有助于或提供一些指导方针。