【问题标题】:sentiment of tweets VBA推文VBA的情绪
【发布时间】:2020-03-26 06:33:48
【问题描述】:

我正在尝试创建一个函数来确定 VBA 中推文的情绪。该函数应检查推文中的每个单词,如果该单词作为我的 Excel 表中的肯定列表或否定列表中的关键字之一存在(显示为 positiveRng 和negativeRng),它将影响该函数显示的情绪分数。一个正面的关键字应该在情感得分上加 10,一个负面的关键字应该去掉 10。这是我到目前为止的代码

Function sentimentCalc(tweet As String) As Integer

Dim positiveRng As Range
Dim negativeRng As Range

Set positiveRng = Worksheets("Keywords").Range("A2:A54")
Set negativeRng = Worksheets("Keywords").Range("B2:B54")

Dim twords As Variant

twords = Split(tweet, "  ")

Dim Result As Integer

For i = LBound(twords) To UBound(twords)
If StrComp(twords(i), positiveRngCell.Value, vbTextCompare) = 0 Then
Result = Result + 10
ElseIf StrComp(twords(i), negativeRngCell.Value, vbTextCompare) = 0 Then
Result = Result - 10
End If
Next i

sentimentCalc = Result

End Function

由于某种原因,我不断收到#NAME?错误,如果有人可以帮助我,将不胜感激。谢谢!

【问题讨论】:

  • positiveRngCell 和 negativeRngCell 未在您的函数中声明或填充。在尝试将其作为 UDF 之前,请通过从 Sub 调用它来测试您的函数。然后就可以调试了。
  • twords = Split(tweet, " ") 将为您提供带有标点符号和笑脸的单词,如果推文中有双空格,则还会为您提供由单个空格组成的“单词”。循环工作表单元格是您可以设计的最慢的方式。考虑在相邻列中具有估值(+10 或 -10)的单个单词列表,并通过 VLookup() 获得估值。
  • @Variatus 确定这是一个家庭作业,并且确定两个范围内的两个列表是给定的。

标签: excel vba loops


【解决方案1】:

请将以下内容放在标准代码模块中...

Public Function sentimentCalc&(tweet$, posKW As Range, negKW As Range)
    Dim res&, w

    w = Split(tweet)

    For i = 0 To UBound(w)
        Select Case True
            Case CheckKeywords(w(i), posKW): res = res + 10
            Case CheckKeywords(w(i), negKW): res = res - 10
        End Select
    Next

    sentimentCalc = res

End Function

Private Function CheckKeywords(val, r As Range) As Boolean
    CheckKeywords = r.Parent.Evaluate("iferror(match(""" & val & """," & r.Address & ",), 0)")
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多