我正在尝试创建一个基本的情绪分析器。我有分类的单词列表,还有来自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)或者类似的东西
假设您希望
sentalize()
处理tLOTR
的单个元素,您的问题是循环:注意
word, tag
如何通过迭代text
在一行中捕获,而不是首先提取一个元组x
,然后尝试以某种方式循环该元组的组件,如您的示例中所示通过该更改,您可以执行:
values = list(map(sentalize, tLOTR))
并获得结果[-2.833251953125, 0.5625]
一些补充意见:
tLOTR
中间值列表李>-=
和+=
这样的运算符与像1
和-1
这样的正负常量值组合在一起非常容易混淆。我建议只使用+=
和*=
,并在适当的情况下使用负值或正值李>相关问题 更多 >
编程相关推荐