首页 > 解决方案 > 需要帮助编写代码修改 txt 文件的内容,然后将其保存为 json 文件中的字典(它包含情感数据)

问题描述

我在 txt 文件中保存了一些句子以及它们相应的情绪。它旨在训练机器学习分类器。但是,我想重组txt文件的内容,然后将其保存为json。下面我将解释我想要的前后结构。

txt文件以以下格式保存:

FIRST LINE OF TEXT .@negative
SECOND LINE OF TEXT .@neutral

如您所知,每个句子都保存在单独的行中,后跟一个空格,然后是分隔符(在本例中为 .@),然后是句子的指定情绪。

这是我想要的 json 文件格式:

[{'message_body': 'FIRST LINE OF TEXT', 'sentiment': -1}, {'message_body': 'SECOND LINE OF TEXT', 'sentiment': 0}]

所以这里我们有一个开括号,后跟一个带有 2 个键(消息正文和情绪)的字典,其中消息正文键包含文本句子,情绪键包含情绪的数值(负数为 -1,正数为 1中性为0)。因此它实际上保存为字典列表,每个字典对应于原始 txt 文件中的 1 行。

有谁知道我可以编写代码为我做这件事的方法吗?我假设这将是某种 for 循环,但字典不是我的强项。提前致谢!

编辑:在将 txt 文件保存为 csv 后,想出了一个有点冗长的方法:

import pandas as pd

data_csv = pd.read_csv(filepath_or_buffer='text.csv' , sep='.@', header=None, names=['sentence','sentiment'])

list_data = []

for index, row in data_csv.iterrows():

    dictionary_data = {}
    dictionary_data['message_body'] = row['sentence']
    if row['sentiment'] == 'positive':
         dictionary_data['sentiment'] = 1
    elif row['sentiment'] == 'negative':
         dictionary_data['sentiment'] = -1
    else:
         dictionary_data['sentiment'] = 0
    list_data.append(dictionary_data)

标签: pythondictionary

解决方案


You could do the following:

# read the file into a list of lines
with open("input.txt") as f:
    lines = f.readlines()

# set up empty dictionary
rv = []

# for each line, split into text and sentiment
for x in lines:
    line_dict = {'message_body': x.split('.@')[0].strip()}
    value = x.split('.@')[1].strip()
    # Apply sentiment logic
    if value == 'positive':
        line_dict['sentiment'] = 1
    elif value == 'negative':
        line_dict['sentiment'] = -1
    else:
        line_dict['sentiment'] = 0
    rv.append(line_dict)

Output:

>>> rv
[{'message_body': 'FIRST LINE OF TEXT', 'sentiment': -1},
 {'message_body': 'SECOND LINE OF TEXT', 'sentiment': 0}]

推荐阅读