Разделение разговора двух человек в python

avatar
hari ram
1 июля 2021 в 17:44
156
3
0

sentence = """Speaker1: Здравствуйте. Меня зовут GUS. Я могу помочь вам спланировать простую поездку по воздуху. Куда вы хотите отправиться? Спикер2: Я хочу поехать в Сан-Диего 28 мая. Спикер1: Во сколько ты хочешь уйти? Speaker2: Я должен быть в Сан-Диего до 10 утра. Speaker1: Хотите P.S.A. рейс 102, который прибывает в 9:15 утра? Speaker2: Какой следующий рейс? Докладчик 1: Рейс 310 авиакомпании Air California вылетает в 8:30 и прибывает в 10:00. Спикер2: Я возьму первый Спикер1: На какое имя мне сделать заказ, пожалуйста? Спикер2: Дэн Бобров Speaker1: Я подтвердил следующий рейс: P.S.A. рейс 102 в среду 28 мая из Сан-Хосе в Сан-Диего, который отправляется в 7:30 и прибывает в 9:15. Speaker1: Какого числа вы хотите вернуться? Спикер2: В пятницу вечером. Speaker1: Вам нужен рейс, который отправляется в 19:45? Спикер2: Это нормально. Speaker1: Я подтвердил следующий рейс: P.S.A. рейс 307 в пятницу 30 мая из из Сан-Диего в Сан-Хосе, который отправляется в 19:45 и прибывает в 21:30. Спасибо. для вызова. До свидания"""

Мне нужно разделить разговор динамика 1 и динамика 2 отдельно в python

Источник
onyambu
1 июля 2021 в 17:55
0

когда вы говорите сплит, вы имеете в виду группу??

DYZ
1 июля 2021 в 19:36
0

Каков ваш ожидаемый результат?

Ответы (3)

avatar
DYZ
1 июля 2021 в 19:35
0

Вы можете разбить диалог на предложения, представляющие либо номера говорящих, либо их слова с помощью re.split, а затем объединить нечетные и четные предложения в список кортежей:

clauses = re.split(r'Speaker(\d+):\s+', sentence)
conversation = list(zip(clauses[1::2], clauses[2::2])
#[('1', 'Hello. My name is GUS...'), ...]

Список можно преобразовать в словарь, организованный по говорящим, если это необходимо:

from collections import defaultdict
conversation_dict = defaultdict(list)
for speaker, phrase in conversation:
    conversation_dict[speaker].append(phrase)
avatar
onyambu
1 июля 2021 в 18:15
0

Если вы хотите их сгруппировать:

import re
from itertools import groupby

dat = re.split(' (?=Speaker\\d+)', sentence)
key = lambda x: re.sub(':.*', '', x)
result = groupby(sorted(dat, key = key), key = key)

final = {i:list(j) for i,j in result}

print(final['Speaker1'])
avatar
Alon Gadot
1 июля 2021 в 18:03
0

Я считаю, что следующая (наивная) стратегия должна быть эффективной для вашего варианта использования:

split_sentence = sentence.split(' ')
speaker_1_sentences = []
speaker_2_sentences = []
current_speaker_is_1 = True
current_sentence = []
for word in split_sentence:
    if word == 'Speaker1:':
        current_speaker_is_1 = True
        if len(current_sentence) > 0:
            speaker_1_sentences.append(' '.join(current_sentence))
            current_sentence = []
        continue
    elif word == 'Speaker2:':
        current_speaker_is_1 = False
        if len(current_sentence) > 0:
            speaker_2_sentences.append(' '.join(current_sentence))
            current_sentence = []
        continue
    current_sentence.append(word)
print(speaker_1_sentences)
print(speaker_2_sentences)

Это включает повторение разговора и попеременное добавление предложений к первому и второму говорящим. Вы можете рассмотреть решение на основе регулярных выражений, в зависимости от ваших требований.

hari ram
2 июля 2021 в 02:23
0

HI Мне нужен вывод на две группы, одна из которых содержит все разговоры динамика 1, а другая - все разговоры динамика 2, например: -