## 2 Materials and Methods
### Text Cleaning and Normalisation  
As reported in Figure 1, top, investor day transcripts were gathered from Bloomberg and subsequently curated. Text normalisation was performed through nltk and pandas, in Python. The interactive nature of Jupyter notebook made it easier to code manually which stopwords (e.g., proper names) had to be removed from texts. Text normalisation included: case removal, elimination of punctuation, elimination of spurious characters and stopwords, and lemmatisation. Additional data cleaning was needed to ensure company names were consistent--for example, \"W.R. Berkley\" was changed to \"WR Berkley\". The following data were retrieved from each of the text files and stored in a pandas dataframe:  
* Company name: taken from the filename;
* Time period: taken from the filename, and stored as a 6-digit number. The first four digits represent the year, and the subsequent two the calendar quarter;
* Company section: all words within the text file up to a pre-defined identifier (for example, \"questions and answers\") were allocated to the company section. In practice, this involved some trial and error, as the identifiers changed over the years;
* Analyst section: contained all words within the text file not allocated to the company section.  
Figure 1: **Top**: Flowchart of text analysis for keyword extraction, sentiment analysis, and network building from the investor transcripts. **Bottom Left**: Comparing the length of Company and Analyst sections overall years (2014–2021). **Bottom Right**: A smaller sample of Admiral Share Price fluctuations with Investor-Day dates.  
Initial exploratory analysis was carried out to identify potential firms that could distort the findings. This included extracting the distribution of the transcript lengths for each section (across firms and over time), identifying the most common words (uni-, bi-, and tri-grams), and word clouds to identify whether themes could be identified. During this stage, one company, _Berkshire Hathaway_, was removed on the basis that (1) their transcript is significantly larger than the next largest transcript; and (2) the company themes were significantly different from other insurers--which reflects the fact that insurance, via its subsidiary GEICO, is only a relatively small part of the overall group (<20% of revenues in 2021 according to Statista.com, accessed on 14 September 2022), which would increase the risk of extracting non-insurance relevant themes during the keyword extraction analysis. The share price movement was also added to the pandas dataframe. The following pipeline was created to format the unstructured corpus text before analysis:  
* Remove special characters (e.g., non-alphanumeric characters) and text within curly brackets. In the latter case, curly brackets are used within certain IDTs to denote who is speaking.
* Tokenise text: This process breaks up each IDT into chunks of information, known as tokens, that are treated as discrete elements for analysis. This analysis also explored the use of sub-word tokenisation--i.e., in addition to analysing individual words, the analysis also considered 2- and 3-word tokens.
* Remove stop-words: It is essential to remove stop words as these do not contain useful sentiment information (for example, words like \"well, thank you\"). In practice, identifying stopwords was an iterative and subjective process, using word clouds and word counts to establish those to remove. In this analysis, we started with the general stop words available from _nltk_, and then added firm and individual names to avoid larger insurers and analysts (who typically cover several insurers) dominating the themes.
* Lemmatis the tokens: Lemmatisation refers to the process of removing inflectional endings, to ensure only the base form of a word is retained.