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

2024-09-26 18:01:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我尝试了下面的代码,它最多只能产生0,最坏只能产生ValueError。我知道里面肯定满是坏主意,但我不知所措。在这一点上,我只想让一些东西发挥作用

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)或者类似的东西


Tags: 代码标记列表sovaluetaglikebut
1条回答
网友
1楼 · 发布于 2024-09-26 18:01:51

假设您希望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]))

注意word, tag如何通过迭代text在一行中捕获,而不是首先提取一个元组x,然后尝试以某种方式循环该元组的组件,如您的示例中所示

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

一些补充意见:

  • 将每个单词的类型存储为字符串(即“肯定”、“否定”等)不是很有效;相反,考虑用更简单的值
  • 表示它。
  • 由于您已经解析了注释,并且显然已将每个单词与修饰语/标记的类型相匹配,因此这可能是更新值的正确时间,而不是使用这个tLOTR中间值列表
  • 将像-=+=这样的运算符与像1-1这样的正负常量值组合在一起非常容易混淆。我建议只使用+=*=,并在适当的情况下使用负值或正值

相关问题 更多 >

    热门问题