Python 想要一个整数,得到元组吗?

Python 想要一个整数,得到元组吗?,python,nltk,Python,Nltk,我试图使用一个简单的价值体系(非常简单,不期望有好的结果)来衡量文档上的“情绪” 我使用defaultdict(int)构建了一个for循环,但我只是在代码中挥舞手臂,它以元组而不是整数弹出,为找到的每个单词赋予值,而不是像我预期的那样逐行汇总。(我对这一切都很陌生,很迷茫。请不要恨我?) 我原本希望所有线路都能增值,但最终还是得到了以下几点: defaultdict(int, {'I': 75, ';': 179, '

我试图使用一个简单的价值体系(非常简单,不期望有好的结果)来衡量文档上的“情绪”

我使用defaultdict(int)构建了一个for循环,但我只是在代码中挥舞手臂,它以元组而不是整数弹出,为找到的每个单词赋予值,而不是像我预期的那样逐行汇总。(我对这一切都很陌生,很迷茫。请不要恨我?)

我原本希望所有线路都能增值,但最终还是得到了以下几点:

defaultdict(int,
            {'I': 75,
             ';': 179,
             'But': 13,
             'With': 0,
             'Tolkien': 3,
             'And': 9,
             'even': 1,
             'no': 0,
             '“': 1,
             'You': 5,
             'They': 9,
             'Sure': 5,
             'it': 7,
             'He': 16,
             'Like': 2,
             'Why': 0,
             'Totally': 0,
             'Looks': 3,
             'Instead-': 0})

但时间要长得多。

我不知道您想要的结果字典中的键是什么,但假设您想要行号,我想您可能会这么想:

def value_eval(doc):
    value = defaultdict(int)
    for lineNumber, line in enumerate(doc):
        value = 0
        for word in line:
            if word in positive:
                value += 1
            if word in negative:
                value -= 1
            if word in intensifiers:
                value *= 1.25
            if word in shifters:
                value *= -1.25
        value[lineNumber] = value
    return value
如果您希望结果中的键不是行号,那么您只需要在第二行到最后一行执行其他操作


我想知道你的意见是什么。为了实现这一点,
doc
必须是某种类型的iterable(行),其中的每个值也是iterable(words)。例如,如果
doc
是一个输入文件句柄,这将不起作用。

经过编辑,以包含我在看到另一篇文章之前遗漏的行的值。我认为他的理解力要好一点,但我不得不用空格分隔行,以正确地找到单词,而不是重复字符

def value_eval():
    value = 0
    line_values = defaultdict(int)
    with open('doc.txt', 'r') as f:
        lines = f.readlines()
    for lineNumber, line in enumerate(lines):
            words = line.split()
            for word in words:
                if word in positive:
                    print(line)
                    value += 1
                if word in negative:
                    value -= 1
                if word in intensifiers:
                    value *= 1.25
                if word in shifters:
                    value *= -1.25
                line_values[lineNumber] = value
    return line_values

defaultdict(int)将创建一个字典,其中每次出现键时的值都是整数

value[line[0]]+=1
将每行的第一个单词作为键添加到词典中,并将递增赋值部分作为该键的值

我开始玩了…我的数学是正确的…有点累了,你可以添加以下内容来获得页面值

def get_avg_page_value(doc_values, total_lines, pages ):
    values = 0
    for x in range(total_lines):
        values += doc_values[x]
    print("average: {}".format(values/pages))

doc_values = value_eval()
lines_per_page = 20
total_lines = len(doc_values.values())
pages = int(total_lines/lines_per_page)
get_avg_page_value(doc_values, total_lines, pages)

用于将内容放入dict的键是
行[0]
。那似乎不对另外,我认为你想要-=和*=在一些你分别有-,和*的地方但我看不到元组。我想你的意思是别的。我不知道你所说的“逐行总结”是什么意思。你能给我们举个例子说明你想要什么吗?另外,显示您的输入“doc”。您所说的“获取元组”是什么意思?您发布的代码和输出中没有元组。另外,请注意语句
value[line[0]]-1
没有任何作用-您计算一个值,然后将其丢弃。你需要
-=
(在接下来的两种情况下,
*=
),我想我知道你想做什么了。您希望结果字典中的键是什么?它们是字典对而不是元组。
def get_avg_page_value(doc_values, total_lines, pages ):
    values = 0
    for x in range(total_lines):
        values += doc_values[x]
    print("average: {}".format(values/pages))

doc_values = value_eval()
lines_per_page = 20
total_lines = len(doc_values.values())
pages = int(total_lines/lines_per_page)
get_avg_page_value(doc_values, total_lines, pages)