如何检查我得到的值是增加/减少?

时间:2015-05-06 03:42:55

标签: python

首先,我指出一些事项:

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')

提前致谢!

3 个答案:

答案 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"