我正在尝试创建一个基本的情绪分析器。我有类别中的单词列表,还有来自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)或类似的东西。
答案 0 :(得分:0)
假设您希望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
这样的正和负常数值结合起来非常令人困惑。我建议仅使用+=
和*=
,并在适当的地方使用负值或正值。