我正在尝试使用一个简单的价值系统(非常简单,不会期望获得出色的结果)来衡量文档中的“情感”。
我使用defaultdict(int)构建了一个for循环,但我只是在代码中挥舞着双手,它弹出时显示了元组而不是整数,为找到的每个单词赋予了价值,而不是逐行汇总如我所料(我对这一切非常陌生,很迷失。请不要恨我吗?)
positive = ['accurate','adore','agree','amazed','amazingly','amazing','award worthy', 'awesome','beautiful', 'better','breathtaking','cool', 'enjoy','excited', 'exciting','fantastic', 'friend','glad','good','handpicked', 'handsome', 'happy','hopeful','impressive','improved', 'incredible','like', 'love', 'relieved','right']
negative = ['angry','annoyed','annoying','awful','badly', 'bad','butcher', 'careless','disagree', 'disappointed','disgusting','dislike', 'gross','hated', 'hate', 'horrible','horribly','mutilated','ruin', 'sad','terrible', 'terribly', 'thoughtless','ugh','ugly','unrealistic','worse','worst','wrong']
shifters = ['but','don’t', 'however', 'not']
intensifiers = ['awfully','completely','incredibly', 'majorly','really','seriously','so','wow']
def value_eval(doc):
value = defaultdict(int)
for line in doc:
for word in line:
if word in positive:
value[line[0]] += 1
if word in negative:
value[line[0]] - 1
if word in intensifiers:
value[line[0]] * 1.25
if word in shifters:
value[line[0]] * -1.25
return value
我希望所有方面都具有附加值,但最后却涉及以下方面:
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})
但更长。
答案 0 :(得分:1)
我不知道您想要的结果字典中的键是什么,但是假设您想要行号,我想这就是您在想的:
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
必须是某种可迭代的(行),其中的每个值也是可迭代的(字)。例如,如果doc
是输入文件句柄,则将无法使用。
答案 1 :(得分:0)
经过编辑,可以按我错过的行来包含价值,直到看到另一篇文章为止。我以为他的理解要好一些,但是我不得不用空格将行分开以正确理解单词与迭代字符。
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)