# Identify Private Breakouts and One-on-ones¶

In [1]:

    import pandas as pd
    import numpy as np
    import os, re

In [2]:

    %matplotlib inline
    %load_ext autoreload
    %autoreload 2

In [3]:

    pd.set_option('display.memory_usage', 'deep')
    pd.set_option('display.precision', 2)
    pd.set_option('display.width', 200)
    pd.set_option('display.max_rows', 300)
    pd.set_option('display.max_columns', None)
    pd.set_option('display.max_colwidth', 80)
    pd.options.display.float_format = '{:,.4f}'.format

In [4]:

    from filepath_03 import * # change to reflect input and output file path

Load transcript component data cleaned from previous steps

In [5]:

    complong = pd.read_pickle(filepath_complong)
    varlist = ['transcriptid','section','seq','par_role','text','nwords']
    complong = complong[varlist]
    complong = complong.query('text.notnull()')

Identify private breakouts

In [6]:

    def identify_breakout_gen(sent):
        i_breakout = 0
        txt_breakout = ""

        reobj_breakout_spec = re.compile(r"\bbreak[\-]{0,1}out\s(?:.{1,15}room|session|meeting)",flags = re.I)
        reobj_breakout_excl = re.compile(r"won[\'\’]t.{1,10}break[\-]{0,1}out|do\snot.{1,10}break[\-]{0,1}out|not.{1,5}break[\-]{0,1}out", flags = re.I)

        if reobj_breakout_spec.search(sent) and not reobj_breakout_excl.search(sent):
            i_breakout = 1
            txt_breakout = sent

        return i_breakout, txt_breakout

In [7]:

    complong[['temp1A','txt1A']]= complong.apply(lambda x: identify_breakout_gen(x['text']), axis=1, result_type="expand")

In [8]:

    def identify_breakout_start_end(sent):
        i_breakout = 0
        txt_breakout = ""

        reobj_breakout_gen  = re.compile(r"(?<!no\s)\bbreak[\-]{0,1}out\b",flags = re.I)
        reobj_breakout_excl = re.compile(r"won[\'\’]t.{1,10}break[\-]{0,1}out|do\snot.{1,10}break[\-]{0,1}out|not.{1,5}break[\-]{0,1}out", flags = re.I)

        if reobj_breakout_gen.search(sent) and not reobj_breakout_excl.search(sent):
            i_breakout = 1
            txt_breakout = sent

        return i_breakout, txt_breakout

In [9]:

    complong[['temp1B','txt1B']]= complong.apply(lambda x: identify_breakout_start_end(x['text']), axis=1, result_type="expand")

In [10]:

    def identify_one_on_one(sent):
        i_1on1 = 0
        txt_1on1 = ""

        reobj_one      = re.compile(r"(?<!no\s)one[\-\s]{1}on[\-\s]{1}one|one-to-ones",flags = re.I)
        reobj_one_excl = re.compile(r"one\-on\-one\scontract|one\-on\-one\sinteraction|one\-on\-one\scontract", flags = re.I)

        if reobj_one.search(sent) and not reobj_one_excl.search(sent):
            i_1on1 = 1
            txt_1on1 = sent

        return i_1on1, txt_1on1

In [11]:

    complong[['temp2','txt2']]= complong.apply(lambda x: identify_one_on_one(x['text']), axis=1, result_type="expand")

Identify components at the start or end of a section

In [12]:

    complong['start'] = (complong['seq']<=3)*1
    complong['end'] = (complong['seq']+2>=complong.groupby(['transcriptid','section'])['seq'].transform('max'))*1

Define components with mentioning of breakout or one-on-one. Differentiate between components at the start, end, or in the middle of a section.

In [13]:

    complong['i_breakout'] = np.where((complong['start']==1)| (complong['end']==1),
                                       complong['temp1B'], complong['temp1A'])
    complong['txt_breakout'] = np.where((complong['start']==1)| (complong['end']==1),
                                       complong['txt1B'], complong['txt1A'])
    complong = complong.rename(columns={'temp2':'i_1on1', 'txt2':'txt_1on1'})
    complong = complong.drop(columns=['temp1A','txt1A', 'temp1B', 'txt1B'])

aggregate to transcript level

In [14]:

    trans = complong.groupby(['transcriptid'])[['i_1on1','i_breakout']].agg('max').reset_index()

In [15]:

    trans.to_pickle(outputpath_priv)

In [ ]:

In [ ]: