尝试为元组列表创建单独的整数值
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
等正负常量值组合起来非常令人困惑。我建议只使用 +=
和 *=
并在适当的地方使用负值或正值。
我正在尝试创建一个基本的情绪分析器。我有类别中的单词列表,以及来自我正在从中获取评论的 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
等正负常量值组合起来非常令人困惑。我建议只使用+=
和*=
并在适当的地方使用负值或正值。