首先,我指出一些事项:
cleaned_example = [['I', 'horrible', 'physics', 'pretty', 'good', 'chemistry', 'excellent', 'math'], ['First', 'concerned', 'worried', 'scared'], ['What', 'started', 'bar', 'fight', 'turned', 'confrontation', 'finally', 'gang', 'war'], ['Every', 'hill', 'mountain', 'shall', 'made', 'low', 'rough', 'places', 'made', 'plain,', 'crooked', 'places', 'made', 'straight'], ['This', 'blessed', 'plot', 'earth', 'realm', 'England']]
但实际上由20组词组成。
我使用的是情感函数,它是pattern.en的一部分,我想查看cleaning_example [0],cleaning_example [1] ....中的单词的情绪值是增加还是减少。情绪函数输出形式(a,b)的两个值,但我只对这些值中的第一个感兴趣。
这是我到目前为止所做的。我遇到两个问题。首先,当我只得到20时,我得到40个输出。其次,所有这些输出都是“不”。所以它很无用。
for index in range(len(cleaned_example)):
for position in range(len(cleaned_example[index])-1):
if sentiment(cleaned_example[index][position][0]) < sentiment(cleaned_example[index][position+1][1]):
print('yes')
else:
print('no')
提前致谢!
答案 0 :(得分:3)
在避免索引和使用更有意义的变量名称方面比汤姆更进一步(我用谷歌搜索了那种情绪化的东西):
for sentence in cleaned_example:
for word, next_word in zip(sentence, sentence[1:]):
if sentiment(word)[0] < sentiment(next_word)[0]:
print('yes')
else:
print('no')
如果例如sentence
为['a', 'b', 'c', 'd']
,则sentence[1:]
为['b', 'c', 'd']
,并且压缩它们会为您提供单词对('a', 'b')
,('b', 'c')
和{ {1}}。
我不知道为什么你认为你应该只得到20个输出(我得到36,顺便说一句,而不是40)。我怀疑你的工作水平是错误的,应该在句子上使用('c', 'd')
,而不是单词?请注意我如何命名我的变量名称,好的名称可以真正帮助您理解您的代码。三重指数不是那么多。
答案 1 :(得分:1)
由于你有参数(a,b)
而你只关心a
,所以在选择这些参数时总是需要[0]
;而且我怀疑你的括号也在错误的地方。也就是说,您的差异线应为:
if sentiment(cleaned_example[index][position])[0] < sentiment(cleaned_example[index][position+1])[0]:
所以列出的最终索引是0
而不是1
,并且您对情绪中返回的值使用[0]
(即{{1在函数调用的右边)。
如果您每次都没有索引[0]
,这会更容易阅读:
cleaned_example
最后,在这里,您几乎每个字都要拨打for word_list in cleaned_example:
for position in range(len(word_list)-1):
if sentiment(word_list[position])[0] < sentiment(word_list[position+1])[0]:
print('yes')
else:
print('no')
两次。如果这是一个问题,那么你应该重新调整你的代码。考虑到这一点,最好从以下内容开始:
sentiment
答案 2 :(得分:0)
如果您希望只获得20个输出,那么假设您只想要每组单词的“是”或“否”是正确的吗?我不确定你到底想要衡量的是什么,因为你可以只比较cleaned_example
中每组的第一个单词和单词列表中的最后一个单词的情绪。
for words in cleaned_example:
if sentiment(words[0])[0] < sentiment(words[-1])[0]:
print "Increasing"
else:
print "Decreasing"
另一种方法是计算每组单词的yes和no的数量。
for words in cleaned_example:
yes = 0
no = 0
for word1, word2 in zip(words, words[1:]):
if sentiment(word1)[0] < sentiment(word2)[0]:
yes = yes + 1
else:
no = no + 1
if yes > no:
print "yes"
elif yes < no:
print "no"
else:
print "`yes` = `no`"
另一种方法是获得一组的平均情绪,并将其与第一个单词的情绪进行比较。
import numpy as np
for words in cleaned_example:
a_values = []
for word in words:
a_values.append(sentiment(word)[0])
if sentiment(words[0])[0] < np.mean(a_values):
print "Increasing"