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