Python将数据写入csv时的错误预测



我已经训练了一个情绪分析模型,然后我在Python中创建了一个函数,以基于该模型预测文本。

以下是从文本中获取情绪(消极、积极、中性(的函数:

def get_sentiment(text):

encoded_review = tokenizer.encode_plus(
text,
max_length=MAX_LEN,
add_special_tokens=True,
return_token_type_ids=False,
pad_to_max_length=True,
return_attention_mask=True,
return_tensors='pt',
)

input_ids = encoded_review['input_ids'].to(device)
attention_mask = encoded_review['attention_mask'].to(device)
output = model(input_ids, attention_mask)
_, prediction = torch.max(output, dim=1)

return class_names[prediction]

当我用一个文本测试这个get_sentiment函数时,它给出了正确的情感:

get_sentiment('Miksi kukaan ei soittanut minulle??? Olen odottanut kauan!')

现在我有一个巨大的csv,由我想用这个get_sentiment函数预测的文本组成。我想在csv中输入文本旁边的情感。我使用了以下代码:

from csv import writer
from csv import reader
with open('input.csv', 'r') as read_obj,
open('output.csv', 'w', newline='') as write_obj:
csv_reader = reader(read_obj)
csv_writer = writer(write_obj)

for row in csv_reader:
row.append(get_sentiment(row))
csv_writer.writerow(row)

它在output.csv中添加了文本和情感,但现在的情感是不正确的:

Miksi kukaan ei soittanut minulle???Olen odottanut kauan!,中性

哪里出错了?请帮忙。

事先谢谢。

--编辑--

下面给出了解决方案。我两种都试过了,都奏效了!非常感谢:(

如果我没有错的话,您的get_sentiment函数应该是用文本(str(馈送的,但您正在执行

for row in csv_reader:
row.append(get_sentiment(row))
csv_writer.writerow(row)

从而提供整行,即tuple。如果文本出现在第一列,那么您应该按照的方式抓取第一列

for row in csv_reader:
row.append(get_sentiment(row[0]))
csv_writer.writerow(row)
with open('input.csv', 'r') as read_obj,
open('output.csv', 'w', newline='') as write_obj:
for row in read_obj:
write_obj.writerow(row + "," + get_sentiment(row))

这样行吗?

最新更新