Then, numerical quantities associated with each chemical were calculated. To do this, chemical quantities were categorised by type from the structured XML output of ChemicalTagger (e.g. by volume, moles, mass etc.), and parsed into physically meaningful units with the pint python library (). To prevent double-counting in situations where two units were mentioned, e.g. by the common phrase "5 g of [reagent] (0.8 mmol)," only a single unit type was considered for each chemical entity according to the priority list (moles > mass > volume). These units were then converted into moles using the molecular mass identified from the PubChem identity. In the case of converting volume to moles, densities were estimated from the ChEDL database of critical point properties using the COSTALD method. Once chemical identities and quantities had been fully converted, these were aggregated into a single bill of materials for each synthesis (visualised in Table ). Conditions (i.e. time and temperature values) were similarly parsed from strings into meaningful units using the pint python library, and stored as minutes and degrees Kelvin, respectively. Finally, to reduce semantically meaningless differences between different synthesis sequences, synthesis actions were grouped using a similar technique to the recently developed ULSA for inorganic nanomaterials syntheses. Synthesis actions were categorised as either being related to "addition," "extraction," "reaction," or "other" (Table ) and collocated steps of the same kind were grouped together. A fifth category, "start," was used to signify opening statements of synthesis protocols (e.g. "ZIF-8 was produced by our previously published method"), which would otherwise be miscategorised as an "extraction" or "other" action. "Start" actions were then excluded from further analysis.