создание кумуна для каждого полученного вывода в одном поле в python - PullRequest
0 голосов
/ 25 февраля 2020

Я выполняю анализ эмоций, используя метод lstm, где я уже выполнил свою тренировочную модель, а также свою часть прогнозирования. но мой прогноз появляется в одном столбце ... Я покажу вам ниже.

Вот мои коды:

        with open('output1.json', 'w') as f:
            json.dump(new_data, f)

selection1 = new_data['selection1']
#creating empty list to be able to create a dataframe
names = []
dates = []
commentss = []
labels = []
hotelname = []
for item in selection1:
    name = item['name']
    hotelname.append(name)
    #print ('>>>>>>>>>>>>>>>>>> ', name)
    Date = item['reviews']
    for d in Date:
        names.append(name)
        #convert date from 'january 12, 2020' to 2020-01-02
        date = pd.to_datetime(d['date']).strftime("%Y-%m-%d")
        #adding date to the empty list dates[]
        dates.append(date)
        #print('>>>>>>>>>>>>>>>>>> ', date)
    CommentID = item['reviews']
    for com in CommentID:
        comment = com['review']
        lcomment = comment.lower()  # converting all to lowercase
        result = re.sub(r'\d+', '', lcomment)  # remove numbers
        results = (result.translate(
        str.maketrans('', '', string.punctuation))).strip()  # remove punctuations and white spaces
        comments = remove_stopwords(results)
        commentss.append(comment)
       # print('>>>>>>',comments)

    #add the words in comments that are already present in the keys of dictionary
        encoded_samples = [[word2id[word] for word in comments if word in word2id.keys()]]


    # Padding
        encoded_samples = keras.preprocessing.sequence.pad_sequences(encoded_samples, maxlen=max_words)

     # Make predictions
        label_probs, attentions = model_with_attentions.predict(encoded_samples)
        label_probs = {id2label[_id]: prob for (label, _id), prob in zip(label2id.items(), label_probs[0])}
        labels.append(label_probs)


#creating dataframe
dataframe={'name': names,'date': dates, 'comment': commentss, 'classification': labels}
table = pd.DataFrame(dataframe, columns=['name', 'date', 'comment', 'classification'])
json = table.to_json('hotel.json', orient='records')

вот результаты, которые я получаю:

[
  {
    "name": "Radisson Blu Azuri Resort & Spa",
    "date": "February 02, 2020",
    "comment": [
      "enjoy",
      "daily",
      "package",
      "start",
      "welcoming",
      "end",
      "recommend",
      "hotel"
    ],
    "label": {
      "joy": 0.0791392997,
      "surprise": 0.0002606699,
      "love": 0.4324670732,
      "sadness": 0.2866959572,
      "fear": 0.0002588668,
      "anger": 0.2011781186
    }
  },

Вы можете найти полный вывод по этой ссылке: https://jsonblob.com/a9b4035c-5576-11ea-afe8-1d95b3a2e3fd

Можно ли разбить поле метки на отдельные поля, как показано ниже?

[
  {
    "name": "Radisson Blu Azuri Resort & Spa",
    "date": "February 02, 2020",
    "comment": [
      "enjoy",
      "daily",
      "package",
      "start",
      "welcoming",
      "end",
      "recommend",
      "hotel"
    ],
      "joy": 0.0791392997,
      "surprise": 0.0002606699,
      "love": 0.4324670732,
      "sadness": 0.2866959572,
      "fear": 0.0002588668,
      "anger": 0.2011781186

  },

Может кто-нибудь, пожалуйста, помогите мне, как мне нужно изменить мои коды и сделать это возможным, пожалуйста, ребята, объясните мне, пожалуйста ..

1 Ответ

0 голосов
/ 25 февраля 2020

Если вы не можете сделать это до того, как получите результат, вы можете легко манипулировать этим словарем следующим образом:

def move_labels_to_dict_root(result):
    labels = result["labels"]
    meta_data = result
    del meta_data["labels"]
    result = {**meta_data, **labels}
    return result

и затем вызывать move_labels_to_dict_root в понимании списка, например [move_labels_to_dict_root(result) for result in results].

Однако я бы спросил, почему вы хотите это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...