Как разбить строку текста по соединению в Python? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть датафрейм, который представляет собой запись разговора 2 человек.В df слова, их временные метки и метка говорящего.Это выглядит так.

      word    start  stop      speaker
0       but   2.72  2.85        2
1    that's   2.85  3.09        2
2   alright   3.09  3.47        2
3     we'll   8.43  8.69        1
4      have   8.69  8.97        1
5        to   8.97  9.07        1
6      okay   9.19 10.01        2
7      sure  10.02 11.01        2
8     what?  11.02 12.00        1
9         i  12.01 13.00        2
10     agree 13.01 14.00        2
11       but 14.01 15.00        2
12       i   15.01 16.00        2
13  disagree 16.01 17.00        2
14    thats  17.01 18.00        1
15     fine  18.01 19.00        1 
16   however 19.01 20.00        1         
17       you 20.01 21.00        1
18       are 21.01 22.00        1
19      like 22.01 23.00        1
20      this 23.01 24.00        1
21       and 24.01 25.00        1

У меня есть код, который объединяет все слова на одного оратора в одно высказывание, в котором сохраняются метка времени и метка динамика.Используя этот код:

df.groupby([(df['speaker'] != df['speaker'].shift()).cumsum(), , df['speaker']], as_index=False).agg({
    'word': ' '.join,
    'start': 'min',
    'stop': 'max'
})

Я получаю это:

       word        start  stop speaker
0  but that's alright  2.72  3.47  2
1       we'll have to  8.43  9.07  1
2           okay sure  9.19 11.01  2
3               what? 11.02 12.00  1

Однако , я хочу разделить эти объединенные высказывания на под-высказывания на основе присутствияконъюнктивное наречие («однако», «и», «но» и т. д.).В результате я хочу получить следующее:

       word        start  stop speaker
0  but that's alright  2.72  3.47  2
1       we'll have to  8.43  9.07  1
2           okay sure  9.19 11.01  2
3               what? 11.02 12.00  1
4             I agree 12.01 14.00  2
5      but i disagree 14.01 17.00  2
6          thats fine 17.01 19.00  1
7     however you are 19.01 22.00  1
8           like this 22.01 24.00  1
9                 and 24.01 25.00  1

Буду признателен за любые рекомендации по выполнению этой задачи.

1 Ответ

0 голосов
/ 25 июня 2019

Вы можете добавить OR (|) и проверить, находится ли word в определенном списке перед группировкой (например, с df['word'].isin(['however', 'and', 'but'])):

df.groupby([((df['speaker'] != df['speaker'].shift()) | (df['word'].isin(['however', 'and', 'but'])) ).cumsum(), df['speaker']], as_index=False).agg({
    'word': ' '.join,
    'start': 'min',
    'stop': 'max'
})  

enter image description here

...