【问题标题】:Wrong predictions when Python writes data into csvPython 将数据写入 csv 时的错误预测
【发布时间】:2021-09-17 01:22:50
【问题描述】:

我已经训练了一个情感分析模型,然后我在 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!,中性

我哪里做错了?请帮忙。

先谢谢你。

--编辑--

下面回答了解决方案。我都试过了,它们都有效!非常感谢:)

【问题讨论】:

  • 感谢@FloLie 和@Daweo!这两种解决方案都对我有用!

标签: python csv export-to-csv sentiment-analysis


【解决方案1】:

如果我没记错的话,你的 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)

【讨论】:

    【解决方案2】:
    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))
    

    这行得通吗?

    【讨论】:

      猜你喜欢
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 2016-03-27
      • 2023-03-28
      • 1970-01-01
      • 2015-01-21
      相关资源
      最近更新 更多