Разделение разговора между двумя людьми на python

#python-3.x #nlp

Вопрос:

предложение = «»»Докладчик 1: Здравствуйте. Меня зовут ГАС. Я могу помочь вам спланировать простое путешествие по воздуху. Куда ты хочешь пойти ? Спикер2: Я хочу поехать в Сан-Диего 28 мая Спикер1: Во сколько вы хотите уехать? Спикер 2: Я должен быть в Сан-Диего до 10 утра Спикер 1: Хотели бы вы, чтобы рейс 102 P. S. A. прибыл в 9.15 утра ? Спикер 2: Каким будет следующий рейс ? Спикер1: Рейс Air California 310, который отправляется в 8.30 утра и прибывает в 10.00. Спикер2: Я возьму первый. Спикер1: На какое имя я должен забронировать номер, пожалуйста? Спикер2: Дэн Боброу Спикер1: Я подтвердил следующий рейс: P. S. A. рейс 102 в среду 28 мая из Сан-Хосе в Сан-Диего, который отправляется в 7.30 утра и прибывает в 9.15 утра. Докладчик 1: На какую дату вы хотите вернуться ? Спикер 2: В пятницу вечером. Спикер 1: Хотели бы вы улететь в 7.45 вечера ? Спикер 2: Это нормально. Докладчик 1: Я подтвердил следующий рейс: P. S. A. рейс 307 в пятницу 30 мая из Сан-Диего в Сан-Хосе, который отправляется в 7.45 вечера и прибывает в 9.30 вечера.Спасибо за звонок. До свидания»»»

Мне нужно разделить разговоры speaker1 и speaker2 отдельно в python

Комментарии:

1. когда вы говорите «разделиться», вы имеете в виду группу??

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

Ответ №1:

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

 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)
 

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

Комментарии:

1. ПРИВЕТ, мне нужен вывод в две группы, одна из которых содержит все разговоры спикера1, а другая-все разговоры спикера2, например:-

Ответ №2:

Вы можете разбить диалоговое окно на предложения, представляющие номера говорящих или их слова, 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)
 

Ответ №3:

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

 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'])