尝试为元组列表创建单独的整数值

Trying to create individual integer values for lists of tuples

我正在尝试创建一个基本的情绪分析器。我有类别中的单词列表,以及来自我正在从中获取评论的 reddit 线程的两个 csv 文件。我已经设法用适当的标签标记我的数据集,现在我在列表的列表中有一组元组,这些元组由注释分隔。我有一段代码,我希望用它来根据存在的标签为每个评论生成一个整数值,但是我在精神上碰壁了。

我试过下面的代码,最好的结果是 0,最坏的结果是 ValueError。我知道它肯定充满了坏主意,但我不知所措。在这一点上,我只想要一些功能 T_T

tLOTR = [[('terrible', 'negative'),
  ('so', 'intensifier'),
  ('awesome', 'positive'),
  ('so', 'intensifier'),
  ('but', 'shifter'),
  ('agree', 'positive'),
  ('like', 'positive'),
  ('really', 'intensifier'),
  ('but', 'shifter'),
  ('but', 'shifter'),
  ('so', 'intensifier'),
  ('not', 'shifter'),
  ('like', 'positive'),
  ('really', 'intensifier'),
  ('like', 'positive'),
  ('so', 'intensifier')],
 [('not', 'shifter'),
  ('amazing', 'positive'),
  ('but', 'shifter'),
  ('bad', 'negative'),
  ('but', 'shifter'),
  ('like', 'positive'),
  ('awful', 'negative'),
  ('but', 'shifter'),
  ('like', 'positive'),
  ('but', 'shifter'),
  ('so', 'intensifier'),
  ('completely', 'intensifier'),
  ('wrong', 'negative')]]

#this is just a few of my tagged sets

def sentalize(text):
    value = 0
    for x in text:
        for (word, tag) in x:
            if tag == "positive":
                value += 1
            elif tag == "negative":
                value -= 1
            elif tag == "shifter":
                value *= -1
            elif tag == "intensifier":
                value *= 1.25
    return value            

所以当我 运行 一件事情(例如 tLOTR[0])时,我得到 0 或 ValueError - 我理想的是为每个评论都有一个值列表(评论 1 = -0.348) 或类似的东西。

假设您希望 sentalize() 处理 tLOTR 的单个元素,您的问题是循环:

def sentalize(text):
    value = 0
    for word, tag in text:
        if tag == "positive":
            value += 1
        elif tag == "negative":
            value -= 1
        elif tag == "shifter":
            value *= -1
        elif tag == "intensifier":
            value *= 1.25
    return value


print(sentalize(tLOTR[0]))

请注意如何通过迭代 text 在一行中捕获 word, tag,而不是先提取一个元组 x 然后尝试以某种方式循环该元组的组件,就像你的例子一样。

通过该更改,您可以:values = list(map(sentalize, tLOTR)) 并获得结果 [-2.833251953125, 0.5625]

一些补充意见:

  • 将每个单词的类型存储为字符串(即 "positive"、"negative" 等)效率不高;相反,考虑用更简单的值
  • 表示
  • 因为您已经解析了评论并且显然已经将每个词与修饰符/标签的类型相匹配,这可能是更新值的正确时间,而不是使用这个 tLOTR 中间列表值。
  • -=+= 等运算符与 1-1 等正负常量值组合起来非常令人困惑。我建议只使用 +=*= 并在适当的地方使用负值或正值。